数据库设计
根据业务系统的具体需求,结合所选用的DBMS,为该业务系统构造出最优的数据存储模型,并建立号数据库中表结构以及表与表之间的关联关系的过程。
需求分析
为什么
- 了解系统中所要储存的数据
- 了解数据的储存特点
- 了解数据的生命周期
怎么样
- 实体所包含的属性
- 实体的唯一标识的属性或属性组合 - 实体的储存特点
- 实体与实体的关系
逻辑设计
ER图
关系、元组、属性、候选码、主码、域、分量
第一范式
定义:数据库表中的所有字段都是单一属性,不可再分,由基本的数据类型组成
第二范式
定义:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,即单关键字段的表
部分函数依赖师指存在着组合关键字中的某一关键字决定非关键字的情况
如:(商品名称)-〉(价格,描述,重量,商品有效期)(供应商名称)-〉(供应商电话)
第三范式
定义:如果数据表中不存在非关键字段对任意候选关键字段的传递函数依赖
传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
如:在关系R(学号 ,宿舍, 费用)中,(学号)->(宿舍),宿舍!=学号,(宿舍)->(费用),费用!=宿舍,所以符合传递函数的要求;
BC范式
定义:数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖,也就是说如果存在符合关键字,则复合关键字之间也不能存在函数依赖关系
数据库操作异常及数据冗余
- 插入异常
- 更新异常
- 删除异常
- 数据冗余
物理设计
选择合适的DBMS
定义数据库、表及字段的命名规范
根据所选的DBMS选择合适的字段类型
- 当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次时日期或二进制类型,最后时字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。
注意:
- 字符处理比数字处理慢
- 在数据库中,数据处理以页作为单位,列的长度越长,利于性能提高
char与varchar如何选择
- 如果存储的数据长度差不多一致的,应该考虑用char;
- 如果最大数据长度小于50Byte,应该用char
decimal与float如何选择
- decimal储存精确数据,float只能储存非精确数据
时间类型如何储存
- timestamp比较少用,date比较常用
反范式化
定义:为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,而允许存在少量的数据冗余
注意事项:
- 主键:
- 外键:高并发的系统尽量少使用外键约束
- 触发器:尽量减少触发器
- 预留字段:严禁使用预留字段