创建第一个范式 (DBMS) 的示例表
如果表具有数据冗余并且未正确规范化,则将难以处理和更新。如果关系包含复合或多值属性,则违反第一范式。
如果存在以下条件,则表格为 1Nf -
只有单值属性。
属性域不会改变。
每个属性或列都有一个唯一的名称。
数据的存储顺序无关紧要。
示例
考虑下表 -
ID | 名称 | 课程 |
---|---|---|
1 | 一种 | C1,C2 |
2 | 乙 | C3 |
3 | 乙 | C2,C3 |
上表为非规范化形式,课程属性具有违反 1NF 的多值属性。
现在我们通过为每个课程创建一个新行来表示上表 -
ID | 名称 | 课程 |
---|---|---|
1 | 一种 | C1 |
1 | 一种 | C2 |
2 | 乙 | C3 |
3 | 乙 | C2 |
3 | 乙 | C4 |
由于课程原因,上表包含冗余数据,对于每个课程编号,我们必须重复学生的所有信息。所以课程属性应该与上表分开。
我们将上表 R 划分或分解为两个表,这是规范化的概念 -
R1(键,多值属性),R2(R-多值属性)
=>R1(Id, course), R2(Id, name)。
分解1NF表的步骤
将出现在重复组中的所有项目放入新表中。为每个生成的新表找到一个主键。在新表中复制从中提取重复组的表的主键,反之亦然。
R1
ID | 课程 |
---|---|
1 | C1 |
1 | C2 |
2 | C3 |
3 | C2 |
3 | C4 |
R2
ID | 名称 |
---|---|
1 | 一种 |
2 | 乙 |
3 | 乙 |
R1和R2在1NF中。
R1 的密钥 = ID
R2 的键 = (rollno, course)
上表现在处于 1NF 中,因为不存在多值属性。但它不在 2NF 中,因为 ID-> 名称是部分依赖 {因为名称取决于键的一部分}
异常
该表还存在以下异常 -
插入异常- 除非我们有学生必须参加该科目,否则我们不能在表中插入新课程,例如“C6”。
更新异常- 如果我们将课程从 C2 更改为 C5,我们必须在多个地方进行更改,否则表格将不一致。
以上是 创建第一个范式 (DBMS) 的示例表 的全部内容, 来源链接: utcz.com/z/338757.html