数据库 三范式 BCFN

摘要:
因此,我主要了解了三大范式:1。正规形式(1FN)将R设置为任何给定的关系,2。正规形式(2FN)将R设置为任何给定的关系,其所有非主属性完全依赖于候选关键字,即实体3的唯一性。范式(3FN)将R设置为任何给定的关系,并且其每个非主属性不传递依赖于候选关键字的函数。其次,BCNF是函数依赖性4范式的改进形式,在非主属性之间不存在。设R为任意给定关系。
三范式

范式

 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
注意: 巴斯-科德范式(BCNF)属于第三范式

我们平时能用到的也就到前三范式,所以我也主要针对前三范式做了了解

三大范式

  • 1范式(1FN)
    • 设 R 为任一给定关系,若果 R 中每个列与行的交点处的取值都是不可再分的基本 元素,则 R 为第一范式。即:一张表中的属性和属性值都不可再分,这样的表满足于1范式
    • 缺点:
      • 冗余高
      • 插入操作异常
      • 删除操作异常
  • 2范式(2FN)
    • 设 R 为任一给定关系,若 R 为 1NF, 且其所有非主属性都完全函数依赖于候选关键字,则 R 为第二范式。即:2NF是要求记录有惟一标识,即实体的惟一性
  • 3范式(3FN)
    • 设 R 为任一给定关系,若 R 为 2NF, 且其每一个非主属性都不传递函数依赖于候选关键字,则 R 为第三范式。即:首先要满足第二范式,其次非主属性之间不存在函数依赖
  • 4范式的改进形式BCNF
    • 设 R 为任一给定关系,X、Y 为其属性集,F 为其函数依赖集,若 R 为 3NF,且其 F 中所有函数依赖 X→Y(Y 不属于 X)中的 X 必包含候选关键字,则 R 为 BCNF。
    • 一个满足BCNF的关系模式的条件:
      • 所有非主属性对每一个码都是完全函数依赖。
      • 所有的主属性对每一个不包含它的码,也是完全函数依赖。
      • 没有任何属性完全函数依赖于非码的任何一组属性。
  • 范式的转换

    • 1范式转2范式

      • 找到候选关键字,看其余的属性是否完全函数依赖候选关键字, 是的,与候选关键字一同抄下来形成一个表格, 不是的,抄下来,形成第二个表格,并且将候选关键字里能够唯一决定表格 2 的属性组抄在第一列
    • 2范式转3范式
      * 找到表格中的传递函数依赖关系的三个属性组,设为 x,y,z 将这三个属性组拆成两个表格
      第一个表格为 x,y
      第二个表格为 y,z

    • 3NF->BCNF

      • 列出表格中的所有函数依赖关系
        每个关系拆出一个表格

免责声明:文章转载自《数据库 三范式 BCFN》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇网络编程之套接字(udp)App的基本结构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JMeter学习笔记--使用HTTP信息头管理器--转载

使用HTTP信息头管理,可以帮助测试人员设定JMeter发送的HTTP请求头所包含的信息。HTTP信息头中包含有”User-Agent"、“Pragma"、”Referer"等属性。尽可能放在线程组一级。除非因为某些原因,测试人员希望不同的HTTP请求使用不同的HTTP信息头。 Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cac...

CALayer 进阶

转载自:http://www.cofcool.net/development/2015/06/19/ios-study-note-eight-CALayer-info/ The CALayer class manages image-based content and allows you to perform animations on that con...

JS-DOM样式操作

js样式操作 行内式样式操作 //行内式属性的获取 let value = 元素对象.style.属性名; //得到的值为String类型,如果要做算术运算需要转型 //仅能得到行内式属性的值,对于嵌入式、外联式的值无法获取 //属性名需要注意如果在css中唯一个单词则是原单词,如果在css中为多个单词则遵守驼峰命名法...

动态sql语句 入参中存在 数组 或 List

mybatis中入参存在 数组或List 时,使用foreach 进行动态拼接 foreach可以在SQL语句中迭代一个集合。它的属性主要有item、index、collection、separator、close、open item:表示集合中每一个元素进行迭代时的别名 index:指定一个名称,用于表示在迭代过程中,每次迭代到的位置 open:表示该...

关联,依赖,泛化(又称继承分为扩展或包含),实现,聚合(共享),复合(组合)

从关联—依赖—泛化—实现—聚合—复合是一层比一层对两个类之间的关系描述紧密。  1.关联 一般是指两个类之间有相对松散关系,若双方都知道对方则可用实线[双向箭头]连接,或只其中一方知道则用实线加单向箭头从隐藏方指向暴露方,但某个类是否存在并不影响另一个类的存在与否.  如客户与车子(通过买,租用或其它方式联系在一起);  2.依赖(Dependency)...

XAML学习笔记——Layout(四)

SplitView   SplitView简介   在学习SplitView之前,我们需要明确它的重要性。SplitView在UWP中有很重要的地位,它是UWP响应式布局主要技术,更是作为非常多UWP项目的核心布局。现在绝大部分win10应用的主框架布局都为SplitView,先看一个在win10中常见的系统设置窗口:   截图中,主窗体被分为两部分,一部...