
数据库的设计方法和土木建筑的设计方法类似,假设某单位(建设方)需要建设一栋楼,建设方会找设计院(设计方)进行建筑设计;设计方会撰写一个需求分析报告(通常以设计任务书形式呈现),并根据需求分析,绘制设计图纸(以建筑设计图、施工设计图形式呈现),计算承载,规范化设计;设计方出图后,建设方会委托施工单位进行施工,并找监理公司监督整个施工全过程,施工方会根据施工设计图进行沙盘模拟,并积极备料,准备施工;项目施工进展的同时,监理公司会定期对工程质量、进度、财务等多方面进行全过程监督;最后,当项目施工完毕,建设方和监理公司联合对项目进行验收,验收合格,则开始进行投入使用。
总结起来,整个建筑过程包括:需求分析、设计图纸、建筑沙盘、建筑备料、项目施工、项目验收等。


数据库的设计方法和建筑设计过程类似,从考虑数据库及其应用系统开发全过程看,数据库设计过程可分为六个阶段:
(1)系统需求分析阶段
这个阶段是需要了解用户的具体需求,包括信息需求和处理需求,信息需求是指目标数据库设计的所有信息的内容和性质,以及由信息需求导出的数据需求。处理需求:指为得到需要的信息而对数据进行加工处理的要求,包括处理描述,发生的频度、响应时间以及安全保密要求等。说白了就是要了解哪些人要用这个数据库,需要哪些操作,怎么用这个数据库。这个阶段类似建筑过程中的需求分析,通常以需求分析报告形式呈现。
需求分析的方法常用结构化分析方法(Structured Analysis),简称SA),SA方法从最上层的系统组织结构入手,采用自顶向下,逐层分解的方式分析系统。用数据流图和数据字典描述系统。
◇ 数据流图:描述输入数据到输出数据的变换过程。
◇ 数据流:由一组固定成分的数据组成,代表数据的流动方向
◇ 处理:描述了输入数据到输出数据的变换
◇ 文件:用于存储数据
◇ 源或宿:存在于系统之外的人员或组织,表示系统输入数据的来源和输出数据的去向

(2)概念结构设计阶段
将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。这个阶段类似建筑过程中的设计图纸阶段,数据库设计也同样需要设计图纸,即概念模型。概念模型独立于数据库的逻辑结构,也独立于支持数据库的DBMS和机器硬件,说白了,绘制图纸阶段和用什么型号的机器和什么数据库管理系统没关系,只需要一支笔和一张纸就行了。
概念结构设计是现实世界与机器世界的中介,是现实世界的一个真实模型。它一方面能够充分反映现实世界,同时又易于向关系数据模型转换。
概念结构设计的常用方法有:
自动向下:首先定义全局概念结构的框架,然后逐步细化。
自底向上:首先定义局部各应用的概念结构,然后将它们集成起来得到全局概念结构。
逐步扩张:首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构。
混合策略:将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。

(3)逻辑结构设计阶段
设计逻辑结构应该选择最适于描述与表达相应概念结构的数据模型,然后选择最合适的DBMS。这一阶段类似建筑过程中建筑沙盘。
设计逻辑结构时一般要分三步进行:
◇ 将概念结构转换为一般的关系数据模型
◇ 将转化来的关系数据模型向特定DBMS支持下的数据模型转换
◇ 对数据模型进行优化(规范化设计详见下一节)

(4)物理结构设计阶段
数据库最终是要存储在物理设备上的。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。物理结构依赖于给定的DBMS和和硬件系统,因此设计人员必须充分了解所用DBMS的内部特征,特别是存储结构和存取方法;充分了解应用环境,特别是应用的处理频率和响应时间要求;以及充分了解外存设备的特性。这个阶段类似于建筑设计中的建筑备料。
逻辑结构设计主要任务包括:
◇ 设计数据的存取路径:主要是指确定如何建立索引。
◇ 确定数据的存放位置:为了提高系统性能,数据应该根据应用情况将易变部分与稳定部分、经常存取部分和存取频率较低部分分开存放。
◇ 评价物理结构:需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案,数据库设计人员必须对这些方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构。

(5)数据库实施阶段
根据物理设计的结果产生一个具体的数据库和它的应用程序,并把原始数据装入数据库。这个阶段类似建筑过程中的项目施工。数据库实施阶段主要有三项工作:
◇ 建立实际数据库结构
◇ 装入试验数据对应用程序进行调试
◇ 装入实据数据
在数据库实施阶段,设计人员运用DBMS提供的数据语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。

(6)数据库运行与维护阶段
数据库系统的正式运行,标志着数据库设计与应用开发工作的结束和维护阶段的开始。这个阶段类似建筑过程中的项目验收阶段。数据库运行和维护阶段的主要任务有四项:
◇ 维护数据库的安全性与完整性
◇ 监测并改善数据库运行性能
◇ 根据用户要求对数据库现有功能进行扩充
◇ 及时改正运行中发现的系统错误
数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。


模型是现实世界特征的模拟和抽象,它具有比较真实地模拟现实世界、容易为人所理解、便于在计算机上实现等特点。所以人们愿意用模型来描述问题。从上面我们可以看出在数据库设计中,有两个重要的模型 —— 概念模型 和 数据模型。
◇ 概念模型:即按用户的观点对数据和信息进行建模,概念模型独立于具体的机器和DBMS,说白了就是在纸上画图,只需要一支笔和一张纸即可。
◇ 数据模型:是按算机系统的观点对数据建模,主要用于DBMS的实现,数据模型是数据库系统的核心和基础。跟具体的机器和DBMS有关。

将现实世界中的事物抽象,存入数据库中,共有三个世界、两种模型。三个世界是指:现实世界、信息世界、机器世界,而两个模型就是上面所说的概念模型和数据模型。


在信息世界的概念模型中涉及到的主要概念有:
◇ 实体:客观存在的并可相互区别的事物称为实体。可以是具体的人、事、物。例如,一名学生,一门课程等;也可以是抽象的概念或联系。例如一次选课,一场竞赛等。
◇ 属性:每个实体都有自己的一组特征或性质,这种用来描述实体的特征或性质称为实体的属性。例如,学生实体具有学号、姓名、性别等属性。不同实体的属性是不同的。实体属性的某一组特定的取值(称为属性值)确定了一个特定的实体。例如,学号是1001,姓名是张三,性别是男等。

◇ 实体型:具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。例如学生(学号,姓名,性别)就是一个实体型。
◇ 实体集:性质相同的同类实体的集合,称为实体集。例如,全体学生就是一个实体集。由于实体、实体型、实体集的区分在转换成数据模型时才考虑,因此在不引起歧义的情况下,将三者统称为实体。
◇ 码:唯一标识实体的属性集称为码。例如学号是学生实体的码。码也称为关键字,或简称为键。
◇ 联系:现实世界中,事物内部或事物之间不是孤立的,是有联系的,这些联系反映在信息世界中表现为实体内部或实体之间的联系。这里我们只讨论实体之间的联系。例如学生和课程之间存在着选修的联系,职工和部门存在着隶属的联系等。联系有一对一、一对多、和多对多联系。例如:班长和班级是一对一的联系,即一个班只有一个班长(不包括副班长),一个班长只服务一个班级;部门和职工属于一对多联系,即一个职工只属于一个部门,一个部门可以有多名职工;学生和课程是多对多的联系,即一个学生可以选多门课程,一门课程有多个学生选修。


概念模型是对信息世界的建模,有多种表示方法,其中,最常用的是“实体-联系模型”,简称E-R模型。E-R模型用E-R图来描述现实世界的概念模型。
陈品山博士于1976年3月ACM Transactions on Database Systems上发表了《The Entity-Relationship Model--Toward a Unified View of Data》一文。提出了实体联系模型,正是由于大众广泛使用实体联系模型来设计数据库,并且这篇文章已成为计算机科学38篇被广泛引用的论文中之一。陈品山博士被誉为全世界最具计算机软件开发技术的16位科学家之一。
E-R模型的基本元素包括实体(用矩形表示)、属性(用椭圆形表示)、联系(用菱形表示)。实体之间的联系分为一对一(1:1表示)、一对多(1:n表示)和多对多(m:n表示)三种。在E-R图中,加下划线的属性(或属性组)表示实体的码。如图,学生和课程之间是多对多的联系。


数据模型是对机器世界的建模,是将数据以一定的方式存储在数据库系统中,这是数据库管理系统的功能,是数据库管系统中的物理存储模型。常见的数据模型有层次数据模型、网状数据模型 和 关系数据模型。其中,层次模型和网状模型现在已经淘汰了,目前市面上应用的基本上都是关系数据模型。
(1)层次数据模型:是用树状<层次>结构来组织数据的数据模型称为层次数据模型。其实层次数据模型就是的图形表示就是一个倒立生长的树,由基本数据结构中的树(或者二叉树)的定义可知,每棵树都有且仅有一个根节点,其余的节点都是非根节点。每个节点表示一个记录类型对应与实体的概念,记录类型的各个字段对应实体的各个属性。各个记录类型及其字段都必须记录。
(2)网状数据模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。其实,网状数据模型可以看做是放松层次数据模型的约束性的一种扩展。网状数据模型中所有的节点允许脱离父节点而存在,也就是说说在整个模型中允许存在两个或多个没有根节点的节点,同时也允许一个节点存在一个或者多个的父节点,成为一种网状的有向图。
(3)关系数据模型:使用二维表格表示实体和实体之间关系的数据模型称之为关系数据模型。关系型数据模型对应的数据库自然就是关系型数据库了,这是目前应用最多的数据库。其优点有:
◇ 结构简单,关系数据模型是一些表格的框架,实体的属性是表格中列的条目,实体之间的关系也是通过表格的公共属性表示,结构简单明了。
◇ 关系数据模型中的存取路径对用户而言是完全隐蔽的,使程序和数据具有高度的独立性,其数据语言的非过程化程度较高
◇ 操作方便,在关系数据模型中操作的基本对象是集合(记录的集合)而不是某一条具体的记录
◇ 有坚实的数学理论做基础


关系:一个关系就是一张二维表。
关系名:每一个关系都有一个关系名,即表名。
字段:是指二维表中垂直方向的列,也称属性,用于描述该列各数据项的含义。
字段名:每个属性都有一个属性名,即列名。
域:字段的取值范围。域中数据的个数称为域的基数。
记录:是指二维表中水平方向的行,也称元组,用来标识实体集中的一个实体。
关系模式:是对关系的描述,关系的框架,是对关系结构的描述。关系模式表示:关系名(属性1,属性2,...,属性n)
候选关键字:能唯一标识关系中元组的一个属性或属性组。候选关键字满足唯一性,但不满足最小性。比如:在学生(学号,姓名,性别,...)关系中,学号和姓名,如果没有重名的情况下,学号或姓名都可以唯一识别学生实体,当然,学号和姓名一起(属性组)也可以唯一识别学生实体。所以,它满足唯一性,但不满足最小性。
主关键字:当候选关键字有多个,被选中的那个称为主关键字,简称主键。它不仅满足唯一性,同时也满足最小性。比如:在学生关系中,在没有重名的情况下,学号或姓名都可以唯一识别学生实体,我们选定学号作为主键,未被选中的就是候选关键字。
外关键字:或称外键,如果一个关系中的键,不是本关系中的主键,而是另一个关系中的主键,则称其为外关键字,或简称为外键。
主属性:包含在主关系键中的各个属性称为主属性。
非主属性:未包含在任何一个候选关键字中的属性为非码属性。


从概念模型(E-R图)到数据模型(关系数据模型)的转换,一般遵循如下原则:
(1)一个实体转换为一个关系。即一个实体转换为一张二维表,其中:实体的属性就是关系的属性,实体的码就是关系的主键。
(2)一个联系转化为一个关系模式,有三种情况:
◇ 若实体间联系是1:1,将任意一个关系的主关键字放到另外一个关系里做外关键字。
◇ 若实体间联系是1:n,则将一的关键字放到多的关系里作为外键。
◇ 若实体间联系是m : n,则将多对多的联系独立成一个新的关系,其属性为两端实体类型的主键(作为新关系的外键)加上联系自身的属性,而两个外键作为新关系的联合主键。


任务:某小区计划采用电子数据方式管理小区业主及其爱犬信息,取代现有的纸质数据管理,现对外征集数据库设计人员,你有幸争取到该项目,请你为该小区设计一个小区遛狗的数据库,具体设计要求如下:
(1)要求记录有关业主的信息
(2)要求记录有关业主爱犬的信息,而且每名业主只允许合法注册一只爱犬
解答:
数据库设计的步骤,还记得吗?主要有:需求分析、概念设计、逻辑设计、物理设计、数据库实施、数据库运行与维护六个阶段。
此外,数据库设计有三个世界和两个模型,第一个就是现实世界,我们在小区看到了什么?我们看到了张三领着张三狗,李四领着李四狗,就如同下图所示。

(1)需求分析阶段
针对上述文字和现实世界看到的景观,对其进行抽象,撰写需求分析报告。我们很容易抽象出两个不同的类别,一个是业主,一个是宠物狗。小区管理人员需要掌握业主的信息、以及他们所饲养的宠物的信息。
(2)概念设计阶段
如何根据需求分析阶段对现实世界抽象出来的类别,绘制出概念模型(E-R图)?也不难,对于本例来说,业主与其宠物之间有着饲养与被饲养的联系,且联系是1:1。E-R图如下(为简单起见,本E-R模型略去了实体的属性部分):

(3)逻辑设计阶段
将E-R模型转换为关系数据模型。转换如下:
人(人员编号,人员姓名,宠物号)
狗(宠物编号,宠物名称)
(4)物理设计阶段
确定索引,人关系中,选定人员编号为主键,宠物号为外键;狗关系中,选定宠物编号为主键。表结构如下(下面的表结构只是形象地说明一下,不是准确的表结构的写法,后面的章节会有标准的写法):

(5)数据库实施阶段
略
(6)数据库运行与维护阶段
略
附:课外阅读