我在过去的关于关系数据库的论文中提出了以下问题。我完全陷入问题(iv)。我想我可能已经做了第(iii)部分错误,这导致了这个问题。
假设您有以下名为Songs的数据库表:
Songs(singerID, singerName, songID, songName, songLength, songGenre)
其中{
singerID
,songID
}是主键,并且存在以下功能依赖项:{singerID} -> {singerName} {songID} -> {songName, songLength, songGenre} {songName} -> {songGenre}
i上面的表格是什么样的正常形式?
答案:它是在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。
答案 0 :(得分:0)
您有传递依赖:songID > songName > songGenre
。这很棘手,因为我不会在现实世界中期待它。
对于3NF,您需要一个表{songName, songGenre}
并从songGenre
删除song
。
答案 1 :(得分:0)
您有什么参考?如果你没有遵循参考程序,你怎么能被卡住?什么定义&您使用的算法是2NF& 3NF?
i上面的表格是什么样的正常形式?
答案:它是在1NF。
问题(i)没有意义。据推测,他们的意思是,这张桌子的最高NF(正常形式)是多少。(在列表1NF,2NF,3NF,....)
你对(i)的回答没有意义; 2NF中的每个表也是1NF。你的意思是它在1NF而不是2NF,或者它的最高NF是1NF。
ii说明为什么它不在2NF。
答案:
SingerID
无法确定songName
,songGenre
或songLength
你对(ii)的回答没有意义;它对2NF或更高的定义或算法没有吸引力。
iii重新设计
Songs
表并从中创建一个2NF的表。答案:
Singer{singerID, SingerName} Song{SongID, songName, songLength, songGenre} Songs{singerID, SongID}
问题(iii)没有意义;规范化替换其他表的表。也许他们的意思是"分解它,直到你有一个2NF"的组件。但下面我解释为什么他们可能意味着"从2NF"中做出设计。
也许您将问题解释为"将其分解,直到您有一个2NF"的组件,同意上面的第一个可能的意图。或者误解为"从中制作一堆表2NF"或者,给出相同的含义,误解"表" as" design",同意上面的第二个可能的意图。如果是第一个,你不会说你的哪个部分是答案,或者说所有部分都是答案。你的是对所有2NF表的分解。
iv说出你在第(iii)部分制作的表格为2NF而不是3NF的原因。陈述您需要的任何假设。
对我而言,这是3NF。
现在我认为所有非关键属性在功能上都依赖于主键。
2NF的两个常见定义的措辞是没有任何特定类型的FD,据说是违反"违反"。人们可以总是以某种方式无损地分解,从而产生较小的组件,其中FD不再是可以合理地模糊地称为“将FD移动到其自己的组件,而留下另一个组件”的问题。如果你继续这样做,那么你最终将拥有所有2NF组件 - 一个2NF 设计。 (这不是优秀设计的一部分,即使是2NF。)但如果你"保持"一路上不同的一个你做的"制造"一个不同的表是" left"。所以没有特定的表,除非你被告知一些不寻常的方式以某种有序的方式分解。此外,我们总是可以直接分解为3NF,但问题(iv)希望你不这样做。
也许问题(iv)期待"""表 - 假设某个定义,某种分解,以及某种分解顺序。更有可能的问题(iv)意味着"从中做出设计,这是在2NF" - 假设某个定义和某种类型分解。
据推测,您通过"移动"生成了所有2NF表。每个以上的FD。 (Non-trivial FDs with a nonprime attribute dependent on a proper subset of a CK)。但你的回答
你对2NF对3NF的回答没有意义,你声称桌子在3NF并且你应该说出为什么但你没有。 (Song不在3NF中的原因是它的FD {songID} -> {songGenre}
是非主要属性通过songName
对CK的传递依赖,或者它的FD {songName} -> {songGenre}
是非的依赖性 - 非超级密钥上的非素数属性。
(请找出问题所针对的问题,找到定义和程序/算法的参考,然后按照它进行操作。然后再问一个新问题。)