体不能取空值
参照完整性规则:外键要么取空值,要么等于被参照关系中某个元组的主码值。 7、域完整性约束(用户有定义的完整性):对其他属性值域的约束,也称为域完整性规则,包括数据类型、精度、取值范围、是否允许空值等。 8、关系代数(了解操作的执行结果)
并、差、笛卡儿积、投影和选择为五种基本运算。
9、传统的集合运算包括并、交、差和广义笛卡儿积4种运算。
10、专门的关系运算包括:对单个关系进行垂直分解(投影操作)或水平分解(选择操作)和对多个关系进行结合(连接操作)等。 11、广义投影
赋值、外连接(左外连接、右外连接)、半连接,聚集:G表示,外部并
第六章 关系数据库标准语言SQL
1、SQL(Structured Query Language)称为结构化查询语言,SQL已经成为关系数据库领域中的一种主流语言,1987年被国际标准化组织(ISO)采纳为国际标准 1992年公布了SQL92(SQL2),1999年公布了SQL93(SQL3,对象-关系SQL),2003年公布SQL2003(SQL4)
2、SQL 特点:SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体 综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构提供两种使用方式(自含式和嵌入式SQL)、语言简洁,易学易用。
3、SQL数据库体系结构:外模式对应于视图和部分基本表、模式对应于基本表,内模式对应于存储文件
基本表是本身独立存在的表,一个关系就是一个基本表(存放实际数据),行对应元组,列对应属性;一个基本表可以跨一个或多个存储文件存放,一个存储文件可以存放多个基本表;所有基本表的集合构成了模式;基本表是模式和外模式的一部分。
一个SQL表可以是一个基本表,也可以是一个视图。视图是一个或几个基本表导出的表,数据库中存放视图的定义,视图的数据仍然在基本表中。视图是一个虚表,是外模式的一部分。
一个SQL表可以有若干索引,索引放在存储文件中。存储文件的逻辑结构组成了SQL数据库的内模式。物理结构由操作系统管理,对用户透明。
SQL用户可以是一个应用程序,可以一个SQL用户。
4、SQL的数据类型:预定义数据类型、构造数据类型、用户定义数据类型
5、基本的SQL定义语句:关系数据库的基本对象是模式、表、视图、索引和域 基本对象 模式 基本表 视图 创建 CREATE SCHEMA CREATE TABLE CREATE VIEW 删除 DROP SCHEMA DROP TABLE DROP TABLE 修改 ALTER TABLE 索引 域 CREATE INDEX CREATE DOMAIN DROP INDEX DROP DOMAIN 6、基本操作语句 (1)模式的定义与删除 Create Schema <模式名> AUTHORIZATION <用户名>
Drop Schema <模式名>|CASCADE|RESTRICT
(2)基本表的操作:创建:CREATE TABLE[模式名.]<表名>(<列名><数据类型>(列级完整性约
束〕
[,<列名><数据类型>[列级完整性约束]? 〔,<表级完整性约束>〕);
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件 CREATE TABLE S_SC_C.SC
(S# CHAR(8),C# CHAR(8),GRADE INT NOT NULL,
PRIMARY KEY (S#,C#),FOREIGN KEY(S#) REFERENCES STU(S#) );
PRIMARY KEY (S#,C#),FOREIGN KEY(S#) REFERENCES STU(S#)为表完整性约束 修改:ALTER TABLE<表名>
「ADD<新列名><数据类型>[完整性约束〕〕 [DROP <列名>][<完整性约束名>]〕 [MODIFY<列名><数据类型>」;
删除:当某个基本表不再需要时,可以用DROP TABLE语句进行删除,其格式为: DROP TABLE<表名>
基本表一旦被删除,表中的数据、此表上建立的索引和视图都将自动被删除。因此执行删除基本表的操作时一定要格外小心。DROP TABLE <表名> RESTRICT 视图等关联对象没有事先删除则不能执行删除操作 (3)索引操作
建立索引是加快查询速度的有效手段,提供多种存取路径 UNIQUE 唯一索引,建立的索引其值必须唯一
CLUSTER聚簇索引,表示索引值的顺序与表中记录的物理顺序一致,适合在经常查询的列上建立,不适合在经常更新的列上建立
CREATE [UNIQUE][CLUSTER]INDEX<索引名> ON<表名>(<列名>[<次序>〕[,<列名>[<次序>」?」); <次序>指定索引值的排列次序,可选ASC(升序)或DESC(降序),默认值为ASC 如:CREATE UNIQUE INDEX SCno ON SC( Sno ASC,Cno DESC);
删除索引:DROP INDEX<索引名>;删除索引时,系统会同时从数据字典中删去有关该索引的描述
4、SQL的数据操纵语句
SQL语言的数据操纵包括INSERT(插人)、DELETE(删除)、UPDATE(更新)和SELETE(检索,又称查询)4个语句
SELECT语句是数据操作的核心。
(1)数据查询 SELECT[ALLI DISTINCT]<目标列表达式>〔,<目标列表达式>]? FROM<基本表或视图>[,<基本表或视图>]? [WHERE<条件表达式>]
[GROUP BY<列名l>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC 1 DESC]]; a.简单查询
简单查询涉及数据库中的一个表,包括以下几种: (1)查询表中的若干列。 (2)查询经过计算的值。
(3)消除取值重复的行。DISTINCT
(4)查询满足条件的元组。WHERE
(5)利用LIKE的查询。_、%
(6)涉及空值NULL的查询。IS NULL 、IS NOT NULL (7)对查询结果排序。ORDER BY ASC/DESC
(8)使用集函数。Count 、SUM、AVG、MAX、MIN
(9)对查询结果分组。Group by having b. 连接查询
外连接的三种类型:左外连接、右外连接、全外连接
左外连接(LEFT OUTER JOIN):结果表中保留连接条件左边关系中的所有元组 右外连接(RIGHT OUTER JOIN): 结果表中保留连接条件右边关系中的所有元组 全外连接(FULL OUTER JOIN): 结果表中保留连接条件左右两边关系中的所有元组 某些系统中用+= 表示左外连接、=+表示右外连接、+=+表示全外连接 c.嵌套查询 (I)由谓词IN引导的子查询:IN是最常用的谓词。 (2)谓词是比较运算符的子查询。
(3)由[NOT]EXISITS谓词引导的子查询。 d.集合查询。
UNION(并)、INTERSECT(交)、EXCEPT(差) 5、SQL的修改语句
(1)插入操作(insert)insert into 表名(字段名,?) values(常量,?)
insert into 表名(字段名,?) select … from
(2)删除操作(delete)delete from 表名 [where F] 删除表中的数据,表的结构还存在数据字典中
(3)更新操作(update)update 表名 set 列名=表达式,列名=表达式 where F 6、视图
(1)创建视图CREATE VIEW<视图名>〔(<列名>〔,<列名>?〕
AS<子查询>
〔 WITH CHECK OPTION〕: 其中子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插人或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
(2)几种特殊的视图:行列子集视图、表达式视图、分组视图、连接视图
(3)查询视图:将对视图的查询转换为对基本表的查询的过程称为视图的消解(View Resolution)。
视图物化(View Materialization):是指在视图第一次被查询的时候物理地建立一个临时的视图表(实表),但必须保证更新基本表时自动更新视图表,保持物化视图的最新性。 (4)修改视图
为防止用户通过视图对数据进行增、删、改操作时,无意或有意操作不属于视图范围内的基本表数据可在定义视图时加上WITH CHECK OPTION子句,这样在视图上增、删、改数据时,DBMS会进一步检查视图定义中的条件,若不满足条件,则拒绝执行该操作。 改视图包括插入(INSERT)、删除(DELETE)和更新(UPDATE) 3类操作。行列子集视图可以修改,带表达式视图、连接视图和分组视图不能修改。 (5)视图的作用
(1)能够简化用户的操作。
(2)使用户能以多种角度看待同一数据。
(3)对重构数据库提供了一定程度的逻辑独立性。
(4)能够对机密数据提供安全保护。
7、数据控制语句和嵌入式SQL
(1)GRANT语句和REVOKE语句实现权限授予和权限回收
GRANT 权限 ON 对象名 to 用户 [with grant option]; with grant option 获得权限的用户允许授予其他用户
(2) REVOKE<权限>[,<权限>]? [ON<对象类型><对象名>] FROM<用户>[,<用户>]?;
(3) SQL语言分为独立语言和嵌入式语言
SQL语言嵌入主语言解决的3个问题:
SQL语言与主语言的区分:EXEC SQL
数据库工作单元与程序工作单元的通信(通过主变量) 游标解决集合操作与记录操作的矛盾
DBMS可采用两种方法处理嵌入式SQL,一种是预编译,另一种是修改和扩充主语
言
(4)动态SQL:程序在执行过程中动态生成SQL语句。动态SQL的两种执行方式:1、立即执行;2、先准备后执行
第七章 关系数据库的规范化理论与数据库设计
1、“不好”的关系模式有以下4个问题:
a、数据冗余 b、更新异常 c、插入异常 d、删除异常 2、函数依赖
数据依赖中重要的是函数依赖和多值依赖
(1)函数依赖定义:设R(U)是属性集U上的一个关系模式,X和Y均为U的子集。若对于R(U)的任一个可能的关系r,r中不可能有两个元组在X中的属性值相等,而在Y中的属性值不等,那么称X函数决定Y X->Y,或Y函数依赖于X, X为决定因素(函数中的一一映射关系)
(2)函数依赖包括非平凡的函数依赖、平凡的函数依赖、完全函数依赖、部分函数依赖及传递函数依赖
平
凡
函
数
依
赖
:
非平凡函数依赖 : 如果 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 传递函数依赖于X。
(3) 函数依赖的逻辑蕴含
设R<U, F>是一个关系模式,X可以由F推导出Y,则称F逻辑蕴含X→Y (4)码:设 K 为关系模式 R中的属性或属性组合。若
,并且不存在K
的真子集决定U,则 K 称为 R 的一个侯选码(Candidate Key)。若关系模式 R 有多个候选码,则选定其中的一个做为主码(Primary key)。
主属性与非主属性
全码(ALL KEY):主码为关系模式所有属性
如何找候选码:a.找出F集合的所有仅出现在左边的属性和左右两边都没出现的属性,组合为U1,U1必包含在候选码中;b.如果U1->U,则U1为一个候选码,否则然后增加其他属性到U1中组成属性组K,使K->U,则K为候选码,再找出其他候选码 (5)函数依赖的公理系统
a.自反律:若Y ?X ? U,则X-> Y为F所逻辑蕴含。
b.增广律:若X->Y为F所逻辑蕴含,且Z ? U,则XZ->YZ为F所逻辑蕴含。
c.传递律:若X- >Y及Y->Z为F所逻辑蕴含,则X->Z为F所逻辑蕴含。
推论
合并规则:X->Y,X->Z,则X->YZ 伪传递规则:X->Y,WY->Z,则XW->Z 分解规则:X->Y及Z?Y,则X->Z
3、1NF、2NF,3NF,BCNF (1)1NF:1NF的模式是关系数据库的最基本要求
如果关系模式R的所有属性都是不可再分解的,则称R属于第一范式,简称1NF,记做R∈1NF。
(2) 2NF:若R∈ INF,且每一个非主属性完全函数依赖于码,则R∈2NF
(3) 3NF: 关系模式R∈2NF,且每个非主属性都不传递依赖于码,则R∈3NF
(4) BCNF: 若关系模式R∈1NF,且对于每个非平凡的函数依赖X-> Y都有X包含码,则R ∈BCNF。在函数依赖的范围内,BCNF达到了最高的规范化程度。 4、多值依赖和4NF
(1)多值依赖:设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y,多值依赖 X→→Y成立当且仅当对R的任一关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。 平凡多值依赖和非平凡的多值依赖
若X→→Y,而Z=φ,则称 X→→Y为平凡的多值依赖, 否则称X→→Y为非平凡的多值依赖
特性:a.多值依赖具有对称性 若X→→Y,则X→→Z,其中Z=U-X-Y b.函数依赖是多值依赖的特殊情况。若X→Y,则X→→Y。
c. 若函数依赖X→Y在R(U)上成立,则对于任何Y' ? Y均有X→Y' 成立
多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y' ? Y有X→→Y' 成立 d. 多值依赖的有效性与属性集的范围有关. 若X→→Y在U上成立,则在W(X Y?W? U)上一定成立;反之则不然,即X→→Y在W(W ?U)上成立,在U上并不一定成立. (2)4NF关系模式R∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ? X),X都含有候选码,则R∈4NF。
根据定义:不允许有非平凡且非函数依赖的多值依赖,X包含码,即X->Y,实际就是函数依赖
如果R ∈ 4NF, 则R ∈ BCNF 5、关系模式分解
常用的等价标准有要求分解具有无损连接性的和分解是保持函数依赖的两种。