设计是第3种正常形式吗?

时间:2011-05-12 21:42:38

标签: database-design normalization third-normal-form

我有一个具有属性类别的表。例如,我保存了具有属性类型的歌曲的表格

Songs(
ID (INT), 
Name (STRING), 
Genre: (STRING)
)

表格是第3种正常形式吗?

我的意思是我知道最好将Genre保存在另一个表中并且表之间有关系,如:

Songs(
ID (INT), 
Name (STRING), 
Genre_ID: (INT)
)

Genre(
ID (INT),
Name (String)
)

其中Songs.Genre_ID = Genre.ID

但是我无法确定第一个案例(有一张表)是否违反了第3范式的任何规则!

是吗?如果是,哪一个?

谢谢, 麦克

2 个答案:

答案 0 :(得分:2)

在我之后重复。

“身份证号码与规范化无关。身份证号码与规范化无关。身份证号码与规范化无关。”

如果您的目标是为每首歌曲名称存储一种流派,那么此表

song_name           genre
--
Toxic               Pop
Itsy Bitsy Spider   Children's

其中song_name是主键,在5NF中。 (和4NF和3NF等)。

答案 1 :(得分:1)

钥匙是什么?表应该满足哪些依赖关系?这些是我们回答你的问题时需要知道的事情。

我的猜测是ID是唯一的密钥,ID是> {Name,Genre},并且没有其他非平凡的非密钥依赖项。如果这是正确的,则歌曲在3NF。更重要的是它在BCNF和5NF。

使用整数Genre_ID替换字符串属性Genre与任何普通表单完全无关。