数据库设计
为什么需要设计数据库
良好的数据库设计
-节省数据的存储空间
-能够保证数据的完整性
-方便进行数据库应用系统的开发
软件项目开发周期中数据库设计

设计数据库的步骤
收集信息
与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务
标识实体 (Entity)
标识数据库要管理的关键对象或实体,实体一般是名词
标识每个实体的属性(Attribute)
标识实体之间的关系(Relationship)
E-R图

映射基数

一对一 外键可以设置在任意一张表中
User
Id(主键) username passwd id(外键) 身份证 民族 籍贯 政治面貌 。。
一对多 或 多对一 外键设置在多的一方
班级 学生
Id(主键) name 。。。 id name class_id(外键)
多对多 需要一张关系表进行描述关系,关系表中有两个外键
教师 学生
Id name id name teacher_id
1 宋作振 1 尹力
2 姚 2 闫国华
教师和学生的关系表
Id teacher_id(外键) student_id(外键)
1 1 1
2 1 2
3 2 2
酒店管理系统的数据库

转化E-R图为数据库模型图
将各实体转换为对应的表,将各属性转换为各表对应的列
标识每个表的主键列
在表之间建立主外键,体现实体

为什么需要数据规范化
不合规范的表设计
信息重复
更新异常
插入异常
无法正确表示信息
删除异常
丢失有效信息
第一范式 (1st NF)
第一范式的目标是确保每列的原子性
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

姓 名
张 三
李 四
第二范式 (2nd NF)
第二范式要求每个表只描述一件事情

第三范式 (3nd NF)
如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)

规范化示例



数据库优化
MySQL层优化五个原则:
- 减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO
- 返回更少的数据:只返回需要的字段和数据分页处理 减少磁盘io及网络io
- 减少交互次数:批量DML操作,函数存储等减少数据连接次数
- 减少服务器CPU开销:尽量减少数据库排序操作以及全表查询,减少cpu 内存占用
- 利用更多资源:使用表分区,可以增加并行操作,更大限度利用cpu资源
SQL优化三点:
最大化利用索引;
尽可能避免全表扫描;
减少无效数据的查询;
优化方向
在设计上:字段类型,存储引擎,范式,冗余列
在功能上:索引,缓存,分库分表
在架构上:集群,主从复制,负载均衡,读写分离
Comments | NOTHING