本文共 1335 字,大约阅读时间需要 4 分钟。
第一范式(1NF):关系模式 R 的每一个分量是不可再分的数据项,则关系模式 R 属于第一范式。
第二范式(2NF):若关系范式 R ∈ 1 N F R\in1NF R∈1NF ,并且每一个非主属性完全依赖于码,则关系模式 R ∈ 2 N F R\in2NF R∈2NF。
换而言之,只要通过分解 1NF 将其中的非主属性对码的部分函数依赖消除,那么分解后得到的关系模式称为 2NF 。第三范式(3NF):若关系范式 R(U,F)中不存在这样的码 X ,属性组 Y 和非主属性 Z( Z ⊈ Y Z \nsubseteq Y Z⊈Y)使得 X → Y ( Y ↛ X ) X \rightarrow Y \ \ (Y \nrightarrow X) X→Y (Y↛X) , Y → Z Y \rightarrow Z Y→Z 成立,则关系模式 R ∈ 3 N F R \in 3NF R∈3NF。换言之,当消除了 2NF 中非主属性对码的传递函数依赖,得到的关系模式则称为 3NF 。
普通的关系模式通常因为存在部分依赖和传递依赖,而产生数据冗余和异常,所以需要将关系模式分解为性能较好的 3NF ,该模式不存在非主属性对码的部分函数依赖和传递函数依赖,所以性能较好。这种将普通的关系模式变换为 3NF 或更高级别范式的过程,称为 “关系模式的规范化处理”
例如,存在关系模式学生信息 StudentInfo 和函数依赖集合 F
StudentInfo(学号,姓名,地址,生源地,号码,所修课程编号,所修课程名称,所修课程学分)
F = {学号->姓名,学号->地址,地址->生源地,学号->号码,所修课程编号->所修课程名称,(学号,所修课程编号)->所修课程学分}
上面所示的关系模式是一个常见的 1NF ,每一个分量都无法再次分割。但是,如果直接使用该范式存储数据,那么将会有大量数据冗余,如果对学生号码进行修改,那么将需要对所有记录进行修改。
可以将 1NF 分解为 2NF ,即消除非主属性对码的部分函数依赖,这里的示例中,码为(学号,所修课程编号),那么将 StudentInfo 关系模式分解如下:
StudentInfo_1(学号,姓名,地址,生源地,号码)
StudentInfo_2(所修课程编号,所修课程名称)
StudentInfo_3(学号,所修课程编号,所修课程学分)
分解后的三个范式中的非主属性对其码都是完全函数依赖,但是,在 StudentInfo_1 中,仍然存在数据的冗余,因为非主属性生源地
传递函数依赖于码学号
,继续分解,消除该传递函数依赖。
StudentInfo_11(学号,姓名,地址,号码)
StudentInfo_12(地址,生源地)
由此,得到如下几个范式:
StudentInfo_11(学号,姓名,地址,号码)
StudentInfo_12(地址,生源地)
StudentInfo_2(所修课程编号,所修课程名称)
StudentInfo_3(学号,所修课程编号,所修课程学分)
这些范式都不存在部分函数依赖和传递函数依赖,所以都是第三范式。根据该范式进行数据的存储,能够使更好的避免数据的冗余及出错。
转载地址:http://tpdws.baihongyu.com/