数据库三范式

第一范式(列不可分)

第一范式(确保每列保持原子性)

第一范式是最基本的范式。如果数据库表中的所有字段都是不可分界的原子值,就说明数据库表满足了第一范式。

例子:比如数据库系统需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式。

总结:是对关系模型的基本要求,不满足第一范式的数据库就不是关系数据库。第一范式就是无重复的列。

第二范式(实体完全依赖主键)

第二范式:确保表中的每列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
第二范式要求实体的属性完全依赖于主关键字。所谓完全依赖的是指不能存在仅依赖主关键字一部分的属性。
例如:
在这里插入图片描述
在这里插入图片描述

此时分解的新实体与旧实体是一对多的关系。

总结:第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须被唯一的区分。要求存储的实体完全依赖于主关键字。
不能不分依赖。

第三范式

第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。 那么员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。

在这里插入图片描述
在这里插入图片描述
总结:第三范式满足第二范式。
第三范式,要求表中的不能够存在传递依赖。数据库表中属性,必须完全依赖主键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值