为什么需要设计数据库:
糟糕的数据库设计:
- 数据冗余、存储空间浪费
- 数据更新和插入的异常
- 程序性能差
良好的数据库设计:
- 节省数据的存储空间
- 能够保证数据的完整性
- 方便进行数据库应用系统的开发
软件项目开发周期中数据库设计:
需求分析阶段:
分析客户的业务和数据处理需求
①设计数据库的步骤
a. 收集信息
与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务
示例:酒店管理系统的基本功能:
旅客办理入住手续:后台数据库需要存放入住客人的信息和客房信息
客房信息:后台数据库需要存放客房的相关信息,如客房号、床位数、价格等
客房管理:后台数据库需要保存客房类型信息和客房当前状态信息
b. 标识实体(Entity)
标识数据库要管理的关键对象或实体,实体一般是名词
示例:酒店管理系统中的实体:
客人:入住酒店的旅客。办理入住手续时,需要填写客人的信息
客房:酒店为客人提供休息的房间
c. 标识每个实体需要存储的详细信息(Attribute)
示例:
d. 标识实体之间的关系(Relationship)
示例:酒店管理系统中实体之间关系:
客房和客人有主从关系:表明客人入住的房间
2. 概要设计阶段:
设计数据库的E-R模型图,确认需求信息的正确和完整
E-R图:
符号 | 含义 |
实体,一般是名词 | |
属性,一般是名词 | |
关系,一般是动词 |
映射基数:
如何使用Visio绘制E-R图:
- 使用文件→新建→框图→基本框图来绘制E-R图;
- 在绘图窗口左侧的“基本形状”里选择“矩形”、“椭圆”、“菱形”拖动到页面适当位置,就可以绘制需要的矩形、椭圆和菱形
- 绘制直线,在工具栏:视图→工具栏→绘图,这时就会弹出绘图工具栏。选择其中的直线工具
示例:酒店管理系统的数据库
关系模式:
用二维表的形式表示实体和实体间联系的数据模型即关系模式
E-R图转换为关系模式的步骤:
- 把每个实体都转化为关系模式R(U)形式【R代表一个关系,对应一张表;U表示属性集合,也就是表中字段】
- 建立实体间联系的转换
示例:酒店管理系统数据库的关系模式是:
客房(客房号、客房描述、客房类型、客房状态、床位数、入住人数、价格)
客人(客人编号,客人姓名、身份证号、入住日期、结账日期、押金、总金额、客房号)
转化E-R图为数据库模型图:
步骤:
- 新建数据库模型图
- 添加实体
- 添加数据列及相应的属性
- 添加实体之间的映射关系
示例:
3. 详细设计阶段:
应用三大范式审核数据库结构
为什么需要数据规范化:
不合规范的表设计会造成:信息重复、更新异常、插入异常(无法正确表示信息)、删除异常(丢失有效信息)
第一范式(1st NF):
第一范式的目标是确保每列的原子性
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
示例:
第二范式(2nd NF):
第二范式要求每个表只描述一件事情
示例:
第三范式(3nd NF):
如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)
示例:
示例总结:
最终规范化的酒店管理系统E-R图:
最终规范化的酒店管理系统数据库模型:
4. 代码编写阶段:
物理实现数据库,编码实现应用
规范化和性能的关系:
- 为满足某种商业目标,数据库性能比规范化数据库更重要
- 在数据规范化同时,要综合考虑数据库的性能
①通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间
②通过在给定的表中插入计算列(如成绩总分),以方便查询