【问题标题】:Normalising DataBase with MultiValued Dependency (4NF/5NF)使用多值依赖(4NF/5NF)规范化数据库
【发布时间】:2012-03-08 14:23:34
【问题描述】:

我打算做一个工作门户数据库。在这里,我有一些候选人订阅了一些通知。

(当然候选人姓名将是 ID 并且候选人有更多与此人相关联的列,这些列未显示。) 我很困惑它是第四范式还是第五范式问题!我需要一些帮助来减少冗余。

我可以在不丢失 IsEnabled 信息的情况下将其拆分为类似这些表的内容,以便我可以删除冗余吗?

这可能还是不可避免的冗余?

【问题讨论】:

    标签: sql-server database-design normalization redundancy database-normalization


    【解决方案1】:

    从任何角度来看,这都不是范式问题。

    如果您想保持第一个表不变(包括布尔属性),那么您拥有的是一个CONSTRAINT。大意是在第一个表中,每个可能的组合(候选人、通知类型)都必须存在一行。但这不是 NF 问题!只有在仅给定候选或仅给定通知类型的情况下,才能以某种方式确定布尔值应该是什么,这将是一个 NF 问题。

    在这种方法中,您错误地认为是“冗余”,正是这种约束的存在,以及它在更新数据库时给您带来麻烦的影响。

    抛弃布尔属性,只写第一个表中具有“真”的行。现在您不再有这种限制,只有一个常规的“联结”表将候选者链接到启用的通知类型,就像世界各地的数据库中有无数的“联结”表一样。

    【讨论】:

    • @BeediKumaraN:是的,您的设计的问题是,如果表中不存在('Sasi','Profile View')TrueFalse 都不存在的任何行,我们应该假设什么?
    • @Erwin Smout:谢谢,这肯定会通过使用联结表来解决。
    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多