【发布时间】:2017-03-11 18:12:01
【问题描述】:
据我所知,以下内容不违反 1NF 或 2NF。是否违反了 3NF,因为 LocationID 和 LocationName 没有分成不同的表?
部门(DNum PK、DName、LocationID、LocationName)
【问题讨论】:
标签: sql database database-design
据我所知,以下内容不违反 1NF 或 2NF。是否违反了 3NF,因为 LocationID 和 LocationName 没有分成不同的表?
部门(DNum PK、DName、LocationID、LocationName)
【问题讨论】:
标签: sql database database-design
您不能仅根据属性名称列表确定关系是否被规范化。真正重要的是应用于这些属性的依赖项。例如,给定以下一组依赖项
F: {DNum}->{LocationID}->{DNum,DName,LocationName}
我们可以说 Department 关于 F 满足 3NF(因此满足 2NF),因为 DNum 和 LocationID 都应该是 Department 的键,并且除了这些键所隐含的那些之外,没有其他功能依赖关系。就规范化而言,主键的选择是无关紧要的,因为一个关系可能有多个键,并且所有键都同等重要。
或者,给定以下一组依赖项
G: {DNum}->{DName,LocationID,LocationName}, {LocationID}->{LocationName}
Department 关系违反了关于 G 的 3NF,因为 LocationID 是非关键决定因素。
【讨论】:
是的,违反了 3NF。
3NF 需要 2NF 并且没有非关键字段应该依赖于另一个非关键字段。
LocationName 取决于 LocationID,因为(我假设)LocationID 是一个 PK,这就是违规。
我之前在这个another answer中解释了1NF、2NF和3NF。
【讨论】: