[英]Do you agree that this table is normalized in 3NF
我正在检查表的规范化,看看我来了什么:
描述并说明将本表中显示的数据标准化为第三范式(3NF)的过程:
BRANCH_NO(PK) BRANCH_ADDRESS TELL_NO MANAGER_ID MANAGER_NAME
B001 ADDRESS 1 TELL 1 S1500 TOM DANIELS
B002 ADDRESS 2 TELL 2 S0010 MARY MARTINEZ
B003 ADDRESS 3 TELL 3 S0145 ART PETERS
B004 ADDRESS 4 TELL 4 S2250 SALLY STEM
转换之后,它们最终得到这两个表,它们都声称它们都位于3NF中:
BRANCH_NO(PK) BRANCH_ADDRESS TELL_NO MANAGER_ID(FK)
B001 ADDRESS 1 TELL 1 S1500
B002 ADDRESS 2 TELL 2 S0010
B003 ADDRESS 3 TELL 3 S0145
B004 ADDRESS 4 TELL 4 S2250
和
MANAGER_ID(PK) MANAGER_NAME
S1500 TOM DANIELS
S0010 MARY MARTINEZ
S0145 ART PETERS
S2250 SALLY STEM
我认为很明显,第一个表不是3NF。 例如:tell_no依赖于branch_addres,它不是主键,但是主键在功能上标识与过渡功能依赖项冲突的branch_address。
规范化就是确保数据库模式准确地表示给定的一组依赖关系。 如果没有给您提供依赖关系,那么这种练习实际上就是基于一组属性名称和几行示例数据的猜测和假设。 因此,对于什么是对和什么是错,不可能有任何明确的答案。 更多的情况是了解正在做出哪些假设以及可能产生的后果。 写下您希望应用的依赖项,然后确保已针对这些依赖项对架构进行了规范化。
假设每个分支都必须具有唯一的分支编号和唯一的地址,因此我们要强制执行以下FD:
BRANCH_NO -> BRANCH_ADDRESS
BRANCH_ADDRESS -> BRANCH_NO
BRANCH_NO -> TEL_NO
BRANCH_NO -> MANAGER_ID -> MANAGER_NAME
假设BRANCH_NO和BRANCH_ADDRESS都将是候选键(假设您需要考虑所有键,而不仅仅是一个主键),则您的两表设计就这些依赖关系满足3NF。
现在,这确实假定对BRANCH_ADDRESS的隐含依赖关系是准确且重要的,以至于可以强制执行BRANCH_ADDRESS的唯一性。 可能会,也可能不是,但这就是为什么您需要确定此类问题才能回答问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.