数据库设计
一 概念
简单来说,数据库设计就是对需求进行分析、逻辑设计、物理设计以及维护和优化的过程。可以看到,数据库设计不仅仅体现在软件开发过程中,还体现在软件后期的维护上。(时间周期) 这里的软件需求分析与软件开发过程中的需求分析不太一样,数据库设计中的需求分析更侧重数据源(什么数据)、数据的属性以及数据和属性的特点。
总结:
1.有效存储数据.
2.满足用户的多种需求
二 规则
数据库设计三范式:
1.第一范式:确保每列保持原子性
2.第二范式:确保表中的每列都和主键相关
3.第三范式:确保表中每一列都和主键列直接相关,而不是间接相关.
第一范式
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
第一范式的合理遵循需要根据系统的实际需求来定。
第二范式
第二范式在第一范式的基础之上更进一层。
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
第三范式
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
三 数据库表关系
表与表之间一般存在三种关系,即一对一,一对多,多对多关系。
下面分别就三种关系讲解数据库相关设计的思路和思考过程;
一对一关系(最少需要一张表):
特殊的一对多,通过在字段上添加唯一约束产生一对一关系
一项某个字段的值 对应 本表或其他表的字段的值
例:
从表中可以看出,小花和张三是夫妻,小明和小丽是夫妻。
一对多关系(最少需要两张表):
主表不动。从表中添加主表的主键
一项某个字段的多个值 对应其他表的某个字段的一个值
(思路小结:’建两个表,一’方不动,’多’方添加一个外键字段)*
例:
一个人可以有多辆汽车:
人员表:
汽车表
车牌号 品牌 所属人
多对多关系(最少需要三张表):
两张主表结构不变,然后利用第三张表表示两张主表的关系
某个字段的值 对应其他表某个字段的多个值,其他表的字段的值可以被多个字段的值对应。
例:
学生选课,一个学生可以选多门课程,每门课程也可以被多人选择
学生表
课程表
关系表
主表:不与其他表有关联的表
从表:关联了其他表的字段的表
四 分表
在数据库表使用过程中,为了减小数据库服务器的负担、缩短查询时间,常常会考虑做分表设计。
分表分两种,一种是纵向分表(将本来可以在同一个表的内容,人为划分存储在为多个不同结构的表)和横向分表(把大的表结构,横向切割为同样结构的不同表)。
其中,纵向分表常见的方式有根据活跃度分表、根据重要性分表等。其主要解决问题如下: 表与表之间资源争用问题; 锁争用机率小; 实现核心与非核心的分级存储,如UDB登陆库拆分成一级二级三级库; 解决了数据库同步压力问题。
横向分表是指根据某些特定的规则来划分大数据量表,如根据时间分表。其主要解决问题如下: 单表过大造成的性能问题; 单表过大造成的单服务器空间问题。