【问题标题】:Library Database System Design图书馆数据库系统设计
【发布时间】:2010-10-01 12:02:46
【问题描述】:

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

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

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

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

那个图书馆有 500 多本书,而且数量还在增加。

你怎么看?

【问题讨论】:

    标签: database database-design architecture


    【解决方案1】:

    以上都不是。没有理由将章节标题与章节内容分开。但是你需要一张桌子来存放书名本身。这是一个建议的表结构:

    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 这样的数据库来说是微不足道的。

    【讨论】:

      【解决方案2】:

      这是我的建议:

      带有主键、标题、ISBN、出版商等的图书表。 Authors 表,其中包含 Books 的主键、名称和外键。 包含主键、章节编号、章节标题、目录路径和 Books 外键的目录表。

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

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

      【讨论】:

        猜你喜欢
        • 2015-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-22
        • 1970-01-01
        • 2010-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多