范式

  • 第一范式(1NF)

符合1NF的关系中的每个属性不可再分。以下就不符合


仅仅符合1NF的设计,会存在数据冗余,插入异常,删除异常,修改异常的问题

例如

  • 每一个学生的学号、姓名、系名、系主任这些数据重复多次——数据冗余过大
  • 假如学校新建了一个系,诞生暂时还有新生 ,那么系名和系主任将无法插入——插入异常
  • 假如某个系中所有学生相关记录都删除,那么所有系与系主任也就随之消失了。——删除异常
  • 假如小明转系到法律系,那么为了保证数据库的一致性,需要修改三条记录中系与系主任的数据——修改异常
  • 第二范式

2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。

  • 函数依赖
    若在一张表中,在属性x的值确定的情况下,必定能确定属性Y的值,则可以说函数Y依赖于函数X,写作X→Y
    比如学号→姓名,而姓名有重复不能百分百确定学号是什么所以不能姓名→学号。
  • 完全函数依赖
    对于X的任何一个真子集,X(真子集)→Y不成立,那么我们称Y对于X完全函数依赖。记作XF→Y
  • 部门函数依赖
    假如Y函数依赖于X,但同时Y并不完全函数依赖于X,那么我们就称Y部分函数依赖于X,记作XP→Y
  • 传递函数依赖
    假如Z函数依赖于Y,且Y函数依赖于X(Y不包含于X,且X不函数依赖于Y),那么我们就称Z传递函数依赖于X,XT→Z.

  • 若属性或属性组K之外的所有属性都完全函数依赖于K,那么我们称K为候选码,简称码,在实际中可以理解为:假如当K确定的情况下,该表除K之外的所有属性的值也就随之确定,那么K就是码。
  • 主属性和非主属性
    包含在任何一个码中的属性是主属性,其他的是非主属性。
  • 判断2NF
    就是看表中是否存在非主属性对于码的部分函数依赖。
    判断方法是
    • 找出数据表的码
    • 根据第一步的码,找出主属性和非主属性
    • 看是否存在部门函数依赖
      在(学号、课名)→姓名中,因为课名→姓名是部门函数依赖,所以不符合。
  • 要达到2NF就可能需要拆分表。拆到符合第二范式。

然而删除异常和插入异常仍没有改进

  • 第三范式3NF

在前两个范式的基础之上,消除了非主属性对吗的传递函数依赖。
方法仍然是拆分拆分拆分到符合范式。

  • BCNF范式

解决办法就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容