第一范式(1NF)
如果该关系的所有 attributes
的域都是原子的,则给定数据库中的关系(或关系模式)在 first normal form
中。如果该域的所有元素都被视为不可分割的单元,则域是原子的。假设关系 employee
,属性 name
,那么关系不在 first normal form
中,因为 attribute name
的域元素可以分为 first name
和 last name
。
简而言之,如果一个关系具有复合属性 ,那么它不是第一个正常形式。假设我们有以下关系:
EMPID |
名字 | 姓 | 薪水 | 位置 |
---|---|---|---|---|
DEPTX-101 | 约翰 | 工匠 | 12000 | 中间 |
Depty-201 | Carolyne | 威廉姆斯 | 18900 | 经理 |
第一行的 EmpId
可以分为:Deptx
(用于识别部门)和 101
,是组织内分配的唯一编号。显然,属性 EmpId
的域不是原子的,因此我们的关系不在于 first normal form
。
Disadvantes 面临:
- 当使用这样的员工身份时,可以通过编写将
EmpId
的结构分解为Deptx
和101
的代码来找到员工的部门,这需要额外的编程。信息也在程序中而不是在数据库中编码。 - 假设某个特定员工必须更改部门,那么属性
EmpId
必须在使用它的任何地方进行更新。
通过将它分为以下两个关系,我们可以使我们的关系满足时间 18:
关系 1
EMPID |
名字 | 姓 | 部门 |
---|---|---|---|
101 |
约翰 | 工匠 | DEPTX |
201 |
Carolyne | 威廉姆斯 | Depty |
关系 2
EMPID |
薪水 | 位置 |
---|---|---|
101 |
12000 | 中间 |
201 |
18900 | 经理 |
现在,如果我们必须更改部门,我们必须在关系 1 中只执行一次,现在确定部门也更容易。