博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL基础:数据库规范化与三范式
阅读量:7159 次
发布时间:2019-06-29

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

数据库规范化与范式

  冗余导致多种更新异常,也就是插入、更新和删除行的操作困难。

  规范化(normalization)是通过修改表以减少冗余和矛盾的一系列步骤。

  在每一步之后,数据库都达到一个特定的范式(normal form)

 

  关系模型定义了三种范式,以著名的序数命名。

  第一范式(1NF)

  第二范式(2NF)

  第三范式(3NF)

  每一种范式都比前一种更健壮。符合3NF的数据库也符合2NF和1NF。规范化水平越高,表的数量也越多。

 

  无损分解(lossless decomposition能确保表的分割不会引起信息丢失。

  依赖-保持分解(dependency-preserving decomposition能确保联系不丢失。

  当表被分割的时候,存在匹配的主键和外键列不应被认为是多余的数据。

  规范化不是系统化,它是一个涉及重复表的分割、重新联结和精炼的迭代过程。

 

第一范式(1NF)

  满足第一范式的表:

  列仅包含原子值。

  没有重复的组。

  原子值(也称为标量值)是不能再细分的单一值。

  重复的组是两个或多个逻辑相关联的列的集合。

 

第二范式(2NF)

  当满足下列条件时,第一范式的表自动满足第二范式:

  主键是一个列(也就是说,关键字不是组合的)。

  表中所有的列是主键的一部分(单一的或组合的)。

  满足第二范式的表:

  满足第一范式。

  非部分函数依赖。

  如果表中的一些组合键(但不是全部)值确定了一个非键列的值,则表包含部分函数依赖

  第二范式表是完全函数依赖,意味着如果组合键中任何一列值改变,将导致非键列的值需要被更新。

 

第三范式(3NF)

  满足第三范式的表:

  满足第二范式。

  没有传递依赖。

  如果一个非键列的值确定了另一个另一个非键列的值,则表包含传递依赖

  在第三范式的表中,非键列相互独立并且只依赖于主键列。

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

你可能感兴趣的文章
Could not parse mapping document from input stream
查看>>
Android网络通信框架Volley总结
查看>>
Java中使用Jedis操作Redis
查看>>
《Maven实战》第6章 仓库
查看>>
成为程序员前需要做的10件事
查看>>
【原】Oracle监听
查看>>
挖坑一个个
查看>>
How to change I/O scheduler in Linux
查看>>
orcale 之函数
查看>>
343. Integer Break (分割整数的最大乘积)
查看>>
[core java学习笔记][第五章继承]
查看>>
通过FactoryBean配置Bean
查看>>
C# - 设计模式 - 虚模式
查看>>
HTML5 Canvas游戏开发(四)lufylegend开源库件(下)
查看>>
26.ddt
查看>>
2016蓝桥杯 生日蜡烛 (+代码)
查看>>
Turing equation
查看>>
python基础之进程线程
查看>>
2.运算符
查看>>
Ambari Server 配置修改流程
查看>>