在过去有关关系数据库的论文中,我有以下问题。我完全陷入问题(四)。我认为我可能做错了(iii)部分,这导致了问题。


  假设您有以下名为Songs的数据库表:

Songs(singerID, singerName, songID, songName, songLength, songGenre)

  
  其中{singerIDsongID}是主键,并且存在以下功能依赖性:

{singerID} -> {singerName}
{songID}   -> {songName, songLength, songGenre}
{songName} -> {songGenre}

  
  我上表是什么普通形式?


答:在1NF中。


  ii说出为什么不在2NF中。


答案:SingerID不能确定songNamesongGenresongLength


  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

07-26 06:21