一、数据库的4个基本概念
1、数据(Data):数据是数据库中存储的对象。描述事物的符号记录称为数据。数据和关于数据的解释是不可分的。数据的解释是指对数据含义的说明,数据的含义称为数据的语义,数据与其语义是不可分的。
2、数据库(DataBase,DB):数据库是长期存储在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述、存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。数据库中的数据具有永久存储、有组织和可共享三个基本特点。
3、数据库管理系统(DataBase Management System,DBMS):数据库管理系统在数据库建立、运用和维护时对数据库进行统一控制,以保证数据的完整性和安全性,并在多用户同时使用数据库时进行并发控制,在发生故障后对数据库进行恢复。
数据库管理系统是位于用户和操作系统之间的一层数据管理软件。用于科学的组织和存储数据,高效的获取和维护数据。主要功能:
4、数据库系统(DataBase System,DBS):数据库系统是由数据库、数据库管理系统、应用程序和数据库管理员(DataBase Administrator,DBA)组成的存储、管理、处理和维护数据的系统。
二、数据管理技术的三个阶段
人工管理阶段、文件系统阶段、数据库系统阶段
三、数据库系统的特点
1、数据结构化:数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。在文件系统中,文件中的记录内部有结构,但记录的结构和记录之间的联系被固化在程序中,由程序员维护。数据不再仅仅面对某一个应用,而是面向整个系统,不仅数据内部是结构化的,而且整体是结构化的,数据之间是具有联系的。
2、数据的共享性高、冗余度低且易扩充:数据面向整个系统。数据共享可以大大减少数据冗余,节约存储空间,还能避免数据间的不相容性与不一致性。这使数据库系统弹性大,易于扩充。
(1)物理独立性是指用户的应用程序和数据库中数据的物理存储是相互独立的。
(2)逻辑独立性是指用户的应用程序和数据库的逻辑结构是相互独立的。
4、数据由数据库管理系统统一管理和控制:数据库的共享会带来数据库的安全隐患,而且共享是并发的(多用户同时存取数据)。数据库中数据的正确和一致要得到保障。为此,数据库管理系统要提供数据控制功能:
(1)数据的安全性保护,指保护数据以防止不合法使用造成的数据泄密和破坏。
(2)数据的完整性检测, 指数据的正确性、有效性和相容性。
(3)并发控制,对多用户的并发操作加以控制和协调。
(4)数据库恢复,从错误状态恢复到某一已知的正确状态。
四、数据模型
数据模型应满足三方面要求:一是能比较真实地模拟现实世界,二是容易被人理解,三是便于在计算机上实现。
数据模型通常由数据结构、数据操作和数据的完整性约束条件组成(三要素)。
第一类是概念模型,第二类是逻辑模型和物理模型。
概念模型也叫信息模型,按用户的观点对数据和信息建模,主要用于数据库设计。
逻辑模型包括层次模型、网状模型、关系模型、面向对象模型等,按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。
物理模型是对数据最底层的抽象,描述数据在系统内部的表示方法和存取方法,或在磁盘上的存储方法和存取方法,面向计算机系统。
先将现实世界抽象为信息世界,再将信息世界转换为机器世界。
五、概念模型
1、信息世界基本概念
(1)实体(entity),客观存在并可相互区别的事物称为实体。
(2)属性(attribute),实体所具有的某一特性称为属性。
(3)码(key),唯一标识实体的属性集称为码。
(4)域(Domain):属性的取值范围称为该属性的域。
(5)实体型(entity type),用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。如,学生(学号,姓名,性别)就是一个实体型。
(6)实体集(entity set),同一类型实体的集合称为实体集。如,全体学生。
(7)联系(relationship),现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。一对一,一对多和多对多等。
2、概念模型的表示方法:实体-联系方法(E-R)
实体-联系方法(Entity-Relationship Approach),E-R方法也叫E-R模型。E-R图(E-R diagram)。
六、数据库系统的三级模式结构与二级映像
1、模式(schema): 模式也称逻辑模式,是数据库全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。是型的描述。反映的是数据的结构及其联系,模式是相对稳定的,是数据库数据在逻辑上的视图,一个数据库只有一个模式。
2、外模式(external schema): 外模式也称子模式或用户模式,局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一个应用有关的数据的逻辑表示。(对应于某一应用)。
外模式通常是模式的子集,一个数据库可以有多个外模式,但一个程序只能使用一个外模式。
3、内模式(internal schema): 内模式也称存储模式,它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。一个数据库只有一个内模式。
4、外模式/模式映像: 模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。
外模式/模式映像保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
5、模式/内模式映像: 保证了数据与程序的物理独立性,简称数据的物理独立性。
关系:关系模型的数据结构非常简单,只包含单一的数据结构——关系。
域:一组具有相同数据类型的值的集合。
笛卡儿积:域上的一种集合运算。
定义:给定一组域D1,D2,...,Dn,允许其中某些域是相同的,D1,D2,...,Dn的笛卡儿积为:D1xD2 x...x Dn={ (d1,d2,...,dn) | di,i=1,2,...,n}
其中,每一个元素(d1,d2,...,dn)叫作一个n元组,或简称为元组(tuple),元素中的每一个值di叫做一个分量(component)。
一个域允许的不同取值个数称为这个域的基数。
若Di(i=1,2,...,n)为有限集,其基数为mi(i=1,2,...,n),则其笛卡儿积的基数m1*m2*…mn
1关系:笛卡儿积的有限子集。
定义:D1xD2x...xDn的子集叫做在域D1,D2,...,Dn上的关系,表示为:
R(D1,D2,...,Dn) (R表示关系的名字,n是关系的目或度(degree))
当n=1:单元关系或一元关系
当n=2:二元关系 (n目关系必有n个属性)
关系中的每个元素是关系中的元组,通常用t表示。
关系是一张二维表,表中的每一行对应一个元组,表中的每列对应一个域。域可相同,为了区分得给每列起名,称为属性。
若关系中的某个属性组的值能唯一标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系中有多个候选码,则选定其中一个为主码。候选码的属性称为主属性。
一般来说,笛卡儿积的某个真子集才有实际意义。
关系的三种模式:基本关系(又称基本表或基表)、查询表和视图表。
(1)基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示
(2)查询表:查询结果对应的表
(3)视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
基本关系5种特质:
(1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
(2)不同的列可出自同一个域,其中的每一列为一个属性,不同属性要给予不同属性名。
(3)列或行的顺序无所谓,即列的次序或行的次序可以任意交换。
(4)任意两个元组的候选码不能取相同的值。
(5)分量必须取原子值,即每一个分量都必须是不可分的数据项。
关系模式(Relation Schema)是型,关系是值
关系模式:是对关系的描述,是静态的、稳定的。
关系:关系模式在某一时刻的状态或内容,动态的、随时间不断变化的。
一个关系模式应当是一个五元组:R(U,D,DOM,F)
R:关系名,它是符号化的元组语义
U:一组属性
D:属性组中所来自的域
DOM:属性到域的映射
F:属性组U上的一组数据依赖
其中D和DOM对模式设计关系不大,所以可以当做三元组:R(U,F)
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
三大要素:运算对象(关系)、运算符(集合运算符和专门的关系运算符)和运算结果(关系)
五种基本操作:
并(Union):设关系R和关系S具有相同的元数n,且相应的属性取自同一个域,则关系R和关系S的并由属于R或属于S的元组组成,其结果仍为n元的关系
差(Difference):设关系R和关系S具有相同的元数n,且相应的属性取自同一个域,则关系R和关系S的差由属于关系R而不属于关系S的元组组成,其结果仍为n元的关系
笛卡尔积(Cartesian Product):设关系R和关系S的元数分别为r和s。定义R和S的笛卡尔积是一个(r+s)元的元组集合,每个元组的前r个分量来自R的一个元组,后s个分量来自S的一个元组
投影(Projection):对关系进行垂直分割,消去某些列,并重新安排列的顺序,再删去重复元组
选择(Selection):根据某些条件对关系做水平分割,即选择符合条件的元组
四种组合操作:
交(Intersection):设关系R和关系S具有相同的元数n,且相应的属性取自同一个域,则关系R和关系S的交由既属于关系R又属于关系S的元组组成,其结果仍为n元的关系。关系的交可以由关系的差来表示。
联接(Join):联系操作是笛卡尔积和选择操作的组合。
自然联接(Natural Join):是一种特殊的等值联接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。
一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
两个关系R和S在做自然连接时,选择两个关系在公共属性上值相等的元组构成新的关系。此时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,同样,S中某些元组也可能被舍弃。这些被舍弃的元组称为悬浮元组。如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(NULL),那么这种连接就叫做外连接。只保留左边关系的悬浮元组叫左外连接,右则右外连接
除(Division):设两个关系R和S的元数分别为r和s(设r>s>0),那么R除S是一个(r-s)元的元组的集合。它是满足下列条件的最大关系:其中每个元组t与S中的每个元组u组成的新元组
第03章 关系数据库标准语言SQL
SQL特点:综合统一,高度非过程化(只需要提出“做什么”,不需要指明“怎么做”,因而无须了解存储路径。),面向集合的操作方式,以同一种语法结构提供多种使用方式,语言简洁易学易用。
DML(Data Manipulation Language):数据操作语言
关键字:insert、delete、update, select
插入、删除、更改数据
DDL(Data Denifition Language):数据定义语言
关键字:create、drop、alter
创建、删除、更改数据库对象(表、视图、索引、触发器、存储过程等)
TCL(Trasactional Conrtol Language):事务控制语言
关键字:commit、rollback
用来提交和回滚事务
DCL(Data Conrtol Language):数据控制语言
关键字:grant、revoke
用来设置或更改数据库用户或角色权限
基本表:本身独立存在的表,SQL中一个关系就对应一个基本表,一个(或多个)基本表对应一个存储文件,一个表可以带若干索引
视图:从一个或几个基本表导出的表,数据库中只存放视图的定义而不存放视图对应的数据
视图是一个虚表,用户可以在视图上再定义视图
创建数据库:
CREATE DATABASE <数据库名>;
创建基本表:
CREATE TABLE <表名>(
<列名> <数据类型>[ <列级完整性约束条件> ],
<列名> <数据类型>[ <列级完整性约束条件>] , …
<表级完整性约束条件> ] );
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
1、表的常用的数据类型
2、表的常见列级完整性约束条件
3、表的常见表级完整性约束条件
修改基本表:
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ];
删除基本表:
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:删除表是有限制的。欲删除的基本表不能被其他表的约束所引用;如果存在依赖该表的对象,则此表不能被删除。
CASCADE:删除该表没有限制。在删除基本表的同时,相关的依赖对象一起删除
数据查询:
SELECT [ALL|DISTINCT] <目标列表达式>[,…,<目标列表达式>] FROM <表名或视图名>[,…, <表名或视图名> ] [ WHERE <条件表达式> ][ GROUP BY <列名1> [ HAVING <条件表达式> ] ][ ORDER BY <列名2> [ ASC|DESC ] ];
WHERE子句常用查询条件
like字符匹配:’’ % ‘‘代表任意长度;’’ _ ''代表单一字符。
聚集函数
聚集函数不能当WHERE的子句条件,HAVING和SELECT里都可以用。
select子句:指定要显示的属性列
from子句:指定查询对象(基本表或视图)
where子句:指定查询条件
group by子句:对查询结果按指向列的值分组,该属性列值相等的元组为一个组,通常会在每组中作用聚集函数。
having短语:只有满足指定条件的组才予以输出
order by子句:对最终查询结果表按指定列值的升序(asc)或降序(desc)排序。
整个select语句的含义是:根据where子句的条件表达式从from子句指定的基本表、视图或派生表中找出满足条件的元组,再按select子句中的目标列表达式选出元组中的属性值形成结果表,然后根据group by (having)、order by、distinct等对结果表做进一步处理后返回最终的结果表。
1、查询所有列时,<目标列表达式>指定为*。<目标列表达式>可以是表中的属性列,也可以是表达式,还可以是字符串常量。用户可以通过指定别名来改变查询结果的列标题。
2、选择表中元组时可以指定distinct,即查询结果会消除重复行。默认是all(不管重复行,全部显示在查询结果表中)。
3、字符匹配之通配符:
%(百分号)表示任意长度(可为0)的字符串,例如a%b,表示以a开头,以b结尾的任意长度的字符串。
_(下横线)表示任意单个字符,例如a_b,表示以a开头,以b结尾的长度为3的任意字符串。
注意:如果用户要查询的字符串本身就含有通配符%或_,这时就要使用 escape'<换码字符>' 短语对通配符进行转义。
4、涉及空值的查询,"IS"不能用等号(=)代替。
and的优先级高于or,当条件比较复杂时建议书写时带上括号。
5、当聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值。聚集函数只能用于select子句和group by中的having子句。
6、where子句与having短语的区别:对象不同。
where子句作用于基本表或视图,从中选择出满足条件的元组,having短语作用于组,从中选择出满足条件的组。
1、查询同时涉及两个以上的表称之为连接查询,是关系数据库最主要的查询。主要包括等值与非等值查询、自身连接、外连接及多表连接。
2、等值与非等值连接查询:where子句用来连接两个表的条件称为连接条件,当连接运算符为=时即称为等值连接,否则非等值连接。连接条件的列名称为连接字段,连接条件中的各连接字段类型必须是相容的,名字可不相同。
3、自身连接:连接操作可以是一个表与其自己进行连接。此时注意要给表取别名。
4、外连接:连接后把悬浮元组保存在结果关系中。有左外连接和右外连接。
5、多表连接:连接操作可以是两个以上的表进行连接。执行时一般是先进行两个表的连接操作,再将其连接结果与第三个表进行连接,以此类推。
一个select …from…where语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称嵌套查询。
SQL语言允许多层嵌套查询,子查询的select语句中不能使用order by子句,order by子句只能对最终查询结果排序。用户可以用多个简单查询构成复杂的查询,从而增强SQL的查询能力。
1、带有IN谓词的子查询
子查询的结果往往是一个集合。
不相关子查询:子查询的查询条件不依赖于父查询。
相关子查询:子查询的查询条件依赖于父查询。整个查询语句称为相关嵌套查询。求解时需反复求值。
2、带有比较运算符的子查询
指父查询与子查询之间用比较运算符进行连接。子查询返回单值时可以用比较运算符。
3、带有any或all的子查询
子查询返回多值时用ANY或ALL修饰符,而使用any或all谓词时则必须同时使用比较运算符。
在实际应用中,用聚集函数实现子查询通常比直接用any或all查询效率要高,any、all与聚集函数的对应关系如下表:
4、带有exists谓词的子查询
带有exists谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false"。由其引出的子查询的目标列表达式通常都用 *,所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用EXISTS谓词的子查询等价替换。
④集合查询
select语句的查询结果是元组的集合,所以多个select语句的结果可进行集合操作。主要包括并操作union、交操作intersect和差操作except。
⑤基于派生表的查询
子查询不仅可以出现在where子句,还可以出现在from子句,这时子查询生成的临时表成为主查询的查询对象。
注意派生表要指定属性列,但若子查询中没有聚集函数则可以不指定,子查询select子句后面的列名为其默认属性。
说明:通过from子句生成派生表,必须为派生关系指定一个别名!
数据更新操作有三种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。
1、插入数据:插入元组+插入子查询结果
into子句中没有出现的属性列,新元组在这些列上取空值,但在定义时not null的属性列不能取空值。如若into未指定属性列则要在每个属性列上均有值,空即为NULL。
字符串常数要用单引号(英文符号)括起来。
子查询可嵌套在insert语句中用以生成要插入的批量数据。(批量插入)
2、修改数据
where子句+条件,满足条件则修改该元组,若无where子句则修改表中所有元组。
子查询可嵌套在update语句中用以构造修改的条件。
3、删除数据
where子句+条件,满足条件则删除该元组,若无where子句则删除表中所有元组。
delete语句删除的是表中的数据,而不是关于表的定义。
子查询可嵌套在delete语句中,用以构造执行删除操作的条件。
关系数据库管理系统在执行增删改语句时会检查该操作是否破坏表上已定义的完整性规则:
视图:从一个或多个基本表中导出的表,视图是一个虚表,数据库中只存放视图的定义,视图中的数据仍然存储在原来的基本表中。一旦基本表数据发生变化,从视图查询到的数据也会随之变化。可以在视图上再创建一个视图。
视图的作用:
创建视图:CREATE VIEW <视图名> AS <子查询> [WITH CHECK OPTION];
删除视图:DROP VIEW <视图名>;
索引:为表提供多种存取路径,加快查找速度。常见索引类型有顺序文件上的索引、B+树索引、散列索引、位图索引等,在执行查询时系统会自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引。索引是关系数据库管理系统的内部实现技术,属于内模式的范畴。建立索引能加快查询速度,一个表上可以有多个索引,表更新时,索引要进行维护,这会增加数据库负担,所以索引不能太多。
1、建立索引
create [unique] [cluster] index <索引名> on <表名> (<列名> [<排序方式>] [,(<列名> [<排序方式>] …]);
unique:表示索引的每个值只对应唯一的数据记录。
cluster :表示该索引是聚簇索引。
排序方式:ASC (升序),DESC(降序)
聚簇索引:把一些元组集中存放在连续的物流块中,能显著减少访问磁盘的次数。一个数据库可以建立多个聚簇,一个关系只能加入一个聚簇。建立与维护聚簇的开销相关大。
2、修改索引
alter index <旧索引名> rename to <新索引名>;
3、删除索引
drop index <索引名>;
1.数据的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏
2.从四个方面来描述安全性级别划分的指标,即安全策略、责任、保证和文档
3.安全性控制的常用方法:用户身份鉴别、多层存取控制、审计、视图和数据加密技术
4.用户身份识别分为:静态口令鉴别、动态口令鉴别、生物特征鉴别、智能卡鉴别
5.存取控制机制主要包括定义用户权限和合法权限检查两部分
6.用户权限由两个要素组成:数据库对象和操作类型
7.审计功能把用户对数据库的所有操作自动记录下来放入审计日志
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...[ON <对象类型> <对象名>] TO <用户>[,<用户>]...[WITH GRANT OPTION];
WITH GRANT OPTION子句:指定:可以再授予(就授权给这个用户,它可以再去授权给别的用户),没有指定:不能传播
REVOKE:授予的权限可以由DBA或其他授权者用REVOKE语句收回
REVOKE语句的一般格式为:
REVOKE <权限>[,<权限>]...[ON <对象类型> <对象名>] FROM <用户>[,<用户>]...;
数据库角色:被命名的一组与数据库操作相关的权限。角色是权限的集合,可以为一组具有相同权限的用户创建一个角色,简化授权的过程。
创建角色:CREATE ROLE <角色名>
数据的完整性事为了防止数据库存在不符合语义的数据 ,也就是防止数据库中存在不正确的数据。而安全性事保护数据库防止恶意破坏和非法存取。
数据库的完整性是指数据的正确性和相容性。数据库完整性需要满足的功能:提供定义完整性约束条件的机制、提供完整性检查的方法、进行违约处理。
实体完整性定义:CREATE TABLE中用PRIMARY KEY定义
插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:
①检查主码值是否唯一,如果不唯一则拒绝插入或修改
②检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
系统会自动为主码建立一个主索引,方便检索,索引一般是B+树。
参照完整性定义:在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码
参照完整性违约处理:
①拒绝(NO ACTION)执行:默认策略
②级联(CASCADE)操作:删除一个元组,其他相关的会级联删除
③设置为空值(SET-NULL):对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值
用户定义完整性,在属性上的定义:CREATE TABLE时定义
①列值非空(NOT NULL):
②列值唯一(UNIQUE):
③检查列值是否满足一个布尔表达式(CHECK):
一个好的模式应当不会发生插入异常、删除异常和更新异常,数据冗余尽量减少。
数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间的相等与否体现出来的数据间相关联系。是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。
函数依赖:若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y
如果X→Y,但Y 不是 X的子集,则称X→Y是非平凡的函数依赖
在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’ →Y, 则称Y对X完全函数依赖。若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。
在R(U)中,如果X→Y(Y不是X的真子集),Y决定不了X,Y→Z(Z是Y的真子集),则称Z对X传递函数依赖。
1NF的定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。
2NF:若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。
3NF:若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
BCNF:若R∈BCNF:所有非主属性对每一个码都是完全函数依赖,所有的主属性对每一个不包含它的码,也是完全函数依赖,没有任何属性完全函数依赖于非码的任何一组属性。
一个低一级范式的关系模式通过分模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程叫规范化。各种范式之间的关系:
范式判断:第一范式→如果每一个非主属性完全函数依赖于码→第二范式→消除非主属性传递依赖于码→第三范式→消除主属性对码的部份依赖、传递依赖→BCNF范式。
在关系模式DB中,任何二元关系模式的最高范式必定是BCNF。
对于各种范式之间的关系如下: 5NF⊂ 4NF⊂ BCNF ⊂3NF ⊂ 2NF⊂ 1NF 。
E-R图:实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
构成E-R图的基本要素是实体型、属性和联系,其表示方法为:
实体型(Entity):用矩形表示,矩形框内写明实体名。
属性(Attribute):用椭圆形表示,并用无向边将其与相应的实体连接起来。
联系(Relationship):用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。
E-R图向关系模型的转换一般遵循如下原则:
实体的转换
一个实体型转换为一个关系模式,实体名成为关系名,实体的属性成为关系的属性,实体的码就是关系的码。
联系的转换
1、一个1:1联系,可以将联系转换成一个独立的关系模式,也可以与联系的任意一端对应的关系模式合并。
如果转换成独立的关系模式,则与该联系相连的各实体的码及联系本身的属性均转换成新关系的属性,每个实体的码均是该关系的候选码;
如果将联系与其中的某端实体对应的关系模式合并,则需在该关系模式中加上另一关系模式的码及联系自身的属性。
2、一个1:n联系,可以将联系转换成一个独立的关系模式,也可以与n端对应的关系模式合并。
如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系自身的属性均转换成新关系模式的属性,n端实体的码成为新关系的码;
如果将其与n端实体对应的关系模式合并,则将1端关系的码和联系的自身的属性加入到n端实体对应的关系模式中,这时n端实体对应的关系模式的码仍然保持不变。
3、对于m:n联系,将其转换成一个独立的关系模式。与该联系相连的各实体的码及联系自身的属性均转换成新关系的属性,而新关系模式的码为各实体的码的组合。
第10章 事务的概念
事务定义:
①一个数据库操作序列
②一个不可分割的工作单位
③恢复和并发控制的基本单位
事务和程序:
①在关系数据库中,一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序。
②一个程序通常包含多个事务。
当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务
提交:执行完SQL,数据库在一个最近状态。
回滚:回滚到某一个正常的状态。
事物的4个特性:A(原子性)C(一致性)I(隔离性)D(持续性)。
原子性:事物是数据库的逻辑工作单位,事物中包括的诸操作要么都做,要么都不做。
一致性:事物的执行结果必须是数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事物的执行不能被其他事物干扰。
持续性:指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
保证事务ACID特性是事务管理的重要任务。事务ACID特性可能遭到破坏,其原因有:多个事物并行运行,不同事物的操作交叉执行。其次是事务在运行过程中被强行停止。
各类故障,对数据库的影响有两种可能性:
①是数据库本身被破坏
②是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。
恢复机制:数据转储(backup)、登陆日志文件(logging)
第11章 并发控制
事务并发执行带来的问题:
①会产生多个事务同时存取同一数据的情况
②可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性
封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
基本封锁类型
排它锁(Exclusive Locks,简记为X锁)(可读可写)
共享锁(Share Locks,简记为S锁)(读)