数据库设计的三大范式

简介

为了建立冗余较小,结构合理的数据库,设计数据库时必须遵守一定的规则,在关系型数据库中这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系型数据库中的关系必须满足一定的要求,即满足不同的范式。

目前关系型数据库共有六种范式,一般来说数据库只要满足第三范式就可以了,而我们常用的就是我们所说的三大范式,第一范式,第二范式和第三范式。

第一范式

原子性、不可拆分性

什么意思呢?
就是要求你表中的每个字段都是不可继续拆分的,都是最小的数据单元。

如有以下学生信息表

学生信息表

学号姓名家庭地址学院编号学院名称宿舍号宿舍类型宿舍床位数
001张三陕西省西安市100001理学院222标准间4
002李四陕西省咸阳市100002计算机学院333非标准间6
003王五陕西省宝鸡市100003马克思主义学院666标准间4

其中的地址列可以继续拆分为省、市 所以此表不符合第一范式

第二范式

第二范式 要求在保证第一范式的前提下,要求每一列都要和主键相关,而不能只于主键的一部分有关,要求实体的唯一性。

例如下表:

学号姓名学院编号学院名称宿舍号宿舍类型宿舍床位数
001张三100001理学院222标准间4
002李四100002计算机学院333非标准间6
003王五100003马克思主义学院666标准间4

主键为学号和学院编号和宿舍号
姓名、–>学号
学院名称—>学院编号
宿舍类型、宿舍床位数—>宿舍号

以上只是部分依赖 所以违反了第二范式 所以应该将表进行拆分

学号姓名学院编号宿舍号
001张三100001222
002李四100002333
003王五100003666
学院编号学院名称
100001理学院
100002计算机学院
100003马克思主义学院
宿舍号宿舍类型宿舍床位数
222标准间4
333非标准间6
666标准间4

第一张表的主键为学号,第二张表的主键为学院编号,第三章表的主键为宿舍号

这样设计使得数据库更加清晰,如需要查找学院的名称,直接在学院表查询

第三范式

第三范式要求每列都和主键列直接相关而不是间接相关,即限制列的冗余性

宿舍号宿舍类型宿舍床位数
222标准间4
333非标准间6
666标准间4

比如上表。宿舍号—>宿舍类型—>宿舍床位数
从这些依赖中我们可以由宿舍号—>宿舍床位数
由宿舍号—>宿舍床位数称之为传递依赖

所以应该将表再次细分

宿舍号宿舍类型
222标准间
333非标准间
666标准间
宿舍类型宿舍床位数
标准间4
非标准间6
标准间4

这样就不存在间接依赖。

注意:主键与外键在多表中的重复出现不属于数据冗余,非键字段的重复出现才是数据冗余。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vivien_o.O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值