【发布时间】:2016-06-10 19:27:13
【问题描述】:
我想在数据库中保存一些书籍。我对 couchdb 很感兴趣,因为它 可以直接以html格式提供内容。
将存储的书本大小在 500Kb 到 50Mb 或更大之间变化。 每本书还将存储它的目录、作者、出版商等。 这些书籍将按其类别进行分组。还有一些大书 分几卷。
将提供的主要功能是按关键字查找书页 用户可以对数据库中的所有书籍执行此操作或通过其过滤 类别或书籍。我不介意缓慢插入,因为它会完成 偶尔。
现在,我对设计表示怀疑。我想出了两个设计 它的视图地图功能:
-
将每本书存储为一个文档:
设计如下:
{ _id: "book name because it's unique", author: { name: "Some name", bio: "Author's biography if available" }, contents: [ { text: "some long text", page: 14 } ] publisher: "Some information about publisher" }视图地图功能如下所示:
function (doc) { if (doc._id && doc.contents) { for (var i = 0; i < doc.contents.length; ++i) { var page = doc.contents[i]; emit([doc._id, page.page], { title: doc.title, content: page.text, page_number: page.page, author: doc.author }); } } } -
将书籍、作者、内容拆分到自己的文档中:
这本书的设计是这样的:
{ _id: "book:book's name", type: "book", publisher: "some information about publisher" }作者设计:
{ _id: "author:author's name", type: "author", name: "author name", bio: "author biography", book_id: "book:book's name" }内容设计:
{ _id: "page: unique id", type: "page", page: 1231, text: "the contents", book_id: "book:book's name" }视图地图功能如下所示:
function (doc) { if (doc.type === "page") { emit([doc.book_id, doc._id], { book_id: doc.book_id, content: doc.text, page_number: doc.page }); } }
那么,哪个更好?或者,也许您可以提出一个更好的方法来做到这一点? 或者也许 SQL 数据库更适合具有功能的书籍数据库 我上面提到过?
【问题讨论】:
标签: database-design