存储和检索外部表中的多个值

时间:2011-04-23 14:22:56

标签: sql sql-server-2008

我有一个表“Books”,有一个“genres”列,我想引用另一个包含流派列表的表。
问题是想要在列中存储多个类型。 例如,

ID  | Author          | Title       | Genres
 2  | David Baldacci  |Stone Cold   | 1,4        (action thriller )

表格“图书类型”,包含2列Id和流派。

  

1动作
  2戏剧
   3喜剧
   4惊悚郎    5恐怖

可以这样做吗?或者它不实用,我应该将类型存储为简单的字符串?

3 个答案:

答案 0 :(得分:2)

解决此问题的最佳方法是使用所谓的链接表。

链接表如下所示:

 ID (optional) | BookID| GenreID
 1               2       1
 2               2       4

然后每本书可以在此表中有多行(或一行)。

(如果您关心表的行级审计或事务审计,可选ID将非常有用 - 您可以使用它来唯一地标识此行 - 对于您的问题,不需要它。)

答案 1 :(得分:1)

可以完成,但不应该。

错误数据库设计 - 您的数据库应为normalized

我建议使用many-to-many table - genreIdbookId列(每个都是外键,一起形成复合主键)。这将作为您需要的链接(一本书可以有很多类型,每种类型都可以写很多书)。


Book Genres表为例,将您的图书作为示例,如下所示:

bookId    genreId
2         1
2         4

答案 2 :(得分:1)

你需要第三张桌子,也许叫做BookGenre,它可以作为多人关系的“解析器”。 BookGenre有两列,BookID和GenreID。每个类型的每本书都会为BookGenre添加一行。

BookGenre中有两行用于您提供的示例数据:

BookID  GenreID
2       1
2       4