数据库设计
数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。
数据库设计的设计内容包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。
一、范式概述
1.1、什么是范式
好的数据库设计对数据的存储性能和后期的程序开发,都会产生重要的影响。建立科学的,规范的数据库就需要满足一些规则来优化数据的设计和存储,这些规则就称为范式。
1.2、范式分类
目前关系数据库有六种范式:
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
巴斯-科德范式(BCNF)、
第四范式(4NF)
第五范式(5NF,又称完美范式)
一般说来,数据库只需满足第三范式(3NF)就行了。
二、第一范式
确保每个字段不可再分。确保每列原子性。
案例:
班级表中的字段
+---------+----------+------------------------+
| 班级id | 班级名称 | 上课时间 |
+---------+----------+------------------------+
| 1 | 一班 | 1999-09-01~2000-01-04 |
+---------+----------+-------------------------+
不合理。不满足第一范式,上课时间可以再分
+---------+----------+------------------------+
| 班级id | 班级名称 | 开课时间 | 结课时间 |
+---------+----------+------------------------+
| 1 | 一班 | 1999-09-01 | 2000-01-04|
+---------+----------+-------------------------+
地址包含省、市、县、地区是否需要拆分?
如果仅仅起地址的作用,不需要统计,可以不拆分;如果有按地区统计的功能需要拆分。一般情况下拆分
三、第二范式
一个表只能描述一件事。
订单表中的字段
+---------+----------+------------------------+
| 订单编号 | 产品编号 | 订购日期 | 价格 |
+---------+----------+------------------------+
| 00001 | A00001 | 1999-09-01 | 35687.0 |
+---------+----------+------------------------+
不合理。不满足第二范式,一个表中出现了二种描述,一个是订单,一个是产品
订单表
+---------+------------+
| 订单编号 | 订购日期 |
+---------+------------+
| 00001 | 1999-09-01 |
+---------+------------+
产品表
+----------+------------+
| 产品编号 | 价格 |
+----------+------------+
| A00001 | 35687.0 |
+----------+------------+
如下表设计是否合理?
+------+--------+--------+---------+----------+
| 学号 | 姓名 | 年龄 | 最高气温 | 青菜价格 |
+------+--------+--------+---------+----------+
四、第三范式
在所有的非键字段中,不能有传递依赖。消除传递依赖
订单表中的字段
+---------+----------+------------------------+
| 订单编号 | 订购日期 | 顾客编号 | 顾客姓名 |
+---------+----------+------------------------+
| 00001 |1999-09-01| A000001 | Luc |
+---------+----------+------------------------+
不合理。不满足第三范式,因为我们已经可以通过顾客编号知道顾客姓名,所以我们不需要定义顾客姓名
+---------+----------+------------+
| 订单编号 | 订购日期 | 顾客编号 |
+---------+----------+------------+
| 00001 |1999-09-01| A000001 |
+---------+----------+------------+
下列设计是否满足第三范式?
+------+--------+--------+---------+----------+
| 学号 | 姓名 | 语文 | 数学 | 总分 |
+------+--------+--------+---------+----------+
不满足,因为语文和数学确定了,总分就确定了。
上面的设计不满足第三范式,但是高考分数表就是这样设计的,为什么?
高考分数峰值访问量非常大,这时候就是性能更重要。当性能和规范化冲突的时候,我们首选性能。这就是“反三范式”。