数据库的设计范式

数据库的设计范式

我们都知道在建立数据表中需要遵循一定的规则,在运用关系型数据库中的这种规则就称为范式,所以要建立合理的数据表就需要遵循这些规则。

首先先来说说数据库设计中存在哪些设计范式:最多使用的是3NF,除此之外还有针对多值依赖的第四范式,连接依赖的第五范式,DK范式和第六范式。

好了,废话不多说了,今天重点介绍下数据库设计中的三大范式:

第一范式

1NF 属性的原子性

举个例子:

ID 学号 姓名 地址 出生年月日 这个还可以 将 地址 和 出生年月日进行拆分 不符合第一范式

ID 学号 姓名 省份 市区 县区 年 月 日 字段不能再拆分 这就是符合第一范式

第一范式作为数据库中最基本的范式,要求数据表中所有的字段都是不可分割的基本数据项,也就是原子性的特征,比如上例中的地址可以再拆分为 省 市 县区。

第二范式

2NF 实体唯一性

同样也是来个例子:

学号 课程号 姓名 学分 这里边 学号 依赖于姓名 学分 依赖于 课程号

​ 问题:

​ 1.每行会存在相同信息

​ 2.删除 成绩容易把课程信息干掉

3.如果学生没选课程 数据库中就不存在该学生的姓名

​ 4.调整学分 所有的行都得更新

正确的做法 Student (学号 姓名)

Course(课程号 学分 )

​ 选课表(学号 课程号 成绩 )

第二范式首先遵循 第一范式 记录要有唯一的标识 实体唯一性 不存在部分依赖。也就是说一个数据库表中,一个表只能保存一种数据,不能将同一种数据保存在同一张表中

第三范式

3NF 不存在传递依赖

哈哈,还是以例子来说明吧:

学号 姓名 年龄 学院 学院电话

​ 学号 ->学生姓名 ->所在学院 ->学院电话

正确的做法 是

​ 学生 (学号 姓名 年龄 所在学院)

​ 学院 (学院名称 学院电话)

第三范式就是任何字段不能由其他字段派生出来 也就是说 不存在传递依赖

再举另外一个例子说明:

比如在设计一张订单数据表的时候,可以将商品的编号和订单的编号建立相应的关系,而不是将商品的信息和订单的信息放在同一张表中进行存储。

当然可以进行反范式的设计:为了提高查询 更新效率 可以适当增加冗余字段 以 空间 换时间

范式和非范式的区别:

  • 范式

    • 减少数据的冗余

    • 更新 快 表 体积小

    • 范式 比反范式 更新起来快

    缺点:

    ​ 查询 表关联

    ​ 索引优化 难度 大

  • 反范式

    • 减少表关联

    • 索引优化 比 范式优化方便

  • 缺点

    • 数据冗余

    • 更新数据 成本大

如果 表 读的多 适当反范式设计 以空间 换时间 如果更新的 多 那么 遵循第三范式

从性能上讲,范式有更好的写性能,饭范式有更好的读性能。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值