组团学

数据库设计

阅读 (153561)

数据库设计(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  | 
+---------+----------+------------+

下列设计是否满足第三范式?

+------+--------+--------+---------+----------+
| 学号  | 姓名   |   语文  |   数学   |  总分    | 
+------+--------+--------+---------+----------+

不满足,因为语文和数学确定了,总分就确定了。
上面的设计不满足第三范式,但是高考分数表就是这样设计的,为什么?
高考分数峰值访问量非常大,这时候就是性能更重要。当性能和规范化冲突的时候,我们首选性能。这就是“反三范式”。

需要 登录 才可以提问哦