Sol*_*ace 13 database database-design database-normalization
我已经阅读了不同的教程并看到了标准化的不同例子,特别是第一范式中"重复组"的概念.从他们那里我已经认识到,重复的群体是"有点"的多值属性(例如这里和这里).
但是,在将ERM(实体关系模型)映射到RDM(关系数据模型)的过程中,我们已经通过在父表中包含外键来为每个多值属性创建单独的表?参考:这个
其次,那些"重复组"基本上是在同一行中水平排列,还是可以在同一列中反复出现相同的值,即一次又一次地出现属性的相同值,也是一个重复的组,应该被消除?
在此示例中,英语值一次又一次地重复.这是一个重复的群体吗?如果我删除它以使用Subject Name和Module_ID(外键)创建另一个表SUBJECT,这就是我得到的.当然它摆脱了重复的价值,但我不确定这是否是正确的.这样对吗?

nvo*_*gel 29
术语"重复组"最初是指基于CODASYL和COBOL的语言中的概念,其中单个字段可以包含重复值的数组.当EFCodd描述他的第一范式是他重复组的意思.任何现代关系或基于SQL的DBMS中都不存在该概念.
术语"重复组"也被数据库设计者非正式地且不精确地用于表示重复的列集合,意味着表格中包含类似值的列的集合.这与其与1NF相关的原始含义不同.例如,在一个名为Families的表的情况下,列名为Parent1,Parent2,Child1,Child2,Child3,...等,Child N列的集合有时被称为重复组,并假设甚至违反了1NF虽然它不是 Codd意图的重复组.
如果每个属性仅是单值的话,后一种所谓的重复组的意义在技术上并不违反1NF.属性本身不包含重复值,因此没有违反1NF的原因.这种设计通常被认为是反模式,但是因为它将表限制为预定的固定数量的值(一个族中最多N个子节点),并且因为它强制对每个列重复查询和其他业务逻辑.换句话说,它违反了" DRY "设计原则.因为它通常被认为是糟糕的设计,它适合数据库设计者,有时甚至教师将这种重复的列称为"重复组"并违反第一范式的精神.
这种术语的非正式用法有点不幸,因为它可能有点武断和令人困惑(一组列实际上是什么时候构成重复?),也因为它分散了一个更基本的问题,即Null问题.所有正规形式都关注不允许出现空值的关系.如果表允许任何列中的null,则它不满足满足1NF的关系模式的要求.对于Families表,如果Child列允许空值(表示少于N个子节点的族),则Families表不满足1NF.在规范化练习中经常会忘记或忽略空值的可能性,但避免使用不必要的可空列是避免重复列集的一个非常好的理由,无论你是否将它们称为"重复组".
另见本文.