我试图找出在这种情况下设置数据库的适当方法:
我正在创建一个电影/电视数据库。电影可能有多种类型,电视节目可能有多种类型。
基本上我想知道的是,如果你有一个电影桌,电视桌......你应该:
有一个MovieHasGenre表,包含Movie表的外键和类型值的常规字段
或
有一个MovieHasGenre表和一个Genre表,其中MovieHasGenre有两个外键,一个指向Movie表中的Movie,另一个指向Genre表中的Genre
我真的不确定这是标准化还是仅涉及偏好。我们是否对速度感兴趣,因为它似乎删除了Genre表少了一个。
答案 0 :(得分:1)
使用选项2。
存储每个类型一次很有用,并通过MoveHasGenre表引用它。这样,如果您有一个类型的其他属性列,则不必在提到给定类型的每一行上冗余地存储这些属性。\
重新评论:
另一种情况是,如果你想改变一个类型的拼写,并让它适用于引用它的所有行,你就不会忘记一些。
答案 1 :(得分:0)
选项2是规范化数据的方式。
选项1的问题是数据冗余。反对使用几个字节的数据来存储和INT,你使用一个可能很大的值来存储类型的名称。比尔说的另一个问题是你有可能存在数据不一致,因为如果类型改变而不是只有一列,你将不得不更新多个字段。
但是,您在选项1中所拥有的是选项2的非规范化版本,它具有优于选项2的性能优势但我认为,鉴于该数据库看似小的尺寸,将不会有显着的性能变化。