我有一个库,我想将它从旧系统迁移到新的优化系统。
旧库是使用MS Access(mdb文件)构建的,其中每本书本身就是一个文件。每本书由两个表组成,一个用于章节标题,第二个用于内容。还有一个mdb文件,其中包含所有书籍名称,每本书的页码,作者姓名和其他一般信息。
新的系统数据库引擎是MySQL,因此我有三种(可能)存储书籍的可能性: 1-将所有书籍章节标题存储在一个表格中,将所有书籍内容存储在另一个巨大的表格中。 2-将所有书籍章节标题存储在一个表格中,将每本书籍的内容存储在本书的表格中。 (所以,如果我有5本书,我将获得1个章节标题和5个内容)。 3-将它们存储为旧系统的设计,每本书有两个表,一个用于章节标题,第二个用于它的内容。
我不喜欢使用多个数据库,一个数据库可以完美地完成作为wordpress.com托管的博客(yap,他们有庞大的数据库,当然他们使用其他技术,但我说的是DB系统架构)。
该图书馆藏书超过500本,而且这个数字正在增加。
您怎么看?
答案 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的搜索。这将是对当前系统的改进。