劉芳芳
(桂林電子科技大學(xué)信息科技學(xué)院,廣西 桂林541004)
以往的圖書管理設(shè)計都以圖書為主,讀者為輔。而三維讀書法轉(zhuǎn)換以讀者為中心,以圖書為連接的讀書記錄為主的個性化讀書系統(tǒng)。三維讀書法如圖1所示。
圖1 XYZ三維閱讀網(wǎng)絡(luò)(局部)例子
對三維讀書法系統(tǒng)的數(shù)據(jù)庫設(shè)計中,分析其中讀者、書籍、主題、版本和作者的關(guān)系,設(shè)計以下六張核心數(shù)據(jù)表。用以實現(xiàn)三維(主題、作者、同本書)方向的關(guān)聯(lián)和拓展如表1和表2所示。
表1 圖書表
表2 圖書子表
Book(圖書表)和Book_item(圖書子表)是一對多的關(guān)系。需要注意的是:圖書表的每一條記錄,對應(yīng)圖書子表至少有一條記錄。如果圖書有多個版本,比如翻譯,或是改版,那么在Book_item圖書子表則會有多條對應(yīng)的記錄。通過Book_item圖書子表,就可以關(guān)聯(lián)相對應(yīng)的圖書。
Book圖書表和Book_item圖書子表的Id_author字段分別存儲作者ID和譯者ID,考慮到一本書可以有多個作者或譯者,因此這里采用文本類型。存儲時可以把ID列表序列化為文本格式存儲或是直接用分割符比如逗號隔開。如:(2,5,4)
表3 作者表
表4 讀書記錄表
Read_record(讀書記錄表)存儲讀書記錄。增加了一個Is_public字段,可以用做是否公開記錄功能。如果為真,則為對外公開;反之則為讀者自己可見。
表5 讀者表
表6 主題表
使用topic主題表,通過連接book圖書表和book_item圖書子表,可以查詢到某個主題的所有書籍??紤]到在實際應(yīng)用中,主題的查詢比較多而更新操作較少,可以把book_item圖書子表的書籍名稱列表,序列化為文本格式存儲,這樣在查詢某主題的所有圖書時,只需查詢一個表即可,提高查詢效率。
前文的六張數(shù)據(jù)表為圖2矩形框的實體對象,因?qū)ο箝g是多對多的關(guān)系,因此菱形所表示的關(guān)系通常會設(shè)計為一張關(guān)系表格,更符合設(shè)計規(guī)范。但應(yīng)以實際系統(tǒng)應(yīng)用為主,在優(yōu)化系統(tǒng)的前提下,可對整個數(shù)據(jù)庫結(jié)構(gòu)做反范式設(shè)計。
圖2 E-R圖
結(jié)語:本文針對以讀者為中心的XYZ三維閱讀法,設(shè)計并探討XYZ三維閱讀系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)和實現(xiàn)。并在數(shù)據(jù)庫E-R設(shè)計中,針對系統(tǒng)實際情況做了一些優(yōu)化,對某些數(shù)據(jù)表做反范式設(shè)計,通過冗余結(jié)構(gòu)提高查詢效率。