我正在检查表的规范化,看看我得到了什么:
描述并说明将此表中显示的数据规范化为第三个标准的过程
表格(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_addres不是主键,但主键在功能上标识了branch_地址,这与过渡功能依赖冲突。
最佳答案
规范化就是要确保数据库模式准确地表示给定的依赖项集。如果不给您提供依赖关系,那么这样的练习实际上是基于一组属性名和几行示例数据的猜测和假设。所以对于什么是对的,什么是错的,不可能有任何明确的答案。这更多的是理解正在做出什么样的假设以及可能产生的后果。写下您希望应用的依赖项,然后确保模式相对于这些依赖项是规范化的。
假设每个分支都需要有一个唯一的分支编号和一个唯一的地址,因此我们希望强制执行这些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的唯一性是有意义的。可能是这样,也可能不是这样,但这就是为什么你需要在回答问题之前确定这些事情。
关于database - 您是否同意该表格已在3NF中标准化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24109185/