繁体   English   中英

您是否同意该表格已在3NF中标准化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM