图书馆数据库系统设计

时间:2009-01-14 23:45:33

标签: database database-design architecture

我有一个库,我想将它从旧系统迁移到新的优化系统。

旧库是使用MS Access(mdb文件)构建的,其中每本书本身就是一个文件。每本书由两个表组成,一个用于章节标题,第二个用于内容。还有一个mdb文件,其中包含所有书籍名称,每本书的页码,作者姓名和其他一般信息。

新的系统数据库引擎是MySQL,因此我有三种(可能)存储书籍的可能性: 1-将所有书籍章节标题存储在一个表格中,将所有书籍内容存储在另一个巨大的表格中。 2-将所有书籍章节标题存储在一个表格中,将每本书籍的内容存储在本书的表格中。 (所以,如果我有5本书,我将获得1个章节标题和5个内容)。 3-将它们存储为旧系统的设计,每本书有两个表,一个用于章节标题,第二个用于它的内容。

我不喜欢使用多个数据库,一个数据库可以完美地完成作为wordpress.com托管的博客(yap,他们有庞大的数据库,当然他们使用其他技术,但我说的是DB系统架构)。

该图书馆藏书超过500本,而且这个数字正在增加。

您怎么看?

2 个答案:

答案 0 :(得分: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这样的数据库,章节表中的几千行是微不足道的。

答案 1 :(得分:2)

这是我的建议:

包含主键,标题,ISBN,出版商等的书籍表 具有Book的主键,名称和外键的作者表。 内容表,包含主键,章节编号,章节标题,内容路径以及书籍的外键。

我不会将章节内容存储为数据库中的BLOB或CLOB。你无法搜索它们。最好将它们保存在文件系统中,只存储数据库中文件的相对或绝对路径。

您可以使用Lucene对内容编制索引,以允许对内容进行类似Google的搜索。这将是对当前系统的改进。