0

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

表格预览

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

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

候选表

通知表

是否有可能,或者这是不可避免的冗余情况?

4

1 回答 1

4

从任何角度来看,这都不是正常形式的问题。

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

在这种方法中,您错误地认为是“冗余”,正是这种约束的存在,以及它在更新数据库时使您的生活变得困难的影响。

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

于 2012-02-17T14:28:52.730 回答