我打算做一个职位门户数据库。在这里,我有一些候选人订阅了一些通知。
(当然候选人姓名将是ID&候选人有更多与该人相关联的列,但未显示。) 我很困惑它是第4或第5正常形式的问题!我需要一些帮助来减少冗余。
我可以将此分割为类似这些表的内容而不会丢失IsEnabled信息,以便我可以删除冗余吗?
和
是否可能或者这是不可避免的冗余情况?
答案 0 :(得分:4)
从任何角度来看,这都不是正常的形式问题。
如果你想保留第一个表(包括布尔属性),那么你拥有的是 CONSTRAINT 。为了在第一个表中,必须为(候选,通知类型)的每个可能组合存在一行。但那不是NF问题!只有在某种情况下可以确定布尔值应该是什么,只给出候选者或仅给定通知类型,这只会是一个NF问题。
你错误地认为这种方法中的“冗余”正是这种约束的存在,以及它在你更新数据库时使你的生活变得困难的效果。
抛弃布尔属性并仅写入第一个表中具有“true”的那些行。现在你不再拥有那个约束了,而且只有一个常规的“联结”表将候选者链接到启用的通知类型,就像世界各地数据库中有数以万计的“联结”表一样。