1

我试图弄清楚在这种情况下设置数据库的适当方法是什么:

我正在创建一个电影/电视数据库。一部电影可能有多种类型,而电视节目可能有多种类型。

基本上我想知道的是,如果您有电影桌、电视桌……您是否应该:

  1. 有一个 MovieHasGenre 表,由 Movie 表的外键和流派值的常规字段组成

    或者

  2. 有一个 MovieHasGenre 表和一个流派表,其中 MovieHasGenre 有两个外键,一个指向 Movie 表中的电影,另一个指向流派表中的流派

我真的不确定这是标准化的还是只是涉及偏好。我们是否担心速度,因为删除 Genre 表似乎是少了一个连接。

4

2 回答 2

1

选择选项 2。

将每个流派存储一次并通过 MoveHasGenre 表引用它是很有用的。这样,如果您有一个流派的其他属性列,则不必在提到给定流派的每一行上冗余地存储这些属性。\

回复您的评论:

另一种情况是,如果您想更改流派的拼写,并将其应用于引用它的所有行,而不会忘记一些。

于 2013-08-29T00:16:22.893 回答
0

选项 2 是您将如何规范化数据。

选项 1 的问题是数据冗余。与使用几个字节的数据来存储和 INT 相反,您正在使用一个潜在的大值来存储流派的名称。像比尔所说的另一个问题是,您可能会出现数据不一致,因为如果类型发生变化,您将不得不更新多个字段,而不仅仅是一列。

但是,您在选项 1 中拥有的是选项 2 的非规范化版本,它比选项 2 具有性能优势,但我可以想象,鉴于该数据库看似很小,不会有显着的性能变化。

于 2013-08-29T01:06:39.860 回答