我有一个具有属性类别的表。例如,我保存了具有属性类型的歌曲的表格
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范式的任何规则!
是吗?如果是,哪一个?谢谢, 麦克
答案 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与任何普通表单完全无关。