数据库设计

前言

数据库设计(Database Design)是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。数据库系统需要操作系统的支持。

基本步骤

需求分析

调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等,形成用户需求规约。
需求分析是在用户调查的基础上,通过分析,逐步明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求。在需求分析中,通过自顶向下,逐步分解的方法分析系统,分析的结果采用数据流程图(DFD)进行图形化的描述。

概念设计

对用户要求描述的现实世界(可能是一个工厂、一个商场或者一个学校等),通过对其中诸处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息储存、查询和加工的要求等。所建立的模型应避开数据库在计算机上的具体实现细节,用一种抽象的形式表示出来。以扩充的实体—(E-R 模型)联系模型方法为例,第一步先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图)。第二步再将前面得到的多个用户的局部视图集成为一个全局视图,即用户要描述的现实世界的概念数据模型。

逻辑设计

主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。与此同时,可能还需为各种数据处理应用领域产生相应的逻辑子模式。这一步设计的结果就是所谓“逻辑数据库”。

物理设计

根据特定数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(包括文件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径等。这一步设计的结果就是所谓“物理数据库”。

验证设计

在上述设计的基础上,收集数据并具体建立一个数据库,运行一些典型的应用任务来验证数据库设计的正确性和合理性。一般,一个大型数据库的设计过程往往需要经过多次循环反复。当设计的某步发现问题时,可能就需要返回到前面去进行修改。因此,在做上述数据库设计时就应考虑到今后修改设计的可能性和方便性。

运行与维护设计

在数据库系统正式投入运行的过程中,必须不断地对其进行调整与修改。
至今,数据库设计的很多工作仍需要人工来做,除了关系型数据库已有一套较完整的数据范式理论可用来部分地指导数据库设计之外,尚缺乏一套完善的数据库设计理论、方法和工具,以实现数据库设计的自动化或交互式的半自动化设计。所以数据库设计今后的研究发展方向是研究数据库设计理论,寻求能够更有效地表达语义关系的数据模型,为各阶段的设计提供自动或半自动的设计工具和集成化的开发环境,使数据库的设计更加工程化、更加规范化和更加方便易行,使得在数据库的设计中充分体现软件工程的先进思想和方法。
存在问题

  • 需求分析阶段:分析客户的业务和数据处理需求.
  • 概要设计阶段:绘制数据库的 E-R 图.
  • 详细设计阶段:应用数据库的三大范式进行审核数据库的结构.

三大范式

  • 第一范式
    • 数据库表中的所有字段都只有单一属性
    • 单一属性的列都是由基本的数据类型所构成
    • 设计出来的表都是简单的二维表
  • 第二范式
    • 一个表中只具有一个业务主键
  • 第三范式
    • 每一个非主属性既不部分依赖也不传递依赖业务主键,也就是在第二范式的基础上消除了非主属性对主键的传递依赖

反范式化

适当遵循范式化的数据库设计,实现了消除数据冗余的目的,但此时数据库的性能和读取效率并不是最优的。为了性能和读取效率的考虑,可以适当对设计范式要求进行违反,而存在少了的数据冗余,用使用空间来换取时间。

总结:在进行数据库的系统分析时,都以下列 4 点位参考的基本步骤.

  • 收集信息.
  • 标识实体.
  • 标识每个实体需要储存的详细信息.
  • 标识实体之间的关系.

概念设计 E-R 图

将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计,最后生成的模型是 E-R 图。注意先写局部 E-R 图,再写整体 E-R 图。
E-R :Entity Relationship Diagrams(实体关系模型)
E-R 图:实体-联系图
E-R 图可以认为是关系模型的雏形,每个实体是一张表,实体与实体之间的关系可以合并到其中一个实体中,也可以是另外一张表,关系表和相关的实体表是通过主键或外键来联系的。

E-R 图 3 个要素:实体,属性,关系。

  • 实体:用矩形表示,矩形框内写明实体名。
  • 属性:用椭圆形表示,椭圆内写明属性名称,并用连线与实体连接起来。如果属性较多,为使图形更加简明,有时也将实体与其相应的属性另外单独用列表表示。
  • 联系:用菱形表示,菱形框内写明联系名,并用连线分别与有关实体连接起来,同时在连线旁标上联系的类型。

连线:实体和属性之间、实体与联系之间、联系与属性之间用直线连接,并在直线上标注联系的类型。(注意:对于 1:1 的联系,要在两个实体连线方向各写 1,1:n 关系的,要在一的方向写 1,多的方向写 N;对于 N:M 关系的,则要在两个实体连线方向各写 N,M)

关系

一对一

可以将人表的主键放在身份证表里面,也可以将身份证表的主键放置于人表里面。

一对多

比如一个班级有多个学生,班级是 1 端,学生是多端。多端有 1 端的属性,也就是说多端里面应该放置 1 端的主键,那么学生表里面应该放置班级表里面的主键。

多对多

例如学生和选修课之间的关系,一个学生可以选择多门课程,而每个选修课又可以被多名学生选择。数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。

参考资料

[1] 吴爱华.数据库应用系统开发过程、技术及案例详解.中国人民大学出版社