数据库架构规范化违规

时间:2017-03-10 20:20:50

标签: sql database database-design

据我所知,以下内容并未违反1NF或2NF。是否违反了3NF,因为LocationID和LocationName没有被分成不同的表?

部门(DNum PK,DName,LocationID,LocationName)

2 个答案:

答案 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。