在过去有关关系数据库的论文中,我有以下问题。我完全陷入问题(四)。我认为我可能做错了(iii)部分,这导致了问题。
假设您有以下名为Songs的数据库表:
Songs(singerID, singerName, songID, songName, songLength, songGenre)
其中{
singerID
,songID
}是主键,并且存在以下功能依赖性:{singerID} -> {singerName}
{songID} -> {songName, songLength, songGenre}
{songName} -> {songGenre}
我上表是什么普通形式?
答:在1NF中。
ii说出为什么不在2NF中。
答案:
SingerID
不能确定songName
,songGenre
或songLength
iii重新设计
Songs
表,并使用2NF制成表。回答:
Singer{singerID, SingerName}
Song{SongID, songName, songLength, songGenre}
Songs{singerID, SongID}
现在,我认为所有非键属性在功能上都依赖于主键。
iv说出为什么您在(iii)部分中生成的表使用2NF而不是3NF。陈述您需要的任何假设。
对我来说,这是3NF。
最佳答案
您具有传递依赖项:songID > songName > songGenre
。这很棘手,因为我在现实世界中不会期望它。
对于3NF,您需要一个表{songName, songGenre}
并从songGenre
中删除song
。