数据库三大范式
来源:互联网 发布:知乎施工排水 编辑:程序博客网 时间:2024/04/28 18:29
- 第一范式
- 第二范式
- 第三范式
第一范式
1NF,强调数据中列的原子性,即列中的值不能再分割为其他列。
例如:
现在有一个用户User表,表中字段分别包括,用户名,联系方式,性别等信息。
从表中可以看出,小明的数据中联系方式有两种,包括手机和固话,而小红的联系方式中只有手机。所以这样的表结构是不符合1NF的。下面我们将表结构进行进一步拆分:
我们将表中的联系方式字段拆成了手机和固话两个字段,现在这张表中的字段都是不可再分割的了。所以,满足了第一范式。
第二范式
2NF,首先必须满足1NF规范。另外其有两个特点:一是表必须有一个主键(可以是多个字段组成的联合主键);二是非主键列必须完全依赖于主键整体,而不能只依赖主键的一部分。例如:
现在有一张订单详情OrderDetail表,订单表示是用户下单寄件的行为产生的一个订单,但是用户可能一次性寄出很多个不同地址的货物,每个收件地址会产生一个运单号。所以一张订单详情表中由订单ID和运单ID为联合主键,还包括了收件人姓名,收件人地址,收件人联系方式,寄件人电话,寄件人下单时间,寄件人下单,运费相关方式等等。
从上表可以看出,其实收件人姓名,地址,联系方式等列只与waybillID相关,不同的运单,才会有相关的收件人信息。而用户下单相关的信息也只有订单内容相关,与运单内容无关。所以这样的表设计是不符合2NF规范的。下面我们来进行拆分。
OrderDetail表
waybill表
我们将orderDetail表中的内容进行了拆分,将与运单相关的信息,分到了waybill表中,这样在订单表中只保留了与订单表相关的信息。这样,便满足了第二范式。
第三范式
同样首先必须满足2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。传递依赖的意思是,例如非主键A列依赖于非主键B列,非主键B列依赖于主键的情况。
例如:
用户下单寄件时,通过我们的官网进行下单,用户已经是我们的会员,所以我们会保存用户的一些相关信息,会员下单会有一些优惠等等。所以我们的订单表里面有下面这些信息:订单ID,订单下单时间,订单来源,会员ID,会员名称,会员联系方式等。
从上表可以看出会员的相关具体信息是依赖于会员ID存在的,会员ID又依赖于订单ID,所以这张表的设计师不符合3NF的,现在我们来对表进行改造,让它符合第三范式。
order表
customer表
我们将Order表中关于会员的信息拆分出来,做为会员customer表,这样将与订单无关的信息抽出来,就符合了第三范式。
0 0
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- 数据库三大范式
- “玲珑杯”ACM比赛 Round #9 题解 (待续)
- jQuery插件开发中$.extend和$.fn.extend辨析
- 安装新旧版本的arm-linux-gcc交叉工具链(基于JZ2440)
- [递归]CODEVS-3145 汉诺塔游戏
- linux 一些命令
- 数据库三大范式
- **POJ 1008 Maya Calendar解题报告
- 关于Android图表开源库HelloChart的坐标属性设置
- 字符串通配符(OJ)
- TF(tensorflow)安装之python
- spring文件上传
- Ubuntu编译不全缺少服务器文件原因
- Java最不容易明白的知识点【接口】
- Oracle数据笔记-【3】同义词序列视图索引