数据库设计
数据库设计(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 |
+---------+----------+------------+
下列设计是否满足第三范式?
+------+--------+--------+---------+----------+
| 学号 | 姓名 | 语文 | 数学 | 总分 |
+------+--------+--------+---------+----------+
不满足,因为语文和数学确定了,总分就确定了。 上面的设计不满足第三范式,但是高考分数表就是这样设计的,为什么? 高考分数峰值访问量非常大,这时候就是性能更重要。当性能和规范化冲突的时候,我们首选性能。这就是“反三范式”。
相关文章
- 数据库设计 ER图
- 淘宝数据库,主键如何设计的?
- 用SQL语句获得一个存储过程返回的表详解数据库
- 数据库库设计:字段默认值二详解数据库
- Linux搭建MySQL数据库:一步一步操作指南(linux搭建mysql)
- Oracle虚拟表:解决复杂数据库查询问题(oracle虚拟表)
- MySQL:最受欢迎的数据库引擎之一(mysql常用数据库引擎)
- 掌握Oracle触发器类型,解锁数据库能力(oracle触发器类型)
- MySQL数据库分析与设计之UML篇(mysqluml)
- 了解Oracle数据库中的默认编码集(oracle默认编码)
- 优雅的构建:基于Redis的数据库设计(redis设计数据库)
- Oracle数据库的分区设计与应用(数据库分区oracle)
- 探索Oracle的Type数据类型,优化数据库设计(oracletype)
- MySQL规划:教你如何设计高效数据库结构(mysql规划)
- 定破解MSSQL数据库锁定解开数据库(mssql数据库锁)
- MySQL数据库优化:提升性能的关键(mysql数据库优化设计)
- 探究MySQL数据库接口设计的关键技巧(mysql数据库接口设计)
- 使用SQL Server实现数据库应用程序开发(sqlserver中包涵)
- Oracle01002解决你的数据库问题(oracle-01002)
- 哈希空格哈希Oracle数据库中的奥秘(oracle 中的空格)
- Oracle数据库新增交换表名的方法(oracle交换表名)
- Oracle数据库中的常见约束类型介绍(oracle中有哪些约束)
- Redis连接服务器稳定高效的数据库存储方案(redis 连接到服务器)
- 数据库设计技巧奉送了