一、数据模型概述
数据模型(data model)也是一种模型,他是对现实世界数据特征的抽象。 由于计算机不可能直接处理现实世界中的具体事物,所以人们必须事先把具体事物转换成计算机能够处理的数据。 在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。
数据模型分类:
根据模型应用的不同目的,可以将这些模型划分为两大类:
- 第一类:概念模型
按用户的观点来对信息世界的数据进行建模,完全不涉及信息在计算机中的表示,主要用于数据库设计。 - 第二类:逻辑模型
逻辑模型是按计算机系统的观点,面向数据库的逻辑结构建模,主要包括层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。主要用于DBMS的实现。
数据处理和切换的两级抽象过程
1.概念模型
按用户的观点来对信息世界的数据进行建模,完全不涉及信息在计算机中的表示,主要用于数据库设计。
建立概念模型的目的 :
- 将用户关于企业的描述及业务的需求等信息准确的纪录下来,按用户的观点对数据和信息建模。
- 这类模型强调其语义表达能力,它要能较方便地、直观地表达应用中各种语义知识,如被描述对象的意义和相互关系等。
- 用户和数据库设计人员之间进行交流与沟通的工具。
1)实体:现实世界中客观存在并可以相互区别的事物称为实体。
2)联系:实体之间的关联关系。
3)属性:属性用来描述实体或联系的特性。
2.逻辑模型
在数据库的发展过程中,先后出现以下几种逻辑模型:
层次模型:使用树型结构来描述现实世界中的对象及其联系。(早期模型)
网状模型:使用网状结构来描述现实世界中的对象及其联系。(早期模型)
关系模型:使用二维表结构来描述现实世界中的对象及其联系。(主流)
面向对象数据模型(非主流模型)
对象关系数据模型(非主流模型)
半结构化数据模型(非主流模型)
(1)层次模型
用树形结构来表示各类实体以及实体间的联系。
层次模型是数据库系统中最早出现的数据模型。
满足下面两个条件的基本层次联系的集合为层次模型:
- 有且只有一个结点没有双亲结点,这个结点称为根结点;
- 根以外的其它结点有且只有一个双亲结点。
层次模型中的几个术语:根结点,双亲结点,兄弟结点,叶结点
特点:
- 节点代表记录、连线表示关系;
- 结点的双亲是唯一的;
- 只能直接处理一对多的实体联系;
- 任何记录值只有按其路径查看时,才能显出它的全部意义;
- 没有一个子女记录值能够脱离双亲记录值而独立存在。
优点:
- 层次模型的数据结构比较简单清晰。
- 联系在DBMS中大多用指针实现,效率高。
缺点:
- 不适合表示非层次性联系,例如,结点之间的多对多联系表示不自然;
- 对插入和删除操作的限制多,应用程序的编写比较复杂;
- 查询子女结点必须通过双亲结点。
(2)网状模型
采用网状图结构作为数据的组织方式。
特点:
满足下面两个条件的基本层次联系的集合:
- 允许一个以上的结点无双亲;
- 一个结点可以有多于一个的双亲。
优点
- 能够更为直接地描述现实世界,如一个结点可以有多个双亲;
- 良好的性能,存取效率较高。
缺点
- 结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握;
- 数据操作复杂,用户不容易使用;
二、关系模型
域:是一组具有相同数据类型的值的集合。
笛卡儿积:给定一组域D1、D2、…、Dn,这些域中可以有相同的。 D1、D2、…、Dn的笛卡尔积为:D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di,i=1,2,…,n},笛卡尔积可表示为一个二维表。表中每行对应一个元组,表中每列对应一个域。
关系:D1×D2×…×Dn 的子集叫做在域 D1,D2,…,Dn上的关系,表示为: R(D1, D2 …, Dn) R是关系名,n为关系的属性列个数。关系是笛卡尔积的有限子集,所以关系也是一个二维表。
关系模型是使用二维表的集合来描述数据以及数据之间联系的模型,是最重要的一种数据模型,也是目前主要采用的数据模型。
从用户观点看,关系模型由一组关系组成。每个关系的数据结构是一张规范化的二维表。
1.关系的基本结构:
- 关系(Relation):一个关系对应通常说的一张表,每个关系都有一个名称。
- 元组(Tuple):表中的一行即为一个元组,也称一条记录。
- 属性(Attribute):表中的一列为一个属性(字段),每一个属性的名称即属性名。
- 域(Domain):一组具有相同数据类型的值的集合。属性的取值范围来自某个域。
- 分量:元组中的一个属性值。
关系必须是规范化的,满足一定的规范条件
最基本的规范条件:关系的每一个分量必须是一个不可分的数据项。
关系模型术语:关系的码/关系的键
超码:关系的一个属性或一组属性集合,其值可以唯一标识关系中的每一个元组。
候选码:关系中的某一属性或属性组的值能唯一地标识一个元组,而其真子集不能,则称该属性或属性组为候选码。
主码/主键:若一个关系有多个候选码,则选定其中一个为主码。
主属性:候选码的所有属性称为主属性。
非主属性:不包含在任何候选码中的属性称为非主属性或非码属性。
外码/外键:设F是基本关系R的一个或一组属性,但不是关系R的主码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码(外键)
关系的基本性质:
- 列是同质的,每一列中的分量是同一类型的数据,来自同一个域。
- 不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名。
- 行/列的顺序无所谓,行/列的次序可以任意交换。
- 任意两个元组的候选码(的值)不能相同。
- 分量必须取原子值,每一个分量都必须是不可分的数据项。
关系模式与关系实例:型与值
关系模式:对关系的描述,简写为 R(U),R为关系名,U为关系中所有属性的集合,由属性序列和各属性对应的域组成。
例如:
- “图书”关系模式:Books (bookid, title, isbn, author, unitprice, ctgcode)
- 学生关系模式:学生(学号,姓名,性别,出生日期,班级,专业,学院)
关系实例:关系模式在某一时刻对应的具体关系。关系实例的名字用小写字母表示。books(Books)表示关系模式Books上的一个具体的关系实例books。
含有主键和外键依赖的关系模式可以用模式图来表示。
关系模式之间的联系通过从参照关系模式中外键属性到被参照关系模式的主键属性的箭头来表示。
在实际应用中,有时会将属性的主键、外键特性通过关系模式进行描述。主键属性加下画线,外键属性通过[FK]表示。
例如:
- Categories (ctgcode, ctgname)
- Books (bookid, title, isbn, author, unitprice, ctgcode[FK])
- Customers (cstid, cstname, telephone, postcode, address, emailaddress, password)
- Orders (orderid, orderdate, shipdate, cstid[FK])
- Orderitems (orderid[FK], bookid[FK], quantity, price)
典型的关系数据库系统:Oracle、SQL Server、SQLite、PostgreSQL、DB2、MySQL
2. 关系操作:
操作类型
- 数据查询 选择、投影、连接、除、并、交、差、笛卡尔积等
- 数据更新 插入、删除、修改
- 查询的表达能力是其中最主要的部分
操作特点
集合操作方式,即操作的对象和结果都是集合,一次一集合。
相应地,非关系数据模型的数据操作方式:一次一记录。
关系数据语言
关系代数语言 :用对关系的运算来表达查询要求,典型代表:IBM-实验性系统ISBL
关系演算语言:用谓词来表达查询要求
- 元组关系演算语言 谓词变元的基本对象是元组变量,典型代表:APLHA, QUEL
- 域关系演算语言 谓词变元的基本对象是域变量,典型代表:QBE
具有关系代数和关系演算双重特点的语言 典型代表:SQL
3. 关系的完整性
- 关系的完整性是指关系数据库中存储的数据要是有意义的或正确的。
- 把数据库中符合现实世界语义、反映当前实际情况的数据叫做正确的数据。
- 通过对关系(二维表)中取值的约束,可以保证数据库的完整性,保证数据的正确性。
(1)实体完整性
实体完整性是指实体的唯一性和可区分性。
实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。( “空值”:不知道,不存在或无意义的值。)
实体完整性规则主要保证实体的唯一性和可区分性。
(2)参照完整性
若属性F是基本关系R的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须为: 取空值或者等于S中某个元组的主码值。
(3)用户定义的完整性
用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
用户定义的完整性没有统一的规则,由数据库设计人员根据具体应用中数据的语义要求来创建。
关系的完整性
- 实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,由DBMS自动支持。
- 在DBMS中设置表的主码(主键),实体完整性规则自动生效。
- 在DBMS中设置表的外码(外键),参照完整性规则自动生效。
约束:
附加在表上,保证数据库完整性的一种数据库对象
主键约束:主键约束(PRIMARY KEY)是在表中定义一个主键来唯一确定表中的每一行记录。主键可以定义在单列上,也可以定义在多列上。该约束通过主键来强制实体完整性。
特点:
- 每个表最多只能定义一个主键约束,外键约束使用它作为维护数据完整性的参考点。
- 主键约束所在列不允许输入重复值。如果主键约束由两个或两个以上的列组成,则该组合的取值不重复。
- 在主键约束中定义的所有列都必须定义为不空(NOT NULL)。
- 关系模型理论要求为每个表定义一个主键,但MySQL并没有这样的要求,可以创建一个没有主键的表,但是从安全角度考虑应该为每个表指定一个主键。
外键约束:外键约束(FOREIGN)是指用于建立和加强两个表之间的联接的一列或多列,即在某一列或多列的组合上定义外键约束,这些列值参考某个表中的主键约束列。该约束强制参考完整性。 定义主键约束的表称之为主键表或父表,定义外键约束的表称之为外键表或子表,外键表的被约束列的取值必须是主键表的被约束列的值或为空。
特点:
- 每个表可以定义多个外键约束。
- 临时表不能建立外键约束。
- 外键表中被约束的列必须和主键表中被约束的列数据类型一致、长度一致。
- 外键约束的主要目的是控制可以存储在外键表中的数据,但它还可以控制对主键表中数据的更改。
- 根据参照动作,可以控制父表数据的删除
三、关系代数
(1)关系代数 一种抽象的查询语言,用对关系的运算来表达查询。
(2)关系代数运算的三个要素: 运算对象:关系;运算结果:关系;运算符:四类
(3)关系运算符
- 集合运算符(∩ - ∪ ×) :将关系看成元组的集合;运算是从关系的“水平”方向即行的角度来进行。
- 专门的关系运算符(σ π ÷) :不仅涉及行而且涉及列。
- 比较运算符(< > ≥ ≤ = ≠) :辅助专门的关系运算符进行操作。
- 逻辑运算符(∧ ∨ ┓) :辅助专门的关系运算符进行操作。
(4)关系代数运算的分类:按运算符分类
- 传统的集合运算: 并、差、交、广义笛卡尔积
- 专门的关系运算: 选择、投影、连接、除
传统的集合运算1. 并、差、交:
R和S满足的条件:
- 具有相同的目n(即两个关系都有n个属性)。
- 相应的属性取自同一个域。
- R∪S:仍为n目关系,由R和S的全部元组组成,R∪S = {t | t∈R∨t∈S }
- R - S:仍为n目关系,由属于R而不属于S的所有元组组成。 R-S = {t | t∈R∧t∉S }
- R∩S:仍为n目关系,由同时属于R和S的元组组成,R∩S = {t | t∈R∧t ∈S },R∩S = R–(R-S)
传统的集合运算2.广义笛卡尔积
R:n目关系,k1个元组。
S:m目关系,k2个元组。
R×S :
列:(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。
行:k1×k2个元组
专门的关系运算3:选择、投影、连接
选择:在关系R中选择满足给定条件的诸元组,其表示形式为: σF(R)={t|t∈R ∧F(t)=‘真’}
(F:选择条件,是一个关系表达式,基本形式为: X1θY1)
其中:
- θ:运算符(>,≥,<,≤,=或<>)
- X1,Y1等:属性名、常量、简单函数;属性名也可以用它的序号来代替。
- 在基本的选择条件上可以进一步进行逻辑运算,即进行求与(∧)、或(∨) 、非( ┓)。
例:
投影:从R中选择出若干属性列组成新的关系。记作如下图,其中A为R中的属性列。
投影操作主要是从列的角度进行运算。
投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)。
例如: 1.查询学生的姓名和所在学院。 2.查询学生关系中都有哪些学院。 3.查询所有女同学的学号和姓名。
连接:
θ连接:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
- A和B:分别为R和S上度数相等且可比的属性组。
- θ:比较运算符 。
连接运算从R和S的广义笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组。
等值连接:θ为“=”的连接运算称为等值连接 。
从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为
例如:
自然连接:一种特殊的等值连接。若R和S具有相同的属性组B,U为R和S的全体属性集合,则自然连接记作:
特殊之处在于:1.要求两个关系进行比较的属性必须是同名的属性组,因此如果两个关系没有相同属性无法做自然连接; 2.在等值连接的结果中去掉重复的属性列。
- 悬浮元组:把在做自然连接时被舍弃的元组称为悬浮元组。
- 全外连:如果把悬浮元组也保存在自然连接的结果关系中,而在其它属性上填空值,那么这种连接就叫做全外连(full outer join)。
- 左外连:如果只保留左边关系R中的悬浮元组就叫做左外连(left outer join)。
- 右外连:如果只保留右边关系S中的悬浮元组就叫做右外连(right outer join)。
例: