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

我读过不同的教程,看到了正常化的不同例子,特别是第一种正常forms的“重复组”的概念。 从他们那里我已经知道,重复组是“多种”的多值属性(例如这里和这里 )。

但是,在将ERM(实体关系模型)映射到RDM(关系数据模型)的过程中,通过包含父表中的外键,我们已经为每个多值属性创build了单独的表? 参考: 这个

其次,这些“重复组”本质上是横向排列在同一行,还是同一个列中可能出现同一个值,即一次又一次的同一个属性值,也是一个重复组,应该消除?

在这里输入图像描述 在这个例子中,英语的价值是一再重复的。 这是一个重复的组? 如果我删除它使另一个表的主题名称和Module_ID(外键)SUBJECT,这就是我所得到的。 当然,它摆脱了重复的价值,但我不知道这是否是正确的。 这样对吗? 在这里输入图像描述

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

术语“重复组”也被数据库devise者非正式地和不精确地用来表示重复的一组列 ,意味着在表中包含相似types值的列的集合。 这与1NF的原始含义不同。 例如,在一个名为Parent的列中,名为Parent1,Parent2,Child1,Child2,Child3等的表的情况下,子N列的集合有时被称为重复组,并且假定甚至违反了1NF尽pipe这并不是 Codd意指的一个重复的群体。

如果每个属性都是单值的,那么所谓的重复组的后一种意义在技术上并不违反1NF。 属性本身不包含重复值,因此没有违反1NF的原因。 然而这样的devise通常被认为是反模式,因为它将表限制在预定的固定数量的值(家庭中最多N个孩子),并且因为它强制查询和其他业务逻辑针对每一列重复。 换句话说,这违反了“ 干 ”的devise原则。 因为它通常被认为是糟糕的devise,所以适合数据库devise师,有时候甚至老师都把这种重复的列作为一个“重复的群体”,违背了第一范式的精神。

这个术语的非正式用法是有些不幸的,因为它可能有点随心所欲,混淆(一组列实际上是否构成一个重复?),还因为它是一个更基本的问题,即空问题的分心。 所有的范式都涉及不允许有空值的关系。 如果一个表允许任何列中的空值,那么它不符合满足1NF的关系模式的要求。 对于我们的家庭表,如果子栏允许有空位(代表less于N个孩子的家庭),则家庭表不满足1NF。 在正常化练习中常常忘记或忽略空值的可能性,但避免不必要的可空列是避免重复列的一个很好的理由,无论你是否称之为“重复组”。

另见这篇文章 。

英语价值一再重复。 这是一个重复的组?

不是。在SUBJECT_MODULE中多次出现的英文不是重复的群体,或者是人们错误地重复指出的两件事情中的任何一个。 它们也不是冗余或缺乏正常化的证据。 这种多次出现可能连接到冗余或标准化,但是当没有冗余和不同级别的标准化时它们总是出现。

如果SUBJECT_MODULE是[[SUBJECT_NAME] [MODULE_NAME]由[MODULE_ID]标识的行),并且主题可能有多个模块,则在某处您必须多次提到该主题(可能通过其名称),并提及不同的模块也许按名称或ID)。 这不会涉及冗余。

Student Age Subject Adam 15 Biology Adam 15 Maths Alex 14 Maths Stuart 17 Maths 

从这个问题的第二个“ this ”链接中得到的冗余不是Adam出现在两行中,或者Adam出现在两行中的15。 如果表格是[[学生]年龄]并且需要[主题]的行,则学生(例如亚当)可以出现在多行中, 但总是以相同的年龄出现 (例如15)。 但是,如果表格是[学生]在[学科]中有[年龄]岁的朋友的行,那么表格就可以完全标准化了。

当然,它摆脱了重复的价值,但我不知道这是否是正确的。

它适用于您的示例数据,但可能不适用于其他示例数据。 你没有告诉我们足够的。 (无论如何,正如我上面所说,多次出场可能甚至不需要正常化。)

SUBJECT_MODULE中是否存在与规范化相关的冗余,甚至是否有任何有效的分解,包括您给出的分解,都取决于正常化到1NF以上所需的常规信息。 即它的某些列是否是其他函数(函数依赖),以及它的行是否也是“…”和“…”(join依赖关系)。

通过给出一个可能的分解,你已经说过这也是行“… [Subject_Name] … [Module_ID] …”和“… [Module_Name] … [Module_ID] …”你已经给出了一些分解数据的例子。 但是我们只知道它可以如此分解,因为你添加了分解。 分解加数据还不足以让我们知道它是否应该如此分解。

我读过不同的教程,看到了正常化的不同例子,特别是第一范式的“重复组”的概念。

“重复组”是关系数据库之前的事情,不可能出现在关系表(关系)中。 它们就像一个有名的价值观,就像一个logging的领域,但不是很完美。 关系表总是在1NF中。 一行的每一列都有一个列的types值。 一个非关系数据库被“标准化”到表格中,即1NF(第一种“标准化”),其摆脱了重复的组。 然后,这些表/关系被“标准化”到更高的标准forms(第二种“标准化”)。

具有多个相似列或者具有多个相似部分的列types的关系表每个都只是让人想起在非关系数据库中具有重复组。 多个列和部分应该成为一个单独的表中的多个行,就像重复组的多个成员一样。 但是这些问题与devise的关系质量有关 ,不是重复组或规范化(无论是任何意义上的)还是关系性的(即在1NF中)。

请注意,非关系数据库本身可能具有与多个相似字段和/或命名集合相似的问题,或者具有多个相似的字段值部分。 对表进行规范化时,摆脱重复组时不会摆脱这些问题。

不pipe他们如何进入关系devise,去除他们给了一个“更好”的devise。 这只是因为这些devise问题让人联想到重复的组,人们会感到困惑,并想象某个表可能包含一个重复的组。 所以多个相似的列和值与多个相似的部分(或部分)被错误地称为“重复组”。

看到这个答案重新“primefaces性” 。