据我所知,以下内容并未违反1NF或2NF。是否违反了3NF,因为LocationID和LocationName没有被分成不同的表?
部门(DNum PK,DName,LocationID,LocationName)
答案 0 :(得分:2)
您无法仅根据属性名称列表确定关系是否已规范化。真正重要的是适用于这些属性的依赖项。例如,给定以下依赖集
F: {DNum}->{LocationID}->{DNum,DName,LocationName}
我们可以说Department相对于F满足3NF(因此也就是2NF),因为DNum和LocationID都应该是Department的键,并且除了这些键隐含的功能之外没有功能依赖。就标准化而言,主键的选择是无关紧要的,因为关系可能有多个键,所有键都同等重要。
或者,给定以下依赖集
G: {DNum}->{DName,LocationID,LocationName}, {LocationID}->{LocationName}
部门关系违反了3NF,因为LocationID是一个非关键决定因素。
答案 1 :(得分:1)
是的,违反了3NF。
3NF需要 2NF,并且非关键字段不应该依赖于另一个非关键字段。
LocationName依赖于LocationID(假设我是这样),LocationID是一个PK并且是违规行为。
我之前在another answer中解释了1NF,2NF和3NF。