关系模式

关系模式

第一范式(1NF):关系模式 R 的每一个分量是不可再分的数据项,则关系模式 R 属于第一范式。

第二范式(2NF):若关系范式 R ∈ 1 N F R\in1NF R1NF ,并且每一个非主属性完全依赖于码,则关系模式 R ∈ 2 N F R\in2NF R2NF
换而言之,只要通过分解 1NF 将其中的非主属性对码的部分函数依赖消除,那么分解后得到的关系模式称为 2NF 。

第三范式(3NF):若关系范式 R(U,F)中不存在这样的码 X ,属性组 Y 和非主属性 Z( Z ⊈ Y Z \nsubseteq Y ZY)使得 X → Y    ( Y ↛ X ) X \rightarrow Y \ \ (Y \nrightarrow X) XY  (YX) Y → Z Y \rightarrow Z YZ 成立,则关系模式 R ∈ 3 N F R \in 3NF R3NF。换言之,当消除了 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(学号,所修课程编号,所修课程学分)

这些范式都不存在部分函数依赖和传递函数依赖,所以都是第三范式。根据该范式进行数据的存储,能够使更好的避免数据的冗余及出错。

你可能感兴趣的:(计算机基础)