劉芳芳
(桂林電子科技大學信息科技學院,廣西 桂林541004)
以往的圖書管理設計都以圖書為主,讀者為輔。而三維讀書法轉換以讀者為中心,以圖書為連接的讀書記錄為主的個性化讀書系統。三維讀書法如圖1所示。

圖1 XYZ三維閱讀網絡(局部)例子
對三維讀書法系統的數據庫設計中,分析其中讀者、書籍、主題、版本和作者的關系,設計以下六張核心數據表。用以實現三維(主題、作者、同本書)方向的關聯和拓展如表1和表2所示。

表1 圖書表

表2 圖書子表
Book(圖書表)和Book_item(圖書子表)是一對多的關系。需要注意的是:圖書表的每一條記錄,對應圖書子表至少有一條記錄。如果圖書有多個版本,比如翻譯,或是改版,那么在Book_item圖書子表則會有多條對應的記錄。通過Book_item圖書子表,就可以關聯相對應的圖書。
Book圖書表和Book_item圖書子表的Id_author字段分別存儲作者ID和譯者ID,考慮到一本書可以有多個作者或譯者,因此這里采用文本類型。存儲時可以把ID列表序列化為文本格式存儲或是直接用分割符比如逗號隔開。如:(2,5,4)

表3 作者表

表4 讀書記錄表
Read_record(讀書記錄表)存儲讀書記錄。增加了一個Is_public字段,可以用做是否公開記錄功能。如果為真,則為對外公開;反之則為讀者自己可見。

表5 讀者表

表6 主題表
使用topic主題表,通過連接book圖書表和book_item圖書子表,可以查詢到某個主題的所有書籍。考慮到在實際應用中,主題的查詢比較多而更新操作較少,可以把book_item圖書子表的書籍名稱列表,序列化為文本格式存儲,這樣在查詢某主題的所有圖書時,只需查詢一個表即可,提高查詢效率。
前文的六張數據表為圖2矩形框的實體對象,因對象間是多對多的關系,因此菱形所表示的關系通常會設計為一張關系表格,更符合設計規范。但應以實際系統應用為主,在優化系統的前提下,可對整個數據庫結構做反范式設計。

圖2 E-R圖
結語:本文針對以讀者為中心的XYZ三維閱讀法,設計并探討XYZ三維閱讀系統的數據庫結構和實現。并在數據庫E-R設計中,針對系統實際情況做了一些優化,對某些數據表做反范式設計,通過冗余結構提高查詢效率。