目录
1.概念模型:E-R图
1.实体
2.属性
3.联系
4.实体间的映射关系
2.物理模型:数据库模型图
3.数据库规范设计
1.常见数据库设计问题
2.三大范式
1.第一范式
2.第二范式
3.第三范式
3.规范化和性能的关系
1.概念模型:E-R图
在数据库需求分析阶段,我们已经充分了解系统需要实现的业务功能,并完成实体标识及实体间关系的标识。此时需要进一步进入概要设计阶段。为了更加形象直观地体现数据库的设计意图,如同建筑行业的施工图纸,数据库设计也有类似的图形化展示工具——E-R图(Entity Relationship Diagram,实体-联系图),通过一些具有特定含义的图形符号提供图形化展示实体、属性和联系的方法。
1.实体
在E-R图中,使用矩形表示实体。在医院管理系统的E-R图中,病人、科室、检查项目实体的表现形式。
2.属性
在E-R图中,椭图形表示实体的属性。属性与实体之间使用实线相连,表示该属性归属于哪个实体。在医院管理系统的E-R图中,病人的姓名、性别和出生日期等属于病人实体的属性。
3.联系
联系指在需求分析阶段标识的实体之间的关系,使用菱形表示。在医院管理系统的E-R图中,科室给病人开具处方及科室拥有检查项目的关系。
4.实体间的映射关系
在绘制E-R图的过程中,还需要在E-R图上表现实体之间的映射关系,即一个实体关联其他实体的个数。这种映射关系被称为映射基数。对于实体A和B之间的映射关系,其映射基数必为下列基数之一。
- 一对一联系(1:1):A中的一个实体最多与B中的一个实体关联,并且B中的一个实体最多与A中的一个实体关联。例如,学校里班级与班主任之间的联系是一对一的联系。学校里一个班级只有一个老师作为班主任,而一个教师也只能做一个班级的班主任。
- 一对多联系(1:N)/多对一联系(N:1):一对多联系是A中的一个实体可以与B中的任意数量的实体关联;B中的一个实体最多与A中的一个实体关联。例如,学校里班级和学生的联系是一对多联系。学校里一个班级可以有多个学生,而一个学生只能属于一个班级。反过来说,学生和班级的联系是多对一联系。
- 多对多联系(M:N):A中的一个实体可以与B中的任意数量的实体关联,反之亦然。例如,学校里的任课教师与班级的关系。一个任课教师可以给多个班级上课,一个班级可以有多个任课教师上课,在E-R图中,通过在连接线上分别添加字母N和M表示多对多的映射关系。
- E-R图可以将复杂的业务以图形的形式展示出来,它虽然并不是完善的数据库设计,但是对于帮助梳理数据间的联系有着非常重要的作用。尤其是在业务人员与开发人员的沟通中,E-R图更是能够极大地提高彼此之间的沟通效率。
2.物理模型:数据库模型图
完成E-R图的绘制,相当于完成了数据库存的概要设计,概要设计阶段的重点是理清系统中存在的实体和实体之间的关系。下一步就要进行数据库的详细设计。数据库的详细设计采用数据库模型图来实现。在这一阶段,工作内容是把E-R图转化为数据库中的多张表,并标识各表的主键和外键。设计良好的数据库模型通过图形化的方式显示数据库存储的信息、信息的数据类型,以及表与表之间的关系。
3.数据库规范设计
在数据库的需求分析设计阶段,由于设计者的工作经验、水平。视角等因素,不同的人设计的数据库各不相同。开发者缺乏在设计阶段对数据库评价的手段,往往在系统开发到一半甚至上线后才发现数据库设计得不合理,导致系统性能低下甚至不稳定。
1.常见数据库设计问题
数据库设计问题大部分是数据冗余引起的。什么是数据冗余呢?以医院信息管理系统为例,考虑一种极端的情况,整个医院管理系统由一张表组成。一张设计糟糕的、存在大量冗余数据的数据表。
2.三大范式
在设计数据库时,有一些专门的规则,它们被称为数据库的设计范式。遵守这些规则,将会创建设计良好的数据库。下面将逐一讲解数据设计的三大范式理论。
1.第一范式
第一范式强调的是表中列的原子性,也就是说,任意一列不能够再拆分成其他几列。如果这是一个很大的综合性医院,当前的科室划分就不符合第一范式。因为在综合性大医院中,仅内科就可能分为消化内科、心内科或心血管内科等。因此,在此情况下,可以考虑把科室列进行拆分,简单的做法是将科室拆分为多级。
2.第二范式
首先要明确的是第二范式的使用条件是当前的设计已经满足第一范式,然后才可以使用第二范式来进一步评价数据库的设计。也就是说,第二范式是建立在第一范式的基础上的。
第二范式要求表那必须有一个主键,并且非主键必须完全依赖主键,而不能只依赖主键的一部分。
3.第三范式
第三范式在第二范式的基础上更进一步。第二范式中要求表中的所有列都依赖主键,按照依赖的程度划分这种依赖,又可分为直接依赖和间接依赖。第三范式要求每列都和主键直接依赖,而不是间接依赖。也就是说除主键以外的其他列都只能依赖主键列,列和列之间不存在相互依赖的关系。在这个条件下则认为数据表满足第三范式(3NF)。
3.规范化和性能的关系
需要注意的是,对于项目的最终用户来说,客户最关心的是方便、清晰的数据结果。
在设计数据库时,数据库的设计规范化和性能之间存在一定的矛盾。前面通过三大范式分解出3张表,为了满足客户的需求,最终需要通过3张表之间的连接查询,恢复客户需要的数据结果。插入数据同样如此,对客户输入的数据,我们需要分开插入3张不同的表中。
由此可以看出,为了满足三大范式,数据操作性能会受到相应的影响。所以,在实际的数据库设计中,既要考虑三大范式,避免数据冗余和各种数据操作异常,又要考虑数据库的访问性能。有时,为了减少表间的连接,提高数据库访问性能,允许适当的数据冗余列,这可能是最合适的数据库设计方案。