情况如下: 我有一个名为“books”的表,还有一个名为“categories”的表。 每个“书”都属于一个类别,因此该书有一个名为“类别ID”的字段。 但是有必要制作一个“categoryList”来存储“book id”吗? 我可以使用select语句来查找属于类别的书籍,但是它是一种更好的方法来存储来自categoryList的书籍ID吗?谢谢。
答案 0 :(得分:3)
实际上,最好使用映射表来指定类别/书籍关系。
这个表可以命名为category_book,并且有一列用于category_id& book_id的一列
答案 1 :(得分:3)
如果一本书可以属于许多类别,并且一个类别可以有多个书籍,那么您需要使用中间表(类似Books _JOIN_Categories
)来获得许多关系。
Books
ID | BookName
Categories
ID | CategoryName
Books_Join_Categories
BookID | CategoryID
如果每本书只有一个类别,但每个类别可以有多个书籍,那么你当前的关系结构(书籍表中的CategoryID
)就可以了。
Books
ID | CategoryID | BookName
Categories
ID | CategoryName
事实上,第二种选择可能是最好的。在这种情况下,多对多关系可能不是一个好主意(除非这本书被撕成两半以便放在不同的架子上)。如果两个不同的“类别”部分需要相同的书,那么每个类别(库中的部分)将获得它们自己的物理书籍副本。这意味着数据库中有两本书记录,每一本都有一个单独的CategoryID
答案 2 :(得分:0)
在你的previous question中,你说一本书只属于一个类别。所以你不需要CategoryList表。这是额外的维护,没有额外的好处。按类别支持查询是Nature为我们提供索引的原因。