创建一个满足第一范式 (DBMS) 的示例表格


如果一个表存在数据冗余且未正确规范化,则难以处理和更新。如果关系包含复合属性或多值属性,则违反第一范式。

如果满足以下条件,则表处于第一范式:

  • 只有单值属性。
  • 属性域不变。
  • 每个属性或列都有唯一的名称。
  • 数据存储的顺序无关紧要。

示例

考虑下表:

ID姓名课程
1AC1,C2
2EC3
3BC2,C3

上表是非规范化形式,课程属性具有多值属性,违反了第一范式。

现在我们通过为每门课程创建一个新行来表示上表:

ID姓名课程
1AC1
1AC2
2EC3
3BC2
3BC4

上表由于课程存在冗余数据,因为对于每个课程编号,我们都必须重复所有学生的信息。因此,课程属性应与上表分离。

我们将上表 R 分解成两个表,这是规范化的概念:

R1(键, 多值属性), R2(R-多值属性)

=>R1(Id, course), R2(Id , name).

分解第一范式表的步骤

将重复组中出现的所有项目放在新表中。为生成的每个新表找到主键。在新表中复制从中提取重复组的表的原表主键,反之亦然。

R1

ID课程
1C1
1C2
2C3
3C2
3C4

R2

ID姓名
1A
2E
3B

R1 和 R2 都满足第一范式。

R1 的键 = ID

R2 的键 = (学号, 课程)

上表现在满足第一范式,因为没有多值属性。但它不满足第二范式,因为 ID->name 是部分依赖关系 {因为姓名依赖于键的一部分}。

异常

该表还存在以下异常:

  • **插入异常** — 除非我们有学生需要学习该科目,否则我们无法将新的课程(例如“C6”)插入到表中。

  • **更新异常** — 如果我们将课程从 C2 更改为 C5,则必须在多个地方进行更改,否则表将不一致。

更新于:2021年7月6日

373 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告