我有一个表“Books”,有一个“genres”列,我想引用另一个包含流派列表的表。
问题是想要在列中存储多个类型。
例如,
ID | Author | Title | Genres
2 | David Baldacci |Stone Cold | 1,4 (action thriller )
表格“图书类型”,包含2列Id和流派。
1动作
2戏剧
3喜剧
4惊悚郎 5恐怖
可以这样做吗?或者它不实用,我应该将类型存储为简单的字符串?
答案 0 :(得分:2)
解决此问题的最佳方法是使用所谓的链接表。
链接表如下所示:
ID (optional) | BookID| GenreID
1 2 1
2 2 4
然后每本书可以在此表中有多行(或一行)。
(如果您关心表的行级审计或事务审计,可选ID将非常有用 - 您可以使用它来唯一地标识此行 - 对于您的问题,不需要它。)
答案 1 :(得分:1)
可以完成,但不应该。
错误数据库设计 - 您的数据库应为normalized。
我建议使用many-to-many table - genreId
和bookId
列(每个都是外键,一起形成复合主键)。这将作为您需要的链接(一本书可以有很多类型,每种类型都可以写很多书)。
以Book Genres
表为例,将您的图书作为示例,如下所示:
bookId genreId
2 1
2 4
答案 2 :(得分:1)
你需要第三张桌子,也许叫做BookGenre,它可以作为多人关系的“解析器”。 BookGenre有两列,BookID和GenreID。每个类型的每本书都会为BookGenre添加一行。
BookGenre中有两行用于您提供的示例数据:
BookID GenreID 2 1 2 4