关系数据库和关系表的规范化

时间:2013-08-29 00:08:16

标签: sql relational-database normalization

我试图找出在这种情况下设置数据库的适当方法:

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

基本上我想知道的是,如果你有一个电影桌,电视桌......你应该:

  1. 有一个MovieHasGenre表,包含Movie表的外键和类型值的常规字段

  2. 有一个MovieHasGenre表和一个Genre表,其中MovieHasGenre有两个外键,一个指向Movie表中的Movie,另一个指向Genre表中的Genre

  3. 我真的不确定这是标准化还是仅涉及偏好。我们是否对速度感兴趣,因为它似乎删除了Genre表少了一个。

2 个答案:

答案 0 :(得分:1)

使用选项2。

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

重新评论:

另一种情况是,如果你想改变一个类型的拼写,并让它适用于引用它的所有行,你就不会忘记一些。

答案 1 :(得分:0)

选项2是规范化数据的方式。

选项1的问题是数据冗余。反对使用几个字节的数据来存储和INT,你使用一个可能很大的值来存储类型的名称。比尔说的另一个问题是你有可能存在数据不一致,因为如果类型改变而不是只有一列,你将不得不更新多个字段。

但是,您在选项1中所拥有的是选项2的非规范化版本,它具有优于选项2的性能优势但我认为,鉴于该数据库看似小的尺寸,将不会有显着的性能变化。