数据库设计
数据库设计的作用
随着项目规模变大,设计变得越来越重要!
良好的数据库设计:能节省数据库的存储空间、能够保证数据的完整性、方便进行数据库应用系统的开发;
糟糕的数据库设计:会产生数据冗余、存储空间浪费、内存空间浪费、数据更新和插入的异常。
1.设计数据库设计步骤(生命周期)
- 需求分析 明确甲方意图
- 概要设计 E-R图
- 详细设计 利用三大范式进行完善 规范化
- 代码编写 构建真实的数据库 添加测试数据
- 软件测试 测试数据库是否能满足真实的场景需求
- 安装部署 试运行阶段
- 生产环境使用
小步快跑,快速迭代(更新)
敏捷开发 DevOps
1.需求分析信息
1.1与有关人员进行沟通、座谈 详细了解相应的需求
1.2标识实体 存储各类信息
旅客信息、客房信息
1.3 标识实体属性
旅客:编号、姓名、性别、身份证号、手机号、入住时间、退房时间、押金、消费总金额、入住客房
客房:编号、客房号、客房类型、客房床位数、客房入住数、客房状态
1.4 旅客入住客房(实体关系分类)
2.绘制数据库的E-R图
2.概要设计 E-R图绘制
实体间关系的分类
一对多 多对一
客房和客人属于一对多
多对多
学生和课程 商品和订单
对多对多进行拆分为两个一对多
学生和课程属于多对多 但是往往除了学生表和课程表之外会创建中间表
中间表
学生信息 课程信息
1 1
1 2
2 3
一对一 因为这种关系完全可以放在一张表中
身份证唯一属于一个公民
详细设计 先进性规范化 然后进行模型图绘制
3.数据库设计的三大范式
1.确保每列的原子性 即一张表中的每个字段存储的信息必须足够单一
2.一张表只能表示一件事 如果在一张表中描述过多的事情 会导致数据冗余和不完整
3.表的字段之间不允许出现传递依赖
A -> B -> C A和C就是传递依赖
可以到时候将传递依赖的信息抽取到多张表或者一张数据字典表
数据字典表:
类型:大床房、双人间、单人间、豪华双人间…
客房状态:已预定、已入住、空闲
酒店设施:有无早餐、有无空调、有无外窗、有无wifi、有无停车位
规范化和实际性能/复杂度等方面的关系
为了降低查询复杂度和提升性能:
- 允许一定的冗余
- 允许一些特别的计算列
根据实际情况和需求决定规范和性能的取舍。