为了账号安全,请及时绑定邮箱和手机立即绑定

规范化:“重复组”是什么意思?

规范化:“重复组”是什么意思?

噜噜哒 2019-12-15 16:12:17
我阅读了不同的教程,并看到了不同的规范化示例,尤其是第一种标准形式的“重复组”的概念。从他们那里,我已经收集到重复的组是“种类”多值属性(例如here和here)。但是,我们已经通过在将ERM(实体关系模型)映射到RDM(关系数据模型)的过程中包括来自父表的外键来为每个多值属性制作了单独的表?参考:这里其次,是那些“重复组”本质上是水平排列在同一行中,还是相同的值可以一次又一次地出现在同一列中,即属性的一次又一次的相同值,还是重复组,应该删除?在此示例中,值English一次又一次地重复。这是重复组吗?如果我消除它以使另一个具有主题名称和Module_ID(外键)的表SUBJECT,这就是我所得到的。当然可以消除重复的值,但是我不确定这是否正确。这样对吗?
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

术语“重复组”最初是指基于CODASYL和COBOL的语言中的概念,其中单个字段可能包含重复值数组。当EFCodd描述他的第一范式时,这就是他所说的重复小组的意思。这个概念在任何现代的关系型或基于SQL的DBMS中都不存在。


数据库设计人员也非正式地和不精确地使用了“重复组”一词来表示一组重复的列,这意味着表中包含相似类型值的列的集合。这与1NF的原始含义不同。例如,在名为Families的表中,其列名为Parent1,Parent2,Child1,Child2,Child3,...等,有时将Child N列的集合称为重复组,并假定违反了1NF,甚至尽管从Codd的意图来说,它不是重复的小组。


如果每个属性都是单值的,则后一种所谓的重复组的含义在技术上并不违反1NF。属性本身不包含重复值,因此不会因此而违反1NF。但是,这种设计通常被认为是反模式,因为它将表限制为预定的固定数量的值(一个家庭中最多有N个子级),并且因为它强制对每个列重复进行查询和其他业务逻辑。换句话说,它违反了设计的“ DRY ”原则。因为它通常被认为是糟糕的设计,所以它适合数据库设计人员,有时甚至适合老师将这种重复的列称为“重复组”,并且违反了“第一范式”的精神。


术语的这种非正式用法有点不幸,因为它可能有点武断和混乱(何时一组列实际上构成重复?),还因为它分散了更基本的问题,即Null问题。所有范式都与不允许存在null的关系有关。如果表允许任何列为空,则它不满足满足1NF的关系模式的要求。对于我们的家庭表,如果“子级”列允许为空(代表少于N个孩子的家庭),则“家庭”表不满足1NF。在规范化练习中,通常会忘记或忽略空值的可能性,但是避免不必要的可空列是避免重复使用列集的一个很好的理由,



查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 379 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信