数据库设计

为什么需要设计数据库

良好的数据库设计

-节省数据的存储空间

-能够保证数据的完整性

-方便进行数据库应用系统的开发

软件项目开发周期中数据库设计

设计数据库的步骤

收集信息

与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务

标识实体 (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层优化五个原则:

  1. 减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO
  2. 返回更少的数据:只返回需要的字段和数据分页处理 减少磁盘io及网络io
  3. 减少交互次数:批量DML操作,函数存储等减少数据连接次数
  4. 减少服务器CPU开销:尽量减少数据库排序操作以及全表查询,减少cpu 内存占用
  5. 利用更多资源:使用表分区,可以增加并行操作,更大限度利用cpu资源

SQL优化三点:

最大化利用索引;

尽可能避免全表扫描;

减少无效数据的查询;

优化方向

在设计上:字段类型,存储引擎,范式,冗余列

在功能上:索引,缓存,分库分表

在架构上:集群,主从复制,负载均衡,读写分离


Empty spaces,fill the pages.