1、第1章关系数据库设计SQL语言及采用SQL语言的关系数据库系统是计算机中重要的基础技术之一。在使 用任何数据库之前,都必须设计好数据库,包括将要存储的数据的类型,数据之间的相互 关系以及数据的组织形式。本章将对SQL语言进行简要的介绍,并详细地介绍如何进行数 据库的设计。本章主要内容:SQL简史及功能特性 关系数据模型 关系操作 数据库设计概述 概念数据库设计 逻辑数据库设计 完整性 数据库设计的其他问题 回顾数据库设计1.1 SQL简史及功能特性与其他编程语言类似,SQL语言也有一个从简单到复杂的发展过程。同时,所提供的 功能也逐步强大。本节中简单介绍一下SQL语言的历史与功能特性。1.1.
2、1 SQL 简史SQL语言的历史与关系数据库的发展密切联系在一起。关系数据库的概念是由IBM 的研究员DrEF.Codd提出的,他在1970年6月发表了一篇题为“大型共享数据银行的关 系数据模型”的论文,在该文中描述了关于数据如何在表中存储和处理的数学理论。70年 代中期,IBM San Jose研究实验室把SQL作为一种新型关系数据模型的数据库语言设计出 来,其含义是结构化查询语言(Structed Query Language)。SQL语言不同于C、JAVA等其 他程序设计语言,它属于一种描述性的语言,描述的是检索、删除或插入何种数据,而不 是说明如何去执行它,SQL的出现使得建立关系数据
3、库成为可能。它的正式发音是 ess-cue-ell(按照 American National Standards Institute),但许多人发音为 sequelo 在本书中,SQL的发音为sequel o七十年代后期,IBM准备开发一个关系数据库系统:SQL/DS RDBMS,其他开发商也 迅速准备开发他们的RDBMSo但是低性能的关系型数据库管理系统制约了他们的商业生 存能力。在早期关系系统中,关系模型的重要问题,“数学上的有效描述和直观的显示”没有有效的处理方法,导致了大型数据库管理系统速度慢又难以使用。直到大容量、高速 度的计算机出现和开发了优秀的数据检索、数据存储和数据访问方法,这
4、些方法有效地支 持了关系系统的后台处理功能,才在一定程度上解决了这个问题。1981年,IBM发布了它的第一个基于SQL的商业产品SQL/DSo在八十年代早期,Oracle,Relational Technology等其他几个开发商也纷纷发布了各自的基于SQL的关系型数 据库管理系统。到1989年,市场上出现了许多种SQL或类似于SQL的数据库管理系统,这些系统运行在从个人计算机到处理多用户计算机等各种计算机上。在市场的推动下SQL 得到了普及。同时IBM公司加快了对SQL的普及,并把DB2定位为九十年代数据管理的 解决方案。关系型数据库管理系统市场的激烈竞争导致出现了各种各样的SQL实现版本,
5、每一种 版本都代表了开发商在开发完整和高效关系模型表达语言方面所做的最大努力。1986年美 国国 家标准化学会(American National Standard Institute,ANSI)和国 际标准化组织(International Standard Organization,ISO)发布的 ANSI/ISO 标准正式确认 SQL 的标准地位,这是SQL在市场中确定地位最重要的一点。并且在1992年与1999年先后进行了修订,现 在的正式版本是SQL3版本。从九十年代初起,SQL性能便开始稳步提高,处理器速度明 显加快,使SQL成为事务处理程序的有效工具,随着网络的发展,SQL成为客
6、户机/服务 器结构的关键部分,通过网络实现数据库的连接与使用变得越来越普遍,现在已经可以基 于Web应用程序来实现远程访问数据库。1.1.2 SQL的功能与特性SQL是与DBMS进行通信的一种语言和工具,将DBMS的组件联系在一起。可以为 用户提供强大的功能,使用户可以方便地进行数据库的管理以及数据的操作。通过控制 DBMS,SQL能提供给用户如下的功能。数据定义:SQL能让用户自己定义所存储数据的结构,以及所存储数据各项之间 的关系。这样用户就可以按自己的需要方便地进行数据的组织。数据更新:SQL为用户和应用程序提供了添加、删除、修改等数据更新操作,使 用户或应用程序可以向数据库中增加新的数
7、据,删除旧的数据以及修改已有数据,有效地支持了数据库数据的更新。数据查询:SQL使用户或应用程序可以从数据库中按照自己的需要查询数据并组 织使用它们。其中SQL不仅支持简单条件的检索操作,而且支持子查询、查询的 嵌套、视图等复杂的检索,为用户和应用程序提供了很好的数据查询方法。数据安全:SQL能对用户和应用程序访问数据、添加数据等操作的权限进行限制,第1章关系数据库设计 3 以防止未经授权的访问,有效地保护数据库的安全。数据完整性:SQL使用户可以定义约束规则,定义的规则将存在数据库内部,可 以防止因数据库更新过程中的意外事件或系统错误导致的数据库崩溃。数据库结构的修改:SQL使用户或应用程序
8、可以修改数据库的结构。可见,SQL为用户提供了完整的数据库操作、安全及维护的各种操作,为用户提供了 很好的可操作性。SQL是一种易于理解的语言,同时又是综合管理数据的工具。作为现在数据库市场普 遍应用的语言,它具有以下一些特性。确定的标准:美国国家标准化学会(ANSI)和国际标准化组织(ISO)在1986年制订 了 SQL的标准,并在1989年、1992年与1999年进行了 3次扩展,使得所有生产 商都可以按照统一标准实现对SQL的支持,SQL语言在数据库厂家之间具有广泛 的适用性。虽然在不同厂家之间SQL语言的实现方式存在某些差异,但是通常情 况下无论选择何种数据库平台,SQL语言都保持相同
9、。这就是SQL的最大优点。软件提供商的独立性:现在所有主流的DBMS软件提供商均提供对SQL的支持,SQL标准的确立使不同的生产商可以独立地进行DBMS软件的设计,一个基于 SQL的数据库和使用该数据库的应用程序能很方便地从一种DBMS系统转向另一 种DBMS系统。查询、报表生成器等数据库工具能在许多不同类型的SQL数据库 中使用。跨计算机系统的移植性:基于SQL的数据库产品能够在大型计算机、个人计算机 等各种计算机上运行,也支持在不同的操作系统上运行,同时也可以通过网络进行 访问和管理。各大公司的支持:SQL最初由IBM研究人员发明,已经成为IBM数据库产品DB2 的战略性产品,同时也得到了
10、 Microsoft公司、Oracle公司等数据库市场各大软件 公司的支持,这就保证了 SQL今后的发展。程序化数据库访问:SQL语句既能用于交互式访问也能用于程序化访问,这样应 用程序就具有很大的灵活性,可以将这两种方式结合起来设计更好的程序。应用程序传送的支持:在数据库发展的最初时期,SQL支持基于主机的应用程序;随着计算机技术的发展,客户机/服务器体系结构随着PC革命的到来应运而生,SQL作为优化用户相互作用的前端计算机系统和专为数据库管理设计的后端系统 的桥梁,使每个系统处于最佳工作状态;随着Internet和WWW的迅速发展,SQL 作为Internet数据访问标准,在应用中充当了新
11、的角色,建立了以SQL作为应用程 序和数据库连接的标准;最新出现的Java也已经引入了 SQL,SQL在最新的编程 语言中也有了有效的应用。数据的多视化:可以通过使用SQL产生不同的报表和视图将数据库中的数据按用 户所需的角度显示在用户面前,供用户使用,具有很大的灵活性。同时,SQL的视图功能也能提高数据库的安全性并且能满足特定用户的需要。可扩展性和对象:面向对象编程技术的兴起,数据库市场也面临了对象技术的 入,各个SQL数据库生产商也正在扩展和提高SQL对对象的支持。SQL的以上特性,使得SQL在个人计算机、小型计算机和大型计算机上作为管理数 据的标准工具出现,占据了大部分的市场。1.1.3
12、 SQL3 简介SQL标准是为了在各个开发商之间达成高度的一致性来达到提高市场上所有数据库 产品的通用性而制定的一个国际标准,每次该标准的更新都为SQL添加了新的特征和新的 命令与功能。最新的ANSI/ISO的SQL-3即SQL99标准的特色就是提供了一系列可以处理 面向对象数据类型的扩展功能。可以通过简单地比较SQL-2和SQL-3的语句种类来感受SQL-3的新特色。在SQL-2 标准中,SQL语句可以大体分为:数据定义语句(Data De自nition Language,DDL)、数据操 作语句(Data Manipulation Language,DML)以及数据控制语句(Data Co
13、ntrol Language,DCL)O其中,DDL包括了处理数据库元素的命令,如CREATE和DROP;DML提供了 特定的数据操作命令,如SELECT、INSERT、UPDATE和DELETE;而DCL贝(J包括了处 理权限(Permission)的命令,如 GRANT 和 REVOKE。而SQL-3标准提出了一种新的语句分类方式,将它所现有的SQL语句分为7种核心 的类型,而这些SQL-3标准的语句类试图使每一个类型和那些语句能更加准确并且更有逻 辑性地结合在一起,在某种程度上也更易于理解。这样一套新的语句类型允许将来新产生 的且不适于任何已有类型的语句能够合理地进行单独分类,因此这种做
14、法非常有益于SQL 将来的发展。SQL-3包含的语句类如下。连接语句:使用该类语句可以开始和结束一个客户连接,如CONNECT语句和 DISCONNECT 语句。控制语句:该类语句用来控制一组SQL语句的执行,如CALL语句和RETURN 语句。数据语句:使用该类语句可以直接对数据产生持续的作用,如SELECT语句、INSERT语句、UPDATE语句和DELETE语句。诊断语句:该类语句可以提供诊断信息并指出异常或错误,如GET DIAGNOSTIC 语句。模式语句:该类语句可以操作数据库模式及其内部的元素,如ALTER语句、CREATE语句和DROP语句。会话语句:使用该类语句可以在一次会话
15、中控制默认操作和其他的参数,如SET 语句。事务语句:该语句用来设置一个事务处理的开始点和结束点,如COMMIT语句 和ROLLBACK语句。第1章关系数据库设计 5 从SQL-3标准的这些语句类可以明显看出,与以前的SQL标准相比,SQL-3标准更 适合对面向对象的数据类型进行处理。除了上述的语句分类方式的变化,使新的方式更适合处理面向对象的数据,SQL-3标 准还增加了一些新的数据库元素以增强SQL对面向对象数据类型的处理。这些新增数据库 元素有角色、触发器和用户定义类型。角色是指定的一种或一组权限,是一个单独的成分,是一个对象。角色具有的分组权限功能为数据库系统的安全性管理提供了许多便利
16、的条件;触发器是指当在指定的表上发生一个特定的操作事件时,将被调用的一个程序段;在以前 的SQL标准中,所有的数据类型都是预定义的,但是,在SQL-3标准中新增的CREATE TYPE、ALTER TYPE和DROP TYPE语句应用了对象/关系概念,可以使用它们来进行用 户定义类型(UDT)的操作。这3种新的数据元素将在本书的12.1.3小节中予以介绍。之前简单讲述了 SQL-3标准提供的一系列可以处理面向对象数据类型的扩展功能的 特色,下面来了解一下SQL-3相对SQL-2的最重要改变进一步阐述了 SQL-2的一致 性级别(level of conformance)。SQL-2 标准定义了
17、 3 类级别:Entry(入门)、Intermediate(中等)和Full(完全),此标准的每一个较高的级别都包括了其较低一致性级别的所有特征,而开 发商必须达到Entry级别才可以声明其产品符合ANSI/SQL标准。而SQL-3修订了关于一 致性的基本级别,不再使用SQL-2的3个级别,而使用核心SQL-3标准(CoreSQL-3)、增 强SQL-3标准(Enhanced SQL-3)。其中,Core SQL-3标准包括SQL-2中的Entry级的特征 集和其他级别中的一些特征以及其他一些全新的特征;而Enhanced SQL-3则对应于SQL-2 的Intermediate和Full级的
18、部分特征以及其他一些全新的特征。ANSI/SQL则要求开发商必 须实现SQL-3的一致性级别的Core SQL-3级,只要是支持Core SQL-3 一致性级别的数据 库产品再加上SQL-3 9个附加特征包中的任意一个或多个就可以说是满足增强SQL-3标 准。因为一致性级别只与开发商密切相关,不属于本书实用教程的讨论范围,所以书中不 进行详细讨论。除了上面讨论的SQL-3标准的特色,新的语句分类形式,新增的数据库元素和进一步 阐述的SQL 一致性级别以外,SQL-3还在多个细节上对SQL-2进行了改进。本书后面的 章节中所有的内容都是基于SQL-3标准的,为了说明SQL-3与旧标准的不同,在这
19、先举几 个不同的例子,如下。(1)在SQL-3中,空值NULL的使用方式不同于旧标准。在SQL-3中,约束检验时,NULL的值是UNKNOWN而不是旧标准的TRUE或FALSE(2)在SQL-2中,基于多表连接的视图和含有集合算符的查询的视图都不能作为 INSERT、UPDATE和DELETE语句的操作对象,但是在SQL-3中可以对这几类视图进行 有条件的更新操作,例如可以在两个表的UNION JOIN结果中进行这些数据的更新操作。举一个例子,假设有两个表,第一个表有5个字段,第二个表有6个字段,在它们的UNION JOIN结果中就有H歹U,下面进行如下操作:INSERT一个新记录行如果新行的
20、前5列为空,后6列非空,则该操作去掉前面5个NULL,将剩余的数据 存入第二个表中。如果新行的前5列非空,后6列为空,则该操作去掉后面6个NULL,将剩余的数据 存入第一个表中。新行的前5列非空,后6列也有非空值,则该操作不能进行。UPDATE 操作如果需要更新的行来自第一个表(后6列为空值),则该操作修改第一个表中的对应行 的数据。如果需要更新的行来自第二个表(前5列为空值),则该操作修改第二个表中的对应行 的数据。新行的前5列非空,后6列也有非空值,则该操作不能进行。DELETE 操作如果需要删除的行来自第一个表(后6列为空值),则该操作删除第一个表中的对应行。如果需要删除的行来自第二个表
21、(前5列为空值),则该操作删除第二个表中的对应行。新行的前5列非空,后6列也有非空值,则该操作不能进行。(3)下面举两条语句,在SQL-2中不合法,但是在SQL-3中是合法的。SELECT语句中使用的ORDER BY子句后的表列存在,但是不在SELECT清单中:SELECT nameFROM EmployeeORDER BY id在SELECT清单和ORDER BY子句中同时使用未命名的表达式:SELECT salary*12FROM EmployeeORDER BY salary*121.2 关系数据模型关系数据模型的设计是关系数据库设计中重要也是基础的一步。关系数据模型的设计 主要包含两个
22、方面:数据结构的设计以及键与外部键的定义。本节将介绍这两个方面设计 的定义与应用。1.2.1 数据结构每一个系统都有其自己的数据结构。关系数据库管理系统组织并构造数据,以使数据 能被用户或应用程序检索与更新。由DBMS提供的数据结构和访问方法被称为DBMS的 第1章关系数据库设计 7 数据模型。数据模型决定了 DBMS的性能及其适应的范围。在关系数据库系统中,关系是关系数据模型的核心。关系数据库系统中最主要的数据 结构就是关系。在实际表示中,关系可以用一个表来直观地表示,通常表是以一种矩形数 据行/列的形式表示。表的每一列表示关系的一个属性,每列的名字即为一个属性名,每一 行表示一个记录代表一
23、个物理实体。关系数据库中,所有的数据都是通过表来进行存储的,可以说如果没有表数据就无法进行存储和表示。表1-1给出了一个关系模式”工作人员(名字,职员ID,生日,性别,工资)”的实例。表的每一行表示一个物理实体工作人员。表中有6行,代表6个工作人员。例如,第 一行记录的是工作人员“林志千”的信息。工作人员表的每一列代表一个工作人员的一个 数据项,记录工作人员的一部分信息。例如,职员ID列用来存储每个工作人员的职员ID,生日列用来存储每个工作人员的生日。第一行的职员ID列记录了工作人员“林志千”的 职员ID1001,生日列记录了工作人员“林志千”的生日1962年H月25号。第二行记录 的是工作人
24、员“李明”的信息。第二行的职员ID列记录了工作人员“李明”的职员ID1002,生日列记录了工作人员“李明”的生日1976年5月23号。表1-1关系模式实例姓 名职员ID生 日性 别工 资林志千10011962-11-25男6000.00李明10021976-05-23男5000.00李大平10031978-12-20男3000.00林国荣10041977-06-14男4000.00刘燕20021971-12-26女3000.00魏箸30031977-05-17女4000.00关系数据模型中数据结构的核心规则是:所有数据都必须在表中所有关系模型中呈现 给用户。它提供了数据表达和存储之间的一级抽象
25、概念,使数据具有独立性,无论是用 哪种关系数据库产品,不论其采用的是什么物理存储方式,查询和处理数据的方式都是 相同的。具体来说,数据的独立性表现在两个重要的方面:物理独立性和逻辑独立性。各开发商之间,甚至同一开发商的不同版本之间的物理存储体系结构都是不相同的。物理独立性是指用户所看到的数据与数据的物理存储是完全独立的,即可以改变或重新安 排物理存储而不会影响到数据的使用和逻辑数据库的设计(逻辑数据库的设计将在1.6节中 详细介绍)。逻辑独立性指的是,可以改变表、行和列之间的相互关系,即对数据结构进行修改而 不会削弱应用程序特别是查询的功能。1.2.2 键与外部键每个表表示的是现实世界中的数据
26、集合,表中有多个列名,需要一个或一组属性来表 示表中元组的惟一性,接下来将介绍两个基本概念。候选键:包含独立的标识数据库中每一行值的任意一个列或一组列。主键:独立的标识存储在表中的每个记录或潜在记录的一组列(一组中可能只包含 一个值)。一个表中可能具有多个候选键,这时可以选择一个作为该表的主键,即主键是从候选 键中选出,剩下的候选键称为备用键。候选键中的属性称为键属性,其他属性则称为非键 属性。主键中的属性称为主属性,其他属性则称为非主属性。判断一组值是否具有候选键的资格有两条严格的规则:表中任意两个记录在他们的由候选键组成的列的组合中都不具有相同的值,即惟一 性规贝”(uniqueness
27、property)o 作为候选键的列的组合中,没有一个列的子集表现出惟一性,即不可简化性规则(irreducability property)。例如,在表1-1中可以看列组姓名,职员ID,生日和列职员ID,二者均可独立地 标识表中的每一行,都表现出惟一性;但是列职员ID显然是列组姓名,职员ID,生日 的子集,即列组中的子集职员ID表现出惟一性,所以列组姓名,职员ID,生日不满 足不可简化性,因此列组姓名,职员ID,生日不是候选键。在表“工作人员(姓名,职 员ID,生日,住址,性别)”中,由于生日和姓名都有可能重复,所以职员ID是惟一的 一个主键,“职员ID”是这个主键的主属性,表中其他的属性称
28、为非主属性。注意:键必须满足惟一性和不可简化性规则!下面介绍一下外部键的概念,假设X是表A中的一个属性集合,若X同时是另一个 表B的主属性,则称X是表A关于表B的外部键。例如,与表“工作人员(姓名,职员ID,生日,住址,性别,所属部门号)”相应的有 一个表“部门(部门名称,部门号,部门所在地)”,在表“部门(部门名称,部门号,部门所 在地)”中一般来说一家公司内各部门的部门号都是惟一的,因此可以把“部门号”作为一 个主键,同时“部门号”是表“工作人员(姓名,职员ID,生日,住址,性别,所属部门 号)”中的一个属性,所以“部门号”是表“工作人员(姓名,职员ID,生日,住址,性别,所属部门号)”关
29、于表“部门(部门名称,部门号,部门所在地)”的外部键。第1章关系数据库设计 9 1.3 关系操作对所有的关系数据库来说,有大量的操作方式可以使用,这些实用的操作方式能让用 户看到所需要的数据。由前面介绍的物理独立性和数据独立性可以让用户不必担心数据的具体存储位置,也 不必关心如何才能找到所需的数据。这些,数据库管理系统可以帮用户完成。SQL允许不 指定任何关于数据存储位置和寻找方式的细节就可以表示需要的内容。为了便于本节的介绍,下面就先给出关于SELECT语句的简单语法:SELECT select_listFROM table_listWHERE search_conditions在SELEC
30、T子句中指定要返回的表的属性,在FROM子句中指定从哪个表中检索数 据,WHERE子句则指定检索条件。下面介绍关系数据库中定义的3个具体的操作方式。注意:现在不必在意SQL语法的使用,关键是要理解所述操作的概念。1.3.1 选择选择操作是从表中返回特定行的集合。选择操作也可以称为限制,因为它限制了返回 行集合的标准。限制条件只适合于被返回的行,不适合包括在查询结果中的列。要指定限 制条件,可以将条件写在WHERE子句中。例如,如果只需要返回有关于部门号小于5的部门的信息,可以使用下面的语句:SELECT*FROM DepartmentWHEREdnumber5下面是选择结果:Resultsdn
31、umberdnamemgridmgrstrdate1开发部10012001-11-32市场部20012002-3-13人事部30012001-4-54技术部40012001-1-154rows1.3.2 投影投影操作限制了查询返回的列,允许用户列出所要查看的列。投影操作只允许返回表 中各列的具体的子集,是通过将具体的列清单传递给SELECT语句来实现的,即在SELECT 列表中列出需要查看的列的名称。例如,要查看部门的部门号、部门负责人ID号、部门负责人开始工作时间这3个列 的信息,可以使用投影操作:SELECT dname,mgrid,mgrstrdateFROM Department下面是
32、投影结果:Resultsdnumbermgrid mgrstrdate123456 6rows1001 2001-11-32001 2002-3-13001 2001-4-54001 2001-1-155001 2002-6-56001 2002-3-10用户可以同时使用选择和投影来查询所要查看的表的列和行。选择用来限制返回的记 录数目,而投影用来列出要查看的具体的字段。例如,只想知道部门号小于5的部门的负责人的职员ID号和开始工作时间,可以同 时使用选择和投影操作:SELECT mgrid,mgrstrdateFROM DepartmentWHEREdnumber5Results mgrid
33、mgrstrdate1001200130014001 4rows2001-11-32002-3-12001-4-52001-1-15第1章关系数据库设计 11 1.3.3 连接连接操作是结合多个表的关系操作,为了查询特定数据而将两个或更多个表连接起来 形成新的报表或视图,以便用户能够比较和对比数据库不同表中的数据,为用户提供了更 多的功能和灵活性。可以通过连接来发现数据之间的关系,找出数据之间的联系,而不仅 仅局限于数据库中已有的一些关系。连接操作是通过在WHERE子句中设定特定的条件,或者使用JOIN关键字通过表之 间相关的列来连接不同表中的数据,用户可以在其中设定想指定的条件。详细的连接操
34、作 的实现将在第7章中进行介绍。例如,想知道各部门的部门负责人的具体情况,每个工作人员的情况都存储在 Employee表中,Employee表中也包含了工作人员的职员ID号,但是谁是部门负责人并没 有记录在Employee表中,而是记录在Department表中,如图1-1所示。图1-1 在Employee表和Department表中的列在Employee表中的dno就是工作人员所在部门号,而Department表中也记录了部门 的部门号dnumber,所以可以用连接这两个表来实现用户想实现的操作,如图1-2所示。图1-2 在Employee表和Department表中的共享列由于共享列的存在
35、,可以使用下面的语句来实现上面的连接操作:SELECT name,sex,id,salary,dnoFROM Employee,DepartmentWHERE Employee.dno=Department.dnumberFROM子句表示要连接的两个表,WHERE子句指明这些表中的行在两个表中部门号 相等时进行连接。下面是连接结果:Resultssalarydnonamesexid林志千男10016000.001陈广海男20015000.002张宇男30015000.003张峰男40017000.004李志深男50015000.005魏成男60015000.0066rows读者可能有疑问,为什
36、么不首先将这些列放置在同一个表中而要使用连接操作呢?这 是因为一致性(即最小冗余性)、方便性及性能的要求,表中的列数必须有限制。在下面的 章节中将介绍表中列的确定准则。前面说过可以将选择和投影操作结合起来使用。同样,也可以将选择、投影和连接操 作结合起来使用。例如,只想知道部门号小于5的部门负责人的名字和工资,就必须将3个操作结合起 来,可以使用下面的语句:SELECT name,salaryFROM Employee,DepartmentWHERE Employee.dno=Department.dnumberAND Employee.dno 5下面是连接结果:Resultsname sal
37、ary林志千 6000.00陈广海 5000.00张宇 5000.00张峰 7000.004rows第1章关系数据库设计13.1.4 数据库设计概述在详细介绍如何进行数据库的设计之前,我们先介绍一下有关数据库模型准则及数据 库设计过程,使读者对数据库设计有一个大致的了解。1.4.1 数据库模型准则EECodd博士于1970年在一篇名为“一种存储大型共享数据的关系模型”的历史性 论文中提出了数据库模型定义的12条准则。信息准则:关系型数据库(包括表和列名)中所有的信息都必须清楚地用表中的数 值来表示。确保访问准则:必须保证关系数据库中的每一个数值都可用表名、主键和列名的 组合来访问。空值准则:D
38、BMS对空值(表示未知或不可使用数据,不同于其他任何一种数据类 型,如字符串、数字等数据类型)应提供系统支持。空值与默认值不同,它独立于 任何数据类型。数据字典准则:应支持主动的、在线的关系型数据字典。在逻辑上,数据库的描 述及其内容都被表示为表的形式,并能用数据库语言进行查询。广泛的数据子语言准则:具有统一的数据子语言,同时至少有一种支持语言,该 语言应具有严格、统一的语法格式,而且必须支持数据定义、视图定义、数据操作、完整性规则、授权和事务处理。视图更新准则:所有理论上可更新的视图,在实际操作中也可以被系统更新。集合准则:DBMS应该不仅仅支持集合级上的检索,而且支持集合级上的插入操 作、
39、更新操作与删除操作。物理数据准则:物理数据必须具有独立性,即当数据的存储结构或数据的物理存 取方法改变时,应用程序和其他特殊程序在逻辑上应保持不受影响。逻辑数据准则:逻辑数据应具有独立性,即当表的结构改变时,应用程序和其他 特殊程序应尽可能地保持在逻辑上不受影响。数据完整性准则:数据库语言必须能够定义完整性规则,这些规则必须存储在联 机数据字典中,不能被忽略。分布准则:应支持分布的独立性,当首次引入分布式数据或数据重新分布时,应 用程序和其他特殊程序在逻辑上应不受影响。无损害准则:绝不能发生用一种低级的语言绕过数据库语言定义的完整性规则的 事件。在实现关系数据库模型时必须满足上述12条标准。准
40、则一基本上是有关数据库信息的定义。准则二强调表中主键的重要性,要求能通过表名正确访问表,通过列名访问列,而主 键值能区分表中的行。准则三强调空值的处理。准则四要求数据库能自我描述,即数据库应该包含一定的系统表(数据字典),系统表 可以描述数据库自身的结构。准则五要求数据库支持关系数据语言,如SQLo通过SQL语言实现DBMS要求的数 据库的创建、数据的输入与更新等。准则六支持视图的使用,在实际使用过程中,视图提供了很大的灵活性,可以用来方 便地完成特殊功能。准则七强调对集合的支持,能进行集合运算:交、并、差等。准则八与准则九强调了应用程序与物理数据、逻辑数据之间的独立性,以保证低层数 据库结构
41、发生改变时,不会影响应用程序对数据的操作。准则十强调数据库的完整性,要求保证添加和修改数据时确保数据及数据之间的正确性。准则十一要求能对分布数据进行处理。准则十二限制了其他访问数据库的方法,以保证数据库结构不受破坏。1.4.2 数据库设计过程数据库的设计中有许许多多需要考虑的因素,如数据库的背景、应用环境等方面都需 要有深入的了解,只有一个对所有这些因素都很了解的数据库设计专家,他设计的数据库 才能易于使用和维护,并且具有高效和一致的特征。虽然这样只对数据库设计过程有一个 概要的了解,但是仍然有助于读者了解和掌握SQL,使读者可以很好地分析数据间的相互 关系,在使用SQL进行报表的生成、子查询
42、及视图等操作时,可以更好地进行操作。在开始介绍设计方法之前,先介绍好的数据库及差的数据库的一些品质,这将有助于 读者更好地掌握数据库的设计。一般来说,好的数据库应该满足以下条件。便于检索所需要的数据:在大型的数据库中,由于表的增加,多表中的数据很难 读取和理解,数据之间的关系无法在计算机屏幕或输出页中完整地显示,因此好的 数据库应该便于用户检索所需要的数据。具有较高的完整性、数据更新的一致性:好的数据库应该能防止不一致信息的引 入,避免因各种问题而出现的数据的不完整和数据之间的不一致。使系统具有尽可能良好的性能。当然,这3种品质之间也会有一些妥协。例如,将数据分割存储在多个表中对数据完整性的支
43、持较好,但对数据进行检索或更 新时需要进行更多的操作,不仅麻烦,而且对性能有害;若将数据都存储在一个表中,虽 第1章关系数据库设计15然进行数据检索或更新变得比较方便,性能也较好,但是又会降低数据库的完整性。因此在设计数据库时应该平衡它们中的每一项,使之适合应用程序。当然好数据库最 根本就是能提供用户高满意度而且能可靠地满足要求。相对而言,设计得不好的数据库或多或少与好的数据库的品质相反,在数据的检索、数据的完整性、数据更新的一致性及良好的性能上都具有较大的缺陷。还有一些具体的特 征可以帮助用户判断什么是设计得不好的数据库:需要多次输入相同的数据,或需要输入多余的数据。返回不正确的查询结果。数
44、据之间的关系难以确定。表或列的名称不明确。在数据库的设计中,应尽量保证设计的数据库具有好的特征,同时应尽量避免具有上 述一些不好的特征。下面将详细地介绍数据库的设计过程。(1)信息的收集:研究和考虑所要建立的数据库的信息环境,对数据库应用领域中各 种信息要求和操作要求进行详细地分析,了解应用领域中数据项、数据项之间的关系和所 有的数据操作的详细要求,了解哪些因素对响应时间、可用性和可靠性有较大的影响等各 方面的因素。这些就需要设计人员与相关人员进行各种交流,了解数据库需要完成的功能,数据项 的定义等。例如,以本书使用的简单的数据库示例为例,设计人员需要与有关人员进行交 流以确定部门与工程、工作
45、人员和部门、工作人员与工程之间的关系,同时确定每个数据 项,如工作人员,应该包含哪些数据等,只有完成这些必要的信息收集后,数据库的设计 才能顺利地进行下去。(2)确定数据:这是数据库设计最基本而且最重要的工作,在收集到所需的全部相关 信息后,将所有找到的数据的类型和这些类型的属性进行明确的定义,同时需要仔细地考 虑属性与数据类型的关系,应该放置于哪个数据类型中。(3)建立实体-关系模型:按照定义的数据类型和属性创建实体和实体属性列表。实体 形成表,如“工作人员”就是一个实体,属性则为表中的列,如对应于实体“工作人员”属性包含“姓名”、“职员ID”等。在定义完实体和属性后,就要确保每个实体都由一
46、个或一组属性惟一地标识表中的任 何记录,即确定每个表的主键。例如在“工作人员”表中,属性“职员ID”就可以惟一地 标识“工作人员”中的任何记录,因此将属性“职员ID”确定为该表的主键。接下来就应该确定实体之间的关系,确定是一对一、一对多还是多对多的关系。例如 一个部门有多个工作人员,但每个工作人员只属于一个部门,因此部门与工作人员之间是 一对多关系。一般来说是根据现实中的情况来确定实体之间的关系,从而形成实体-关系模 型。有关内容将在本章的1.5节中进行详细介绍。(4)进行规范化:按照规范化准则对数据进行整体分析,以找到逻辑上的错误,更正 任何违背了规范化形式的做法,使数据符合规范化的要求。(
47、5)编写组建数据库的SQL代码,同时使用查询等操作进行一些检测,有关测试的具 体内容将在第11章中介绍。(6)根据测试结果对已完成的数据库进行检查,在觉得有问题或需要完善的地方进行 必要修改和完善。上面介绍的是数据库设计的一般过程,如果读者有更好的方法,可以按照自己的方法。记住:方法并不是最主要的,重要的是结果。1.5 概念数据库设计概念数据库的设计是进行具体数据库设计的第一步,概念数据库设计的好坏直接影响 到逻辑数据库的设计,影响到整个数据库的好坏。1.5.1 概述概念数据库的设计应该极易于转换为逻辑数据库模式,又容易被用户所理解。概念数 据库设计中最主要的就是采用实体-关系数据模型来确定数
48、据库的结构。数据是表达信息的一种重要的量化符号,是信息存在的一种重要形式。数据模型则是 数据特征的一种抽象。它描述的是数据的共性,而不是描述个别的数据。一般来说,数据 模型包含两方面内容。(1)数据的静态特性:主要包括数据的基本结构、数据间的关系和数据之间的相互约 束等特性。(2)数据的动态特性:主要包括对数据进行操作的方法。在数据库系统设计中,建立反映客观信息的数据模型,是设计中最为重要的,也最基 本的步骤之一。数据模型是连接客观信息世界和数据库系统数据逻辑组织的桥梁,也是数 据库设计人员与用户之间进行交流的共同基础。概念数据库中采用的实体-关系模型,与传 统的数据模型有所不同。实体-关系模
49、型是面向现实世界,而不是面向实现方法的,它主要 是用于描述现实信息世界中数据的静态特性。而不涉及数据的处理过程。但由于它简单易 学,且使用方便,因而在数据库系统应用的设计中,得到了广泛应用。实体-关系模型可以用来说明数据库中实体的等级和属性。以下是实体-关系模型中的 重要标识:在数据库中存在的实体实体的属性实体之间的关系下面就介绍一下实体-关系数据模型中的3个基本要素,即实体、关系和属性的有关基第1章关系数据库设计17.本知识。1.5.2 实体实体是实体-关系模型的基本对象,是现实世界中各种事物的抽象。凡是可以相互区别 开并可以被识别的事、物、概念等对象均可认为是实体。在本书示例的简单的Com
50、pany 数据库中,基本的实体列表如下:工作人员 部门 工程项目 工程项目接收方在绘制实体-关系图(E-R图)时,实体出现在矩形中。如图1-3所示。部门工作人员-_ 工程项目项目接收方图1-3 表示实体的E-R图一般来说,每个实体都相当于数据库中的一个表。上面介绍的实体都是强实体,每个实体都有自己的键。但是在实际领域中,经常存在 一些实体,它们没有自己的键,这样的实体称为弱实体。弱实体中不同的记录有可能完全 相同,难以区别,这些值依赖于另一个实体(强实体)的意义,必须与强实体联合使用。有 关弱实体的具体问题,本书不作具体介绍,有兴趣的读者可以参考相关数据库设计书籍。在创建了实体之后,就可以标识
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100