数据库的规范化

一、基础概念

实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等。

属性:教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。

元组:表中的一行就是一个元组。

分量:元组的某个属性值。

码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。

全码:如果一个码包含了所有的属性,这个码就是全码。

主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。

非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。

外码:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码。

二、函数依赖

1、函数依赖 设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的X属性值相同时,则它们的Y属性值也相同,则称X函数决定Y,或Y函数依赖于X记作X→Y。 2、平凡函数依赖 当关系中属性集合Y是属性集合X的子集时,存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。 3、非平凡函数依赖 当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。 4、完全函数依赖 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。 5、部分函数依赖 设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。 6、传递函数依赖 设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

三、5大范式及其特点

1NF:原子性 字段不可再分,否则就不是关系数据库(所以在正常的关系数据库中是不可能创建出不符合1NF的表的);

2NF:唯一性 一个表只说明一个事物,1NF消除非主属性对码的部分函数依赖之后就是2NF;

3NF:每列都与主键有直接关系,2NF消除非主属性对码的传递函数依赖之后就是3NF;  

BCNF:3NF消除主属性对码的部分函数依赖和传递函数依赖之后就是BCNF(换句话说就是BCNF范式既检查非主属性,又检查主属性,而3NF只检查非主属性);

4NF:限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖(只考虑函数依赖的话,最高到BCNF,如果考虑到多值依赖最高到4NF)。

关于4NF还是没搞清楚。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 函数依赖集闭包、属性集闭包、超键、候选键和最小函数依赖集的求法。

    函数依赖集的闭包 F:FD的集合称为函数依赖集。 F闭包:由F中的所有FD可以推导出所有FD的集合,记为F+。 例1,对于关系模式R(ABC),F={A→B,B...

    用户1215536
  • C++ 之虚函数的实现原理

    c++的多态使用虚函数实现,通过“晚绑定”,使程序在运行的时候,根据对象的类型去执行对应的虚函数。

    用户1215536
  • 目录1.智能指针的作用2.智能指针的使用3.智能指针的设计和实现

    C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,...

    用户1215536
  • 数据库闭包和候选码求解方法

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

    大黄大黄大黄
  • 【Vue原理】Compile - 源码版 之 属性解析

    哈哈哈,今天终于到了属性解析的部分了,之前已经讲过了 parse 流程,标签解析,最后就只剩下 属性解析了 (´・ᴗ・`)

    神仙朱
  • PIL库的运用

    python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力。 下面是我的学习笔记

    py3study
  • 如何在JavaEE项目中设置忽略错误的详解(显示红叉的解决方案)

    时间静止不是简史
  • Python列表操作最全面总结

    insert(index, object) 在指定位置index前插入元素object

    吾非同
  • 随机打乱一个数组的顺序 博客分类: 算法 算法ExchangeGo

     不过由于随机数产生器产生的随机数不太随机,所以排序的结果页有很多相似的地方。换一个好的随机数产生器,会达到更好的效果,就能用于洗牌了,呵呵。

    chroya
  • iOS开发工具和框架索引

    用户7257200

扫码关注云+社区

领取腾讯云代金券