MySQL 数据库作为数据存储的介质为应用系统提供数据存储的服务, 如何设计出合理的数据库、数据表以满足应用系统的数据存储需求?
- 车库, 可以存放车辆, 车库都需要划分车位, 如果不划分车位, 车子杂乱无章的存放可能会导致车辆堵塞, 同时也可能造成场地的浪费——有限的场地能够停放最多的车辆, 方便每一辆车的出入
- 数据库, 可以用来存放数据, 需要设计合理的数据表——能够完成数据的存储, 同时能够方便的提取应用系统所需的数据
数据库设计流程
数据库是为应用系统服务的, 数据库存储什么样的数据也是由应用系统决定的
当进行应用系统开发时, 首先要明确应用系统的功能需求——软件系统的需求分析
- 根据应用系统的功能, 分析数据实体 (实体, 需要存储的数据对象)
- 电商系统: 商品、用户、订单…
- 教务管理系统: 学生、课程、成绩…
- 提取实体的数据项 (数据项, 实体的属性)
- 商品 (商品名称、商品图片、商品描述…)
- 用户 (姓名、登录名、登录密码)
- 根据数据库设计三范式规范的实体的数据项
检查实体的数据项是否满足数据库设计三范式, 如果实体的数据不满足三范式, 可能会导致数据的冗余, 从而引起数据维护困难、破坏数据一致性等问题
- 绘制 E-R 图 (实体关系图, 直观的展示实体与实体之间的关系)
- 数据库建模
- 三线图进行数据表设计
- PowerDesigner
- PDMan
- 建库建表, 编写 SQL 指令创建数据库、数据表
- 添加测试数据, SQL 测试
数据库设计案例
学校图书馆图书管理系统 (借书)
数据实体
- 学生
- 类别
- 图书
- 借书纪录
- 管理员
提取数据项
- 学生 (学号、姓名、性别、年龄、院系编号)
- 院系 (院系编号、院系名称、院系说明…)
- 类别 (类别 ID、类别名称、类别描述)
- 图书 (图书 ID、图书名称、图书作者、图书封面、图书价格、图书库存…)
- 借书记录 (记录 ID、学号、图书编号、数量、是否归还、借书日期、还书日期)
- 管理员 (管理员 ID、登录名、登录密码、员工编号)
- 员工 (员工编号、员工姓名、手机、qq、邮箱)
数据库设计三范式
- 第一范式: 要求数据表中的字段 (列) 不可再分
- 第二范式: 不存在非关键字段对关键字段的部分依赖
- 第三范式: 不存在非关键字段之间的传递依赖