2009-01-14 215 views
3

我有一個圖書館,我想從舊系統遷移到一個新的優化。圖書館數據庫系統設計

舊圖書館是使用MS Access(mdb文件)構建的,其中每本書本身都是一個文件。每本書由兩個表格組成,一個用於章節標題,另一個用於內容。還有一個mdb文件,其中包含所有書名,每本書的頁碼,作者姓名和其他一般信息。

新系統的數據庫引擎是MySQL的,所以我有用於存儲圖書的三(也許)可能: 1-商店都在一個表中的書籍章節的標題,而在另外一個巨大的表中的所有書籍的內容。 2-將所有書籍章節標題存儲在一張表中,並將每本書的內容存儲在本書的表格中。 (所以如果我有5本書,我會爲章節標題獲得1個表格,爲內容獲得5個表格)。 3-將它們存儲爲舊系統的設計,每本書都有兩張表,一張是章節標題,另一張是內容。

我不喜歡使用多個數據庫,一個數據庫可以完美地完成wordpress.com託管的博客(yap,他們擁有龐大的數據庫,當然他們使用其他技術,但我在談論DB系統架構)。

該圖書館共有500多本圖書,並且數量在不斷增加。

您認爲如何?

回答

5

以上都不是。沒有理由必須將章節標題與章節內容分開。但是你自己需要一張表來表示書名。這裏有一個建議表結構:在章節表

CREATE TABLE books (
    book_id  SERIAL PRIMARY KEY, 
    title  VARCHAR(100) NOT NULL, 
    published DATE NOT NULL, 
    isbn  VARCHAR(16) NOT NULL 
    -- etc. 
); 

CREATE TABLE chapters (
    book_id  BIGINT UNSIGNED NOT NULL, 
    chapter_id SERIAL, 
    chapter_num VARCHAR(10) NOT NULL, -- varchar to allow chapter "VII." 
    title  VARCHAR(100) NOT NULL, 
    content  MEDIUMTEXT, 
    PRIMARY KEY (book_id, chapter_id), 
    FOREIGN KEY (book_id) REFERENCES books(book_id) 
); 

幾千行是平凡的,如MySQL數據庫。

+0

令人印象深刻的是,比爾 - 一眨眼的完整DDL!尼斯.... – duffymo 2009-01-15 00:10:00

2

這裏是我的建議:

與主鍵,書名,ISBN,出版社等 作者表的主鍵,名稱和外鍵圖書

Books表。 內容表包含主鍵,章節編號,章節標題,內容路徑以及書籍的外鍵。

我不會將章節內容作爲BLOB或CLOB存儲在數據庫中。你不能在其中搜索。最好將它們保存在文件系統中,並在數據庫中存儲文件的相對路徑或絕對路徑。

您可以使用Lucene索引內容以允許Google對內容進行搜索。這會比你現在的系統有所改進。