target
了解数据库的模型
了解数据库的三级模式
了解数据库的二级映像
了解范式
掌握E-R图的绘制
1. 数据库的模型
数据库的模型从数据库技术出现至今一共有3种比较通用的模型,目前使用最多的是关系型数据模型。下面就分别介绍3种模型。
1.1 层次结构模型
最早使用层次结构模型的是IBM公司的IMS (Information Management System),即数据库管理信息系统。
层次结构模型类似于倒置的树型,一个父表可以有多个子表,但是每一个子表都对应着一个父表,例如:一个学校人员的层次结构模型。
由于层次结构模型的结构很难改变,而且在表示表之间的关系时也有一些局限性,所以目 前使用层次结构模型设计数据库是比较少的。
1.2 网状结构模型
网状结构模型是对层次结构模型的改进,使用网状结构模型的代表是DBTG (Data Base Task Group),它是20世纪70年代数据系统语言研究会下属的数据库任务组提出的一个系统方案。
网状结构模型打破了层次结构模型使用的限制,可以更全面地描述数据库中表之间的关系, 可以一个父表没有子表,也可以一个子表有多个父表,还可以设置两个表之间的多种关系。
尽管网状结构模型已经在层次结构模型的基础上 有了一定的改进,但是对数据库的设计者要求很高,必须要非常熟悉数据库才能使用这种网状结构模型。
1.3 关系结构模型
关系结构模型诃以说是在层次结构模型和网状结构模型的基础上发展而来的,是目前使用最多的数据模型。最早给关系结构模型下定义的是E.F.Codd博士,他说:"关系数据结构保护数据,并且允许以一种可以预测并防止差错的方法操作数据”
关系结构模型实际上就是 一个二维表,是由行和列组成的。例如,一个员工信息登记表。
员工编号 | 姓名 | 性别 | 年龄 |
---|---|---|---|
101 | John | 男 | 21 |
102 | Rose | 女 | 23 |
把一行数据称为一个元组,其中一共就有2个元组,把一列数据称为一个字段或属性,其中一共就有4个属性。
2. 三级模式(了解)
数据库的模式(Schema)是对现实世界的抽象,是对数据库中全体数据的逻辑结构和特征的描述。模式反映的是数据的结构及其联系,数据库系统在其内部具有三级模式。
美国国家标准学会(American National Standard Institute, ANSI)的数据库管理系统研究 小组于1978年提出了标准化的建议,将数据库结构分为3级:面向用户或应用程序员的用户级、 面向建立和维护数据库人员的概念级、面向系统程序员的物理级。用户级对应外模式,概念级对应模式,物理级对应内模式。
2.1 外模式
外模式对应于用户级,它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据逻辑的表示。外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那 部分数据。
用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language, DML)对这些数据记录进行操作。
DML语言可以对数据进行4中操作,即创建(Create)、读取(Read)、更新(Update)、删除(Delete)。也把它说成是对数据执行CRUD操作。
2.2 模式
模式对应着概念级,它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图。它是由数据库管理系统提供的数据模式描述语言(Data Description Language, DDL)来描述、定义的,体现并反映了数据库系统的整体观。
DDL语言用于描述数据库中要存储的现实世界实体的语言。包括Drop、Create、Alter、Grant、Revoke、Rruncate等。
2.3 内模式
内模式对应于物理级,它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上存储方式的物理结构,对应着实际存储在外存储介质 上的数据库。
3. 二级映像(了解)
数据库系统的三级模式是对数据的3个抽象级别,它把数据的具体组织留给DBMS管理, 使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中的具体表示与存储。
为了能够 在内部实现这3个抽象层次的联系和转换,DBMS在三个级别之间提供了两层映像:外模式/ 模式映像和模式/内模式映像。
外模式/模式映像使数据具有较高的逻辑独立性。它定义了该外模式与模式之间的对应关系。这些映像定义通常包含在各自外模式的描述中.当模式改变时,DBA要对相关的外模式/ 模式映像
做相应的改变,以使外模式保持不变。应用程序是依据数据的外模式编写的,外模式不变应用程序就没必要修改。
所以,外模式/模式映像功能保证了数据与程序的逻辑独立性。
模式/内模式映像使数据具有较高的物理独立性。它定义了数据库全局逻辑结构与存储结 构之间的对应关系。该映像定义通常包含在模式描述中。当数据库的存储结束了,DBA要对模式/内模式映像
做相应的改变,以使模式保持不变。模式不变,与模式没有直接联系的应用 程序也不会改变。
所以,模式/内模式映像功能保证了数据与程序的物理独立性。
4. 数据库设计的完整性
使用数据库约束就是保证数据库完整性的方法。数据库设计的完整性实际上就是为了保证 数据的正确性。为了保证数据的正确性,在Oracle 11g 中涉及的完整性主要有3个,即实体完整 性、区域完整性、参照完整性。
4.1 实体完整性
实体完整性要求表中的主健字段都不能为空或者重复的值。例如,在学校里每个学生的学 号是唯一的,银行卡的卡号也是唯一的,每个人的身份证号码都是唯一的等。
4.2 区域完整性
区域完整性是保证输入到数据库中的数据是在有效范围内的,可以使用检査约束来设置。例如,输入邮箱的字段要求要有@,输入身份证号码要有15位或18位,输入年龄只能是数字,输入姓名不能有字母等。
4.3 参照完整性
参照完整性可以保证数据库中相关联的表里面数据的正确性,使用外健约束就可以保证参照完整性。确保数据表的参照完整性,就可以避免误删和错加数据。例如,学生选课,如果学生已经选修了某门课程,但是管理员错误地把学生选的课程删除了,那么就会造成学生选修了课程但是无法上课,使用参照完整性设计数据表就会避免类似问题的发生。
5. 范式
关系型数据库的设计标准就是数据库的范式,范式分别有第一范式、第二范式、第三范式。
5.1 第一范式
目前,只要是使用关系型数据库来设计数据库,都能够满足数据库设计的第一范式。第一 范式(1NF)就是数据库表中的字段都是单一属性的,不可再分。这个单一属性可以是数据库中任何一种基本数据类型,如整型、字符型、日期型等。
只要是关系型数据库都会满足第一范式。例如,一个产品信息表 (product),描述产品信息的字段有产品编号、产品名称、产品数量、产品价格、产品描述,那么这个产品信息表就满足第一范式的要求:毎一个字段都是不可再分的单一属性。
字段名 | 数据类型 |
---|---|
产品编号 | 整型 |
产品名称 | 字符型 |
产品数量 | 整型 |
产品价格 | 实型 |
产品描述 | 字符型 |
5.2 第二范式
第二范式是在第一范式的基础上进一步对关系型数据库进行规范,官方给出第二范式的定义是要求在数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖。意思就是说在 第二范式中组合主键(AB)里面的A或B在其他字段不能存在组合重复。为解决这个问题, 通常的做法是不用组合主键,添加一个编号列,作为单一主键即可满足第二范式。如果不想添加编号列,就满足组合主键(AB)里面的A或B在其他字段不能存在组合重复。
例如,设计一个购物信息表,字段包括客户编号、产品名称、产品数量、产品类型、产品价格、客户类型。如果用客户编号和产品名称作为组合主键,那么在组合主键中产品名称和产品类型存在一 定关系,是由产品名称决定产品的类型,所以不符合第二范式的要求,如果不按照第二范式的 要求设计表,就会出现以下4个问题:
(1)数据冗余
同一个产品由n个顾客购买,“产品类型”就重复n-1次,同一个顾客购买了多件产品,那 么就会多次记录顾客的个人信息。
(2)更新异常
若调整了某个产品的类型,数据表中所有行的“产品类型”值都要更新,否则会出现同一 个产品不同类型的情况。
(3)插入异常
假设新进了一个产品,暂时还没有人购买这样,由于没有人购买,产品的名称和类型也 无法记录到数据库中。
(4)删除异常
假设一批顾客把已经购买完的商品退货,这些产品信息就从数据表中删除了。但是,与此同时,产品名称和产品类型等信息也被删除了。这样就导致了删除异常。
为了消除数据冗余、更新异常、插入异常和删除异常,可以把现有的一个表拆分成3张表:
第1张表是产品类型表,表中有产品类型、产品名称。
第2张表是客户信息表,表中有客户编号、客户类型。
第3张表是产品信息表,表中有产品名称、产品类型、产品价格、产品数量。
5.3 第三范式
第三范式是在第二范式的基础上对数据库设计进行规范,第三范式的要求是数据表中不存在非关键字段对任一候选关键字段的传递函数依赖。所谓传递函数依赖,指的是如果存在A决定B、B决定C的决定关系,则C传递函数依赖于A。
因此,满足第三范式的数据库表应垓不存在依赖关系,假定员工信息表为employee (员工编号,姓名,年龄,所在部门,部门电活), 使用员工编号作为员工信息的主键,那么就存在决定关系:员工编号就决定了姓名、年龄、所在部门、部门电话这些字段。从上面的关系可以看出,在表中有一个主键,数据表的设计符合第二范式的要求。但是它不符合第三范式的要求,因为存在决定关系:员工编号就决定了所在部门,所在部门又决定了所在部门的电话,那么就存在了传递函数依赖关系,即员工编号决部门电话,那么也会出现不满足第二范式时的数据冗余和更新、插入、删除异常的情况。为了 满足第三范式的要求,必须把员工信息表拆分成如下两个数据表:
员工表:员工编号、姓名、年龄、所在部门
部门表:部门名称、部门电话。
除了上面的三种范式以外,还有一种范式经常使用,即鲍依斯-科得范式(BCNF)。它说明建立在第三范式的基础上,如果数据库表中不存在任何字段对任一候选关键字段的传递函教依赖,那么就符合BCNF范式。
6. 绘制E-R图设计数据库
E-R (Entity-Relationship)图又叫实体-联系图,是描述现实世界的概念模型。构成E-R 图的基本要素是实体、属性和联系。
6.1 绘制E-R图的基本要素
(1)实体
实体是客观存在并可以相互区别的事物。实体既可以是 人、物,也可以是抽象的概念。例如,一个学生、一个老师、 一个产品都可以认为是实体。
相同类型的实体可以构成一个 实体集。例如,全体学生就是一个实体集。在E-R图中实体一般用矩形表示,矩形框内写明实体的名称。
(2)属性(Attribute)
属性是实体所具有的某一特性,一个实体可由若干个属性来刻画。在E-R图中一般用椭圆形表示,并用无向边将其 与相应的实体连接起来。例如,产品的名称、价格、类型等 都是属性。例如,给老师实体加上属性:姓名、年龄、所教专业、所属院系。
(3)联系(Relationship)
联系,即在信息世界中反映实体内部或实体之间的联系。
实体内部的联系通常是指组成实体的各属性之间的联系,实体之间的联系通常是指不同实体集 之间的联系在E-R图中用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型。实体之间存在着3种联系类型,分别是一对一、一对多、多对多,它们反映到E-R图中即为相应的联系类型,即 1:1、1:n和m:n。
① 一对一关系(1 : 1)
一对一关系是指实体集A与实体集B, A中的毎一个实体至多与B实体集中一个实体有联系, 反之,在实体集B中的每个实体至多与实体集A中一个实体有联系。
例如,给学生排座,“学生” 实体和“座位”实体之间的关系,每一个学生最多可以分得一个座位,同时毎一个座位最多只能有一个学生来坐。
② 一对多关系(1:n)
一对多关系是指实体集A与实体集B中至少有n (n>0)个实体有联系,并且实体集B中每一个实体至多与实体集A中一个实体有联系。
例如,“学生”实体和“班级”实体之间的关系,一个班级里面可以有若干个学生,而每一个学生都属于这个班级。
③ 多对多关系(m : n)
多对多关系是指实体集A中的每一个实体与实体集B中至少m (m>0)个实体有联系,并且实体集B中的每一个实体与实体集A中的至少n (n>0)个实体有联系。
例如,顾客在商场购买商品,顾客与商品之间就是多对多的关系,每一个顾客都可以购买多种商品,而毎一种商品又可以被多个顾客购买。
其实,实体之间的这3种关系,不仅对两个实体有效,也可以表示多个实体之间的关系。
6.2 E-R图绘制实例
绘制一个网上购物系统的E-R图,在网上购物系统中简单分析出顾客、商品、商品类型、 订单4个实体。下面分别绘制每个实体属性图并在最后绘制一个整体的E-R图。
(1)顾客实体属性图
顾客实体主要包括用户编号、姓名、年龄、性别、身份证号、联系方式、送货地址、银行卡卡号8个属性。
(2)商品实体属性图
商品实体主要包括商品编号、商品名称、商品价格、商品数量、商品描述5个属性。
(3)商品类型实体属性图
商品类型实体主要包括商品类型编号和商品类型两个属性。
(4)订单实体属性图
订单实体主要包括订单编号.送货地址、顾客姓名、是否付款、联系方式、所购商品6个属性。
(5)网上购物系统E-R图
在绘制整体的E-R图之前,先要了解一 下网上购物系统的购物流程。
首先由顾客选择要购买的商品,之后把购买商品的列表生成一个订单,然后网站的售后人员会根据订单的地址送 货,在这个网上购物系统里要求一个顾客每次只能生成一个订单。那么,这4个实体之间是什 么关系呢?
商品和顾客之间的关系是多对多的关系,多个商品可以被一个顾客购买,同时多个顾客也可以购买相同的商品;
订单和商品之间的关系是一对多的关系,一个订单是由多个商品组成的,多个商品组成一个订单;
顾客和订单之间的关系是一对多的关系,一个顾客可以生成多个订单,一个订单只能属于一个 顾客;
商品和商品类型之间的关系是一对多的 关系,一个商品属于一种商品类型,一中商品类型可以有多中商品。