首先要理解,什么是函数依赖、完全函数依赖、部分函数依赖、传递函数依赖、码、候选码、主码、全码、主属性、非主属性。
- 码(Key):关系中的一个属性集合,其属性值可以唯一标识关系中的每个元组。
- 候选码(Candidate key):若一个码的任意一个真子集都不为码时,称其为候选码。
- 或者换一个定义:设K为R(U)中的属性或属性组,若K完全函数确定U,则K为R的候选码。
- 主码:人为选择的某一个候选码。
- 全码:关系中所有属性构成的码。
- 主属性 (Prime Attribute):出现在任意一个候选码中的属性。
- 非主属性:不出现在任何码中的属性。
码的值可以唯一确定一个元组,也即通过查询给出的值只能查询到一条信息。
所以只要表中不存在重复记录,码不会在关系中出现重复值。
接下来是正经的规范化定义:
- 1NF:每一个分量都是不可分的(最基本的规范化)。
- 2NF:若R∈1NF,且每个非主属性都完全函数依赖于R的码,那么R∈2NF。
- 3NF:若R∈2NF,且每个非主属性都不传递依赖于R的候选码,那么R∈3NF。
- BCNF:若R∈2NF,且每个属性都不传递依赖于R的候选码,那么R∈BCNF。
- BCNF:若R∈3NF,且R只有一个候选码,或者每个候选码都是单属性,则R∈BCNF。
接下来是我的瞎扯(真的是瞎扯,大家不要相信&#