数据库设计三大范式

范式

什么是范式:就是对关系型数据库做出的规范要求,满足不同程度的规范要求就是不同的范式。

最常见的设计范式有三个:

第一范式(1NF)

在关系模型中,一范式的所有域都应该是原子性的,即每个属性都不能再分。

错误做法如下:

 对于”学生“一列有多项信息都合并在一起了,不具有原子性,也不属于第一范式。

修改后:

 

第二范式(2NF)

在一范式的基础上,每个非主属性完全函数依赖于任何一个候选码,即在一范式基础上消除非主属性对主码的部分依赖。

部分函数依赖:在关系模式R(U)中,如果X→Y,并且存在X的一个真子集X0,使得X0→Y,则称Y对X部分函数依赖。

完全函数依赖:在关系模式R(U)中,如果X→Y,并且存在X的一个真子集X0,使得X0不能决定Y,则称Y对X完全函数依赖。

  这里举例说明:

  设有关系模式U(A,B,C,D,E),存在函数依赖关系:F={ A→C, BC→D, CD→A, AB→E}。

      可以判断出非主属性为D、E,候选码为AB、BC;

      在题目中非主属性D存在BC→D,属于完全函数依赖;而E存在AB→E,也属于完全函数依赖;所以题目中的函数依赖关系满足二范式。

      那什么时候不满足二范式呢?  如题目中增添函数关系A→E,就出现了E对A的部分函数依赖,不符合二范式。

第三范式(3NF)

在第二范式的基础上,每个非主属性既不传递依赖于码,也不部分依赖于码。如果关系模式R属于3NF,则必有R属于2NF。

传递函数依赖:在关系模式R(U)中,如果X→Y,Y→Z,且 X 不包含 Y,Y 不确定 X,Y不包含Z,则称 Z 对X传递函数依赖。

  举例说明:

  如果有 A→C, C→D成立, 则A→D称D传递依赖与A。

也就是说第三范式确保表中的每一列数据表和主键直接相关,而不是间接相关。

posted @   风筝上的猫  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示