【发布时间】:2010-07-06 17:50:11
【问题描述】:
情况如下: 我有一张叫做“书”的桌子,还有一张叫做“类别”的桌子。 每个“书”都属于一个类别,因此书有一个名为“类别 ID”的字段。 但是有必要制作一个“categoryList”来存储“book id”吗? 我可以使用 select 语句来查找属于类别的书籍,但是从 categoryList 中存储书籍 ID 是否更好?谢谢。
【问题讨论】:
标签: database-design
情况如下: 我有一张叫做“书”的桌子,还有一张叫做“类别”的桌子。 每个“书”都属于一个类别,因此书有一个名为“类别 ID”的字段。 但是有必要制作一个“categoryList”来存储“book id”吗? 我可以使用 select 语句来查找属于类别的书籍,但是从 categoryList 中存储书籍 ID 是否更好?谢谢。
【问题讨论】:
标签: database-design
其实最好用映射表来指定分类/图书的关系。
此表可以命名为 category_book,并且有一列用于 category_id,一列用于 book_id
【讨论】:
如果一本书可以属于很多类别,而一个类别可以有很多书,那么您需要使用中间表(例如Books _JOIN_Categories)建立 MANY to MANY 关系。
Books
ID | BookName
Categories
ID | CategoryName
Books_Join_Categories
BookID | CategoryID
如果每本书只有一个类别,但每个类别可以有很多书,那么您当前的关系结构(图书表中的CategoryID)应该可以满足您的需求。
Books
ID | CategoryID | BookName
Categories
ID | CategoryName
事实上,第二种选择可能是最好的。在这种情况下,多对多关系可能不是一个好主意(除非这本书被撕成两半放在不同的书架上)。如果两个不同的“类别”部分需要同一本书,那么每个类别(图书馆中的部分)都将获得它们自己的物理本书副本。意思是数据库中有两条书籍记录,每条记录都有一个单独的CategoryID
【讨论】:
在您的previous question 中,您说一本书只属于一个类别。因此,您不需要 CategoryList 表。那是额外的维护,没有额外的好处。支持按类别查询是 Nature 为我们提供索引的原因。
【讨论】: