博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关系模式
阅读量:4295 次
发布时间:2019-05-27

本文共 1335 字,大约阅读时间需要 4 分钟。

关系模式

第一范式(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(学号,所修课程编号,所修课程学分)

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

转载地址:http://tpdws.baihongyu.com/

你可能感兴趣的文章
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day05
查看>>
学习笔记_vnpy实战培训day06
查看>>
聚合搜索引擎
查看>>
Python super钻石继承
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
股票网格交易策略
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
ubuntu终端一次多条命令方法和区别
查看>>
python之偏函数
查看>>
vnpy学习_06回测结果可视化改进
查看>>
读书笔记_量化交易如何建立自己的算法交易01
查看>>
设计模式03_工厂
查看>>
设计模式04_抽象工厂
查看>>