1、1 数据库知识要点总结 第一章 关系数据模型 数据模型(静态)的三要素 一 关系数据结构 (一)基本概念包括: 1 属性(Attribute):实体所具有的某一特征。 (如学生的特征是学号、姓名、 -) 域(Domain):属性对应的一组具有相同数据类型的值的集合。每个属性有一个域。 (关 系模型限定域必须原子性 1NF) 2 键( key) (1)候选键(candidate key) 关系的某一属性或属性组的值唯一标识一个元组,而其任何真子集无此性质。 候选键的诸属性称为主属性,不包含在任何候选键中的属性称为非主属性。 (2)主键(primary key) 一个关系至少有一个侯选键,可以有几
2、个侯选键。一般从侯选键中选择一个作为主键 (primary key),其他的称为侯补键( alternate key) 每个主键的值是不能相同的, (3)外键(foreign key) 如关系中的属性或属性组不是本关系的主键,而引用其他关系或本关系的主键,则称 为本关系的外键。 3 关系(Relation ): (1)关系:定义在事物的所有属性域上的多元关系 ,一个关系就是一张二维表。 (2)关系模式:关系的描述称为关系模式,它可以形式化的表示为 R(U,D,DOM, F) R 为关系名 U 为组成该关系的属性名集合 D 为属性组 U 中属性所来自的域 DOM 为属性向域的映像集合 F 为属性
3、间数据的依赖关系集合 关系模式通常简记为:R(U)或 R(A1,A2,A3,An ) 关系的三种基本类型 基本表:是实际存在的表,它是实际存储数据的逻辑表示。 查询表:是查询结果对应的表。 视图表:是由基本表或其他视图导出的表,是虚表,不对应实际存储内容。 二 关系操作 (一)两种关系操作 1 查询(Query) 查询可以分为 选择(SELECT),投影(Project),连接(Join),交(Intersection),并(Union), 差(Except),除 (Divide),笛卡尔乘积。 其中选择,投影,并,差,笛卡尔乘积是 5 种基本操作,其他的操作可用这些基本操作 定义和导出 2
4、插入(Insert),删除(Delete) ,修改(Update) (二)关系操作的特点 集合式的操作方式,即操作的对象和结果都是集合。 2 (三)关系数据语言可以分为三类 1 关系代数语言 2 关系演算语言(元组关系演算和域关系演算) 3 具有关系代数和关系演算双重特点的语言(SQL 语言) 三 关系完整性约束 关系数据库的数据必须遵循的约束 实体完整性(Entity Integrity ) 参照完整性(Referential Integrity ) 用户自定义完整性(User-Defined Integrity ) 实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个
5、不变 性。 (一)实体完整性 实体完整性规则:关系模式 R 的主属性值不可为空 指所有主属性均不可取空值,不仅仅是主键不可为空 (二)参照完整性 1 外键(Foreign Key) 定义:设 F 是基本关系 R 的一个或一组属性,但不是关系的码,是基本关系的 主码。如果与相对应,则称是的外码(Foreign Key) R 称为参照关系(Referential Relation ) ,S 称为被参照关系( Referenced Relation ) 2 参照完整性规则 若属性(或属性组)F 是基本关系 R 的外码,它与基本关系 S 的主码 KS 相对应(基本 关系到 R 和 S 不一定是不同关系
6、) ,则对于 R 中每个元组在 F 上的值必须为: (1)等于被参照关系 S 中所参照的候选键的某个值 (2)空值 (三)用户自定义完整性 针对某一具体数据的约束条件,反映某一具体应用所涉及的数据必须满足的特殊语义 由应用环境决定 四 关系代数 关系代数按运算符的不同可分为传统关系运算和专门关系运算 (一)传统关系运算(交,并,差,笛卡尔乘积) 1 (并)R1R2=b 2 d b 3 b c 2 d 3 d 3 b a 3 c e 5 f g 6 6 2 (交 AND) R1R2= b 2 d c 2 d 3 (差) R1R2= b 3 b d 3 b 4 (笛卡尔乘积) R1 S = b 2
7、 d 2 d b 2 d 3 b b 3 b 2 d b 3 b 3 b c 2 d 2 d c 2 d 3 b d 3 b 2 d d 3 b 3 b (二)专门关系运算 1 选择(SELECT) (选择符合条件的元组) () 如: 性别=男(STUDENT) 表的水平划分 2 投影(Project)(选择符合条件的属性) () 如: 学号,姓名 (STUDENT) 表的垂直划分 3 连接操作(Join) 笛卡尔乘积 R S = |tR AND gS (1)连接分为等值连接和自然连接 连接操作: R|S 其中 A 和 B 分别为 R 和 S 上度数相等且具有可比性的属性组 1)等值连接( 为
8、=) R1.A1 R1.A2 R1.A3 S.A2 S.A3 如上例 R1 | S = b 2 d 2 d R1.A2=S.A2 b 3 b 3 b c 2 d 2 d d 3 b 3 b 2)自然连接(只有|) AB 4 一般连接是从行的角度出发的,但自然连接还要取消重复的列,是从行和列的角度进 行运算 S.A2 S.A3 R1.A1 R1.A2 R1.A3 如 R1 | S = b 2 d B 3 b 4 除运算() R1.A1 如 R1S = b 在 R1 上 b 印象集合是(2,d),(3,d) S 在(A1,A2)上的投影为(2,d),(3,d) 第二章 关系数据库的标准语言 SQL
9、 一 SQL 动词表 SQL 功能 动词 数据查询 SELECT 数据定义 CREATE,DROP ,ALTER 数据操纵 INSERT,UPDATE,DELETE 数据控制 GRANT,REVOKE 二 数据定义 操作方式操作对象 创建 删除 修改 模式 CREATE SCHEMA DROP SCHEMA 表 CREATE TABLE DROP TABLE ALTER TABLE 视图 CREATE VIEW DROP VIEW 索引 CREATE INDEX DROP INDEX 注意 SQL 通常不提供修改模式定义,修改视图定义,修改索引定义的操作 (一)模式的定义和删除 1 模式的定义
10、 CREATE SCHEMA AUTORIZATION 例如:CREATE SCHEMA “s-t” AUTORIZATION wang; (1) 要创建模式,调用该命令的用户必须具有 DBA 权限,或者获得了 DBA 授予的 CREATE SCHEMA 权限 (2)如果没指定那么隐含为 (3)定义模式,实际上是定义了一个命名空间,在这个空间中可以进一步定义该模式包 含的数据库对象,例如基本表,视图,索引。 2 模式的删除 DROP SCHEMA (两者必选其一) 5 例如:DROP SCHEMA “s-t” CASCADE; (1)CASCADE(级联)表示在删除模式的同时把该模式中所有的数
11、据库对象全部一起 删除。 (2)RESTRICT(限制)表示在删除该模式中已经定义了下属数据库对象(表,视图索 引) ,则拒绝该删除语句。 (二)表的定义,删除和修改 1 表的定义 CREATE TEBLA ( 列级完整性约束 , 列级完整性约束 ,) 列定义的完整格式: DEFAULT NOT NULL CREATE TEBLA AS 若要定义模式式下的表:CREATE TABLE . (1)数据类型 ANSI/ISO Oracle Char(n) Character(n) Char(n) Character Varying(n) 字符型 Char Varying(n) Varchar2(n
12、) Numeric Decimal Integer Int Float Double 数值型 Real Number Date日期型 Time Date (2)完整性约束 主键约束(Primary Key) 实体完整性 外键约束(Foreign Key) 参照完整性 检查约束(Check) 用户自定义完整性 唯一键约束(Unique) 非空约束(Null | Not Null) 默认值(Defautl) (3)例子 CREATE TABLE student ( Sno CHAR(8) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex CHAR(2) DEFALU
13、LT 男, Sage SMALLINT CHECK(Sage0) 6 Sdept CHAR(20) ) CREATE TABLE Course ( Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4) REFERENCES Course(Cno), Ccredit SMALLINT, CHECK (Ccredit 0) ) CREATE TABLE sc ( Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno,Cno),/注意一定要有括号 FOREIGN KEY(Sno) R
14、EFERENCES Course(Cno),/sno 一定要有括号 ) (4)说明 1)列约束:在每个列后定义,可以有多个约束子句,不能定义多个列上的约束 2)表约束:在全部列定义完成后定义,可以有多个约束子句,多个列上的约束必须使 用表约束,单列上的约束可以用列约束,也可用表约束 2 表的删除 DROP TABLE CASCADE | RESTRICT (1)CASCADE(级联)删除该表没有任何限制,删除表的同时,相关的依赖对象(如 视图)也一起删除。 (2)RESTRICT(限制)删除该表是有限制条件的。欲删除的表不能被其他表的约束所 引用 (如 CHECK,FOREIGN KEY 等约
15、束) ,不能有视图,不能有触发器(trigger) , 不能存储过程或函数。 (3)缺省情况下是 RESTRICT 3 表的修改 ALTER TABLE ADD 完整性约束 | MODIFY 完整性约束 | DROP COLUMN | ADD | DROP CONSTRAINT 例如 (1)ALTER TABLE Student ADD Dept Varchar2(10)UNIQUE (2)Alter Table Student DROP COLUMN age (3)AlLTER TABLE Student MODIFYage number(3) NOT NULL (4)ALTER TABLE
16、 Student ADD CONSTRAINT PK_Student PRIMARY KEY(S#) (5)ALTER TABLE SC DROP CONSTRAINT FK_SC (三)视图的定义和删除 7 1 视图的定义 CREATE VIEW (列名 1,列名 2,) /列名一定要放在括号里 AS WITH CHECK OPTION |WITH READ ONLY 例如:CREATE VIEW cs_view (sno, name, age) AS SELECT s#, sname, age FROM student WHERE Dept = 计算机系 WITH READ ONLY; (
17、1)WITH CHECK OPTION 表示对视图进行 UPTATE,INSERT,DELETE 操作时要保 证更新,插入,删除的行满足视图定义中的谓词条件(即子查询中的条件表达式) WITH READ ONLY 表示视图是只读的 (2)视图的属性列名只能是全部缺省或全部指定,没有别的选择。但在下列两种情况下 必须明确指定组成视图的列名。 1)某个目标列不是单纯的属性名,而是聚集函数或列表达式。 2)多表连接时选出几个同名列作为视图的字段。 (3)子查询可以是任意的 SELECT 子句,但通常不允许含有 OREER BY 子句各 DISDINCT 短语。 (4)不是所有视图都是可更新的 1)基
18、于联接查询的视图不可更新 2)使用了函数的视图不可更新 3)使用了分组操作的视图不可更新 4)只有建立在单个表上而且没有使用函数的视图才是可更新的 2 视图的删除 DROP VIEW CASCADE (四)索引的定义和删除 1 索引的定义 CREATE UNIQUE | CLUSTER INDEX ON ( , ) 例如:CREATE UNIQUE INDEX SCno on SC(Sno ASC, Cno DESC); (1)UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录 (2)CLUSTER 表示要建立的索引是聚簇索引。 聚簇索引是指索引项的顺序与表中的物理顺序一致的索引组织,
19、在一个表上只能建 立一个聚簇索引。 (3)次序可选 ASC(升序)或 DESC(降序)缺省值为 ASC 2 索引的删除 DROP INDEX DROP INDEX SCno; 三 数据更新 (一)插入数据 INSERT 插入数据通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。 后者可以一次插入多个元组。 1 插入一个元组 INSERT INTO ( ,) 8 VALUES( ,) 例如 INSERT INTO Student (Sno, Sname, Ssex, Sdept, Sage) VALUES (20081512, 陈冬 , 男 , IS , 18); INTO 语句中没有
20、出现的属性列,新元组在这些列上将取空值或默认值。 在 INTO 子句中只指出了表名,没有指出属性名,新元组要在所有属性列上都指定值,属性列 的次序与 CREATE TABLE 中的次序相同。 2 插入子查询结果 INSERT INTO ( ,) 子查询; 例如 INSERT INTO Dept_age( Sdept ,Avg_age) SELECT Sdept ,AVG(Sage) FROM Student GROUP BY Sdept; (二)修改数据 UPDATE SET =,= WHERE ; 例如:UPDATE Student SET Sage=22 WHERE Sno=2002150
21、21; (三)删除数据 DELETE FROM WHERE ; 例如:DELETE FROM Student WHERE Sno=20021528; DELETE 语句删除的是表中的数据,而不是关于表的定义。 四 数据查询 基本数据查询的格式: SELECT ALL | DISTINCT AS,AS FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC; (一)单表查询 在一个表中查询数据 9 1* 查询 查询全部记录:查询全部的学生信息 SELECT * FROM Student; *表示所有列 等同于 SELECT s#, sname, age, s
22、ex FROM Student 2 使用别名(AS 或空格) 使用别名:查询所有学生的学号和姓名 SELECT s# AS 学号, sname AS 姓名 FROM Student 如果别名包含空格,须使用双引号 SELECT s# AS “Student Number” FROM Student 3 表达式查询(三种表达式,字符串表达式,算术表达式,函数表达式) (1)字符串表达式 查询所有学生的学号、姓名和出生年份,返回两列信息,其中一列是“学号:姓名”,另一列是 出生年份 SELECT s# | “:”| sname AS 学生,2003age AS 出生年份 FROM Student
23、说明 连接字符串 | 表示则多个查询列连接为一个列输出。 (2)算术表达式 查询学生的出生年份 SELECT 2003age AS 出生年份 FROM Student; (3)函数表达式 SELECT sno, to_char(birth, mm-dd-yyyy) AS birthday FROM Student SELECT Count(sno) As 学生人数 FROM Student 4 条件查询 (1)WHERE 条件 注: 1)在 where 子句中使用列名和表达式,但不能使用别名。 2)在 where 子句中使用数值时,既可以用单引号也可以不用单引号,使用日期值 字符值时,都必须使
24、用单引号,并且日期值的格式必须要符合数据库中支持的日 期格式,否则必须事先使用 to_date 函数将其转换成为数据库中支持的日期格式。 oracle 中日期的默认格式为: 01-1 月-82 在输入查询条件时,可以用 to_date(1998-01-01,yyyy-mm-dd) 10 3)在 SQL 语句中,命令不区分大小写,但字符串区分大小写 WHERE 子句中的关系运算符: 比较操作符:, =, 5 Having 子句中必须聚集函数的比较式,而且聚集函数的比较式也只能通过 Having 子句给出 Having 中的聚集函数可与 SELECT 中的不同 查询人数在 60 以上的各个班级的学
25、生平均年龄 SELECT class, AVG(age) FROM Student Group By class 12 Having COUNT(*) 60 (6)使用 rollup 和 cube 限定词 Rollup 用于生成横向统计结果 SQL select deptno,job,avg(sal),max(sal) from emp 2 group by rollup(deptno,job); DEPTNO JOB AVG(SAL) MAX(SAL) - - - - 10 CLERK 1300 1300 10 MANAGER 2450 2450 10 PRESIDENT 5000 5000
26、 10 2916.66667 5000 20 CLERK 950 1100 20 ANALYST 3000 3000 20 MANAGER 2975 2975 20 2175 3000 30 CLERK 950 950 30 MANAGER 2850 2850 30 SALESMAN 1400 1600 30 1566.66667 2850 2073.21429 5000 Cube 用于生成纵向统计结果 SQL select deptno,job,avg(sal),max(sal) from emp 2 group by cube (deptno,job); DEPTNO JOB AVG(SA
27、L) MAX(SAL) - - - - 2073.21429 5000 CLERK 1037.5 1300 ANALYST 3000 3000 MANAGER 2758.33333 2975 SALESMAN 1400 1600 PRESIDENT 5000 5000 10 2916.66667 5000 10 CLERK 1300 1300 10 MANAGER 2450 2450 10 PRESIDENT 5000 5000 20 2175 3000 20 CLERK 950 1100 20 ANALYST 3000 3000 20 MANAGER 2975 2975 30 1566.66
28、667 2850 30 CLERK 950 950 30 MANAGER 2850 2850 30 SALESMAN 1400 1600 (二)连接查询 一个查询同时涉及两个以上的表,则称之为连接查询。 13 SELECT , FROM , WHERE 1 等值连接和非等值连接 注: 在连接查询中应在列前加上表作为前缀,但如果列名在不同的表中不同,则可以不加表名限制, 否则必须加。 当指定表的别名时,别名应跟在表名后面。 例如: SQL select d.deptno , d.dname, e.ename, e.sal 2 from dept d,emp e 3 where d.deptno=
29、e.deptno 4 and d.deptno=20; 1)等值连接 查询学生的学号,姓名和所选课程号 SELECT student.s#, student.sname,sc.c# FROM student,sc WHERE student.s# = sc.s# 联接条件 2)非等值连接 SELECT SC.S# , Course.credit FROM SC,Course WHERE SC.C# I IN Course.C# 2 自然连接 若在等值连接中把目标列中重复的属性列去掉则为自然连接 3 自身连接 给一个表定义两个或多个不同的别名,就可以像使用这两个别名进行连接查询。 SELECT
30、FIRST.Cno, SECOND.Cpno FROM Course FIRST , Course SECOND WHERE FIRST.Cpno=SECOND.Cno 4 外连接查询 外连接分为左外连接和右外连接 左外连接列出左边关系中所有的元组 14 右外连接列出右边关系中所有的元组 SELECT , FROM LEFT|RIGHT OUT JOIN USING ON (连接条件) USING 去掉重复行 5 复合条件查询 WHERE 子句中可以有多个连接条件,称为复合条件连接。 (三)嵌套查询 在 SQL 语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块。将一个查询块
31、嵌套在另 一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为嵌套查询。 1 无关子查询 父查询与子查询相互独立,子查询语句不依赖父查询中返回的任何记录,可以独立执行 查询没有选修课程的所有学生的学号和姓名 SELECT s#,sname FROM student WHERE s# NOT IN ( SELECT distinct s# FROM sc) 子查询返回选修了课程的学生学号集合,它与外层的查询无依赖关系,可以单独执行 无关子查询一般与 IN 一起使用,用于返回一个值列表 2 相关子查询 相关子查询的结果依赖于父查询的返回值 查询选修了课程的学生学号和姓名 SELE
32、CT s#, sname FROM student WHERE EXISTS (SELECT * FROM sc WHERE sc.s# = student.s#) 相关子查询不可单独执行,依赖于外层查询 EXISTS(子查询):当子查询返回结果非空时为真,否则为假 执行分析:对于 student 的每一行,根据该行的 s#去 sc 中查找有无匹配记录 3 连接视图 子查询出现在 FROM 子句中作为表使用 查询只选修了 1 门或 2 门课程的学生学号、姓名和课程数 SELECT s#, count_c# FROM (SELECT s.s# as s#, count(sc.s#) as cou
33、nt_c# FROM student s, sc WHERE s.s#=sc.s# 15 Group by s.s#) SC2, student WHERE sc2.s# = student.s# and (count_c#=1 OR count_c#=2) 联机视图可以和其它表一样使用 (四)查询结果的连接 Union 和 Union All Minus Intersect 1 Union 和 Union All 查询课程平均成绩在 90 分以上或者年龄小于 20 的学生学号 (SELECT s# FROM student WHERE age90) SC2 ) UNION 操作自动去除重复记
34、录 UNION All 操作不去除重复记录 2 Minus 查询未选修课程的学生学号 (SELECT s# FROM Student) Minus (SELECT distinct s# FROM SC) 3 Intersect 返回两个查询结果的交集 查询课程平均成绩在 90 分以上并且年龄小于 20 的学生学号 (SELECT s# FROM student WHERE age90) SC2 ) 五 授权 (一)创建数据库模式的权限 CREATE USER WITH DBA | RESOURCE | CONNECT 1 对数据库模式的授权由 DBA 在创建用户时实现 2 新创建的用户有三种
35、权限 可否执行的操作拥有的权限 CREATE USER CREATE SCHEMA CREATE TABLE 登录数据库执行查询和操作 DBA 可以 可以 可以 可以 RESOURCE 不可以 不可以 可以 可以 16 CONNECT 不可以 不可以 不可以 可以但必须拥有相应权限 (二)授权和回收 关系数据库系统中的存取权限 对象类 型 对象 操作类型(权限) 模式 CREATE SCHEMA数据库 基本表 CREATE TABEL ,ALTER TEBLE 视图 CREATE VIEW模式 索引 CREATE INDEX 数据 基本表和视图 SELECT,INSERT,UPDATE,DEL
36、ETE ,REFERENCES , ALL PRIVILEGES 数据 属性列 SELECT,INSERT,UPDATE,DELETE ,REFERENCES , ALL PRIVILEGES 1 授权 GRANT , ON , TO , WITH GRANT OPTION ; 例如:GRANT SELECT ON TABLE Student TO U1 WITH GRANT OPTION (1)WITH GRANT OPTION 表示获得某种权限后的用户,还可以把这种权限授予其他用户。 如果没有此句,则不能传播该权限 (2)用户可以是 PUBLIC 即全体用户 2 回收 REVOKE , O
37、N , FROM , CASCADE | RESTRICT; 例如:REVOKE SELECT ON TABLE Student FROM U1 CASCADE; (三)数据库角色 1 创建角色 CREATE ROLE ; 例如:CREATE ROLE R1; 数据库角色是被命名的一组与数据库操作相关的权限,角色是权限集合 2 给角色授权 GRANT , ON , TO ,; 例如:GRANT SELECT,UPDATE,INSERT ON TABLE Student TO R1; 17 3 将一个角色授予其他角色或用户 GRANT , TO , WITH ADMIN OPTION WITH
38、ADMIN OPTION 表示获得某权限的角色或用户还可以把这种权限再授予 其他角色或用户 例如:GRANT R1 TO wang; 4 角色权限回收 REVOKE , ON , FROM , ; 例如:REVOKE R1 FROM wang; 六 完整性约束命名子句 完整性约束条件可以在 CREATE TABLE 语句中定义。SQL 还在 CREATE TABLE 语句中提供 了完整性约束命名子句 CONSTRAINT,用来对完整性约束条件命名。 1 创建完整性约束 CONSTRAINTPRIMARY KEY 短语 | FOREIGN KEY 短语| CHECK 短语 例如:CREATE T
39、EBLE Student (Sno NUMERIC(6) CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 999999) Sname CHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK(Sage30), Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN(男 , 女), CONSTRAINT StudentKey PRIMARY KEY (Sno) ) ; 2 修改完整性约束 例如:ALTER TABLE Student DROP CONST
40、RAINT C4; ALTER TABLE Student ADD CONSTRAINT C5 CHECK (Sage40); 七 触发器 CREATE TRIGGER BEFORE | AFTER ON FOR EACH ROW| STATEMENT WHEN 第三章 关系数据库理论 一 关系模式(回顾) 一个关系模式应当是一个五元组。 18 R(U,D,DOM, F) R 为关系名 U 为组成该关系的属性名集合 D 为属性组 U 中属性所来自的域 DOM 为属性向域的映像集合 F 为属性间数据的依赖关系集合 由于 D 和 DOM 对模式设计关系不大 ,因此我们在本章中把关系模式看作是一个三
41、元组: R 当且仅当 U 上的一个关系 r 满足 F 时,称 r 为关系模式 R的一个关系。 二 数据依赖 数据依赖是一个关系内部属性与属性之间的一种约束关系。这种关系是通过学习属性间值的相 等与否体现出来的数据间相关联系。 最重要的数据依赖其中最重要的是函数依赖和多值依赖。 三 规范化 (一)函数依赖理论 1 函数依赖 定义 10.1:设 R(U)是属性集 U 上的关系模式。X,Y 是 U 的子集。若对于 R(U)的任意一个可能 的关系 r,r 中不可能存在两个元组在 X 上的属性值相等,而在 Y 上的属性值不等,则称 X 函 数确定 Y 或 Y 函数依赖于 X,记作 XY 。 下面介绍一些
42、术语和记号: XY,但 YX,则称 XY 为平凡的函数依赖。否则,称 XY 为非平凡的函数依赖。 今后,若不特别声明,我们总是讨论非平凡的函数依赖。 若 XY,则称 X 为决定因素(Determinant) 。 若 XY,YX,则记作 X Y。 若 Y 不函数依赖于 X,则记作 X Y。 2 完全函数依赖和部分函数依赖 定义 10.2:在 R(U)中,如果 XY,并且对于 X 的任何一个真子集 X ,都有 X Y,则称 Y 对 X 完全函数依赖,记作:X Y 。 若 XY,但 Y 不完全函数依赖于 X,则称 Y 对 X 部分函数依赖,记作 X Y。 3 传递函数依赖 定义 10.3:在 R(U
43、)中,如果 XY,(Y X),Y X,YZ,则称 Z 对 X 传递函数依赖。 加上条件 Y X,是因为如果 YX,则 XY, 实际上是 , 是直接函数依赖而不是传递函数依 赖。 4 多值依赖 定义 10.9:设 R(U)是属性集 U 上的一个关系模式。X,Y,Z 是的 U 的子集,并且 Z=U-X-Y。 关系模式 R(U)中多值依赖 XY 成立,当且仅当对 R(U)的任一关系 r,给定的一对(x ,z)值有 一组 Y 的值,这组值仅仅决定于 x 值而与 z 值无关。 多值依赖的例子 例: 学校中某一门课程由多个教员讲授,他们使用相同的一套参考书。每个教员可以讲授多 门课程,每种参考书可以供多门
44、课程使用。我们可以用一个非规范化的关系来表示教员 T,课程 C 和参考书 B 之间的关系: 课程 C 教员 T 参考书 B - 物理 李 勇 普通物理学 19 王 军 光学原理 物理习题集 - 数学 李 勇 数学分析 张 平 微分方程 高等代数 把这张表变成一张规范化的二维表,就成为: Teaching 课程 C 教员 T 参考书 B - 物 理 李 勇 普通物理学 物 理 李 勇 光学原理 物 理 李 勇 物理习题集 物 理 王 军 普通物理学 物 理 王 军 光学原理 物 理 王 军 物理习题集 数 学 李 勇 数学分析 数 学 李 勇 微分方程 数 学 李 勇 高等代数 数 学 张 平
45、数学分析 数 学 张 平 微分方程 数 学 张 平 高等代数 例如,在关系模式 TEACHING 中,对于一个( 物理,光学原理)有一组 T 值李勇,王军,这 组值仅仅决定于课程 C 上的值 (物理)。也就是说对于另一个( 物理,普通物理学)它对应的一组 T 值仍是李勇,王军,尽管这时参考书 B 的值已经改变了。因此 T 多值依赖于 C,即 CT。 四 范式 (一)范式 关系数据库中的关系模式要满足一定的规范化要求,满足不同程度规范化要求的关系模式的类 称为不同的范式。 满足最低要求的关系模式称为第一范式,简称 lNF。在第一范式中满足进一步要求的为第二范式, 其余以此类推。 R 为第几范式就
46、可以写成 RxNF。按属性间依赖情况来区分,关系规范化的程度为 1NF,2NF,3NF,BCNF,4NF 和 5NF 等。 对于各种范式之间的关系有 5NF 4NF BCNF 3NF 2NF lNF 成立。 (二)规范化 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合, 这一过程称为规范化。 (三)范式定义 1 1NF:作为一张二维表,对它有一个最起码的要求,每一个分量必须是不可公的数 据项,满足了这个条件的关系模式就属于第一范式 2 2NF:若 R 1NF ,且每个非空主属性完全依赖于码,则 R 2NF 3 3NF: 关系模式 R中若不存在这样的码 X,属性
47、组 Y 及非主属性 Z(Z Y)使得 XY ,YZ 成立,Y X,则称 R 3NF(不存在传递依赖) 4 BCNF:关系模式 R1NF ,若对 R 中任何非平凡的函数依赖 XY(Y X), X 必 含有键,则称 R BCNF 20 5 4NF:关系模式 R1NF,如果对于 R 的每个非平凡多值依赖 XY(Y X) ,X 都 含有码,则 R 4NF (四)关于范式的说明 1 若一个关系模式 R 不是 3NF,就会产生插入异常、删除异常、更新异常和数据冗余度等问 题。所以一般情况下,关系模式应至少达到 3NF 2 范式总结 1NF 消除非主属性对码的部分依赖 2NF 消除非主属性对码的传递函数依赖 3NF 消除主属性对码的部分和传递函数依赖 BCNF 消除非平凡且非函数依赖的多值依赖 5NF