>>>> 为什么需要规范的数据库设计
在实际的项目开发中,如果系统的数据存储量较大,设计的表比较多,表和表之间的关系比较复杂,就需要首先考虑规范的数据库设计,然后进行创建库,创建表的工作.
如果设计不当,会存在数据操作异常,修改复杂,数据冗余等问题,程序性能会受到影响,通过进行规范化的数据库设计,可以消除不必要的数据冗余,获得合理的数据库设计,提高项目的应用性能.
>>>>设计数据库的步骤
1.收集信息
需要了解数据库需要存储哪些信息(数据),实现哪些功能.
2.标识实体
在收集需求信息后,必须标识数据库要管理的关键对象或实体,实体可以是有形的事物,如人和产品;也可以是无形的事物,如商业交易公司部门或发薪周期...
3.标识每个实体需要存储的详细信息(即实体的属性)
就是需要细分出每个实体中包含的子成员信息,也称为该实体的属性,这些属性将组成表中的列.
4.标识实体之间的关系
要标识实体之间的关系,需要分析数据库表,确定这些表在逻辑上是如何相关的,然后添加关系列建立起表之间的连接.
--在需求分析阶段解决了客户的业务和数据处理需求后,就进入了概要设计阶段,我们需要和项目的其他成员及客户沟通,讨论数据库的设计是否满足客户的业务和数据的处理需求,数据库的设计也需要图形化的表达方式--E-R(Entity-Relationship)图,也称之为 实体-关系图
>>>>E-R(Entity-Relationship)图
(实体使用矩形表示,一般是名词;属性使用椭圆表示,一般也是名词;联系使用菱形表示,一般是动词)
1.实体
就是指现实世界中具有区分其他事物的特征或属性并与其他实体有联系的实体.严格的说,实体是指表中一行特定数据,也 常把整个表称之为一个实体.
2.属性
属性可以理解为实体的特征.属性对应表中的列.
3.联系
联系是两个或多个实体之间的关联关系
根据E-R图绘制酒店管理系统的E-R图
>>>>映射基数
映射基数表示通过联系与该实体关联的其他实体的个数,对于实体集X和Y之间的二元关系,映射基数必须为下列技术之一:
>>一对一:X中的一个实体最多与Y中的一个实体相关联,并且Y中的一个实体最多与X中的一个实体相关联.
>>一对多:X中的一个实体可以与Y中的任意数量实体相关联;Y中的实体最多与X中的一个实体相关联.
>>多对一:X中的一个实体最多与Y中的一个实体相关联;Y中的实体可以与X中的任意数量实体相关联.
>>多对多:X中的一个实体可以与Y中的任意数量实体相关联,反之亦然.
>>>>逻辑设计——绘制数据库模型图
操作步骤:(1.新建数据库模型图 2.添加实体 3.添加数据列及相应的属性 4.添加实体之间的映射关系)
>>>>数据库规范化
从用户的角度而言,将所有信息放在一个表中很方便,因为这样查询数据库可能会比较容易,但是在数据库的实际操作中会出现很多的问题:
1.信息重复:会造成存储空间的浪费及一些其他的问题,如(不小心输入"标准间","标准" ,则在数据库中将表示两种不同的 客房类型)
2.更新异常:冗余信息不仅浪费存储空间,还会增加更新的难度.
3.插入异常(无法表示某些信息):如(同样是标准间,却因为入住人数不同而造成价格的差异)
4.删除异常(丢失有用的信息):当删除一行的信息时可能会丢失有用的信息.如(当"标准间"的住房记录中只有一条信息,那 么当我们删除此记录的时候会把"标准间"这一记录删除,而"标准间"也就不复存在了)
>>>>规范设计
在设计数据库时,三大范式良好的规避了以上可能出现的错误
1.第一范式
确保每列的原子性.
2.第二范式
确保表中的每列都和主键相关(直接相关和间接相关皆可).
3.第三范式
确保每列都和主键直接相关,而不是间接相关. (在上面的那张数据库设计E-R图就是符合第三范式的)