使用数据库时,通常是为了支撑一个应用或一个业务场景,第一步需要做的就是要对数据库的表结构进行设计。一个完善的设计方案包括:表名、列名、数据类型、备注信息、字符编码、主键设计、表间关系、其他约束条件等。其中的难点在于如何使用数据表以及表间关系来描述出相应的功能场景,能够应对以后的各种查询需要,这对刚接触数据库的使用者来说是有些困难的,但是只要认真思考,按照步骤来操作相信最后的结果不会差。
一、什么是数据库建模
数据库建模简单理解指的就是设计数据库的过程,根据一个应用的描述,去构建出最优的数据库模式(考虑数据的冗余,数据查询效率等因素),一般数据库建模可以被划分为六个阶段。
1. 需求分析阶段
需求分析阶段是最为重要的一个阶段,如果前期的需求分析的不明确,很可能导致数据库扩展性差,甚至于无法支撑对应的功能逻辑。通常会在这一阶段花费比较多的时间,最后产出需求文档作为成果物。
2. 概念结构设计阶段
概念设计阶段是以数据库的角度去解读需求的第一步,也是很关键的步骤,需要形成一个通用的(与具体DBMS无关)的概念模型,比较直观的可以用E-R图表示。
3. 逻辑结构设计阶段
在逻辑结构设计阶段需要对概念结构适当的具体化,将实体-关系的描述转换为某个DBMS的数据模型。可以进一步描述出表名、列名、数据类型(不需要太具体)、表间关系。
4. 物理结构设计阶段
物理结构的设计,要具体到某一个数据库软件、版本、表结构、主外键等,至此也就完成了数据库设计阶段,可以直接据此生成完整的SQL语句。
5. 数据库实施阶段
数据库实施阶段指的是按照已有的设计方案,在一个具体的数据库中进行实施:建库、建表、插入测试数据等。
6. 数据库运行和维护
数据库运行和维护阶段是一个长期的过程,随着应用的使用,可能会产生一些变化,如:添加数据维度,数据长度不足,约束关系收紧等,这个时候我们要针对实际情况来对数据库的结构来进行修改。
二、数据库模型的分类
基于数据库建模的各个阶段,可以把建立出来的模型根据特点归为以下几类。
1. 概念模型(CDM)
概念模型主要是基于客观世界实际存在的事物或场景进行的描述,不涉及到具体的DBMS和实现步骤。表示概念模型最常用的形式是使用E-R(实体-关系)图,包含以下三个要素:
- 实体:矩形
- 属性:椭圆
- 关系:菱形
- 一对一:根据一个实例,只能找到一个对应实例(如:一个学生 -> 一个班级)
- 一对多:根据一个实例,能够找到多个对应实例(如:一个班级 -> 多个学生)
- 多对多:根据一个实例,能够找到多个对应实例,反过来亦然(如:一个学生 -> 选多门课,一门课 -> 被多人选)
敲黑板:由于在数据库中直接表示两个多对多实体的关系会产生数据冗余,所以一般会有中间表的存在。
2. 逻辑模型(LDM)
逻辑模型指的是数据的逻辑结构,目的在于根据概念模型(E-R图表)进一步分解和细化,可以窥见到表结构的雏形与表间关系(数据实例)。如果存在多对多关系,也必须在这一阶段细化出中间表,在描述表间关系时,根据实际数据的可能情况可以划分为如下情况:
- 刻画一对一
- 0或1个:找不到或只能找到一个
- 唯一:有且只能找到一个
- 刻画一对多
- 0或多个:找不到或能找到多个
- 1或多个:能找到一个或多个
- 多个:一定存在多个
敲黑板:以上只是根据业务分析和数据的预期情况确定出的表间关系,用于展现整体业务情况。
3. 物理模型(PDM)
物理模型是对真实数据库的描述,要根据具体的数据库生成具体的表、字段、数据类型、数据长度、主键、外键、索引、约束条件等。
敲黑板:可以直接使用Navicat或PowerDesigner工具根据生成的物理模型导出对应的SQL或直接实施到数据库。