1.范式
(1)1NF
原子性不可拆分
(2)2NF
没有部分依赖
(3)3NF
没有传递依赖,任何非主属性不依赖其他非主属性
函数依赖集中的所有非平凡函数依赖左边为超键或者右边是某个键的组成部分。
(4)BCNF
关系模式R中的所有非平凡函数依赖的左边都是超键
超键:包含主键的属性集
(5)多值依赖和4NF
多值依赖:
若关系R(A,B,Z)中的元组在属性A上取某一特定值,则其在属性B上的值与R中不属于A和B的其他属性Z无关
记为A→→B
判断多值依赖:
若A→B,则A→→B
若A和B并集构成R属性全集,则A→→B成立
若A→→B,则A→→Z
若A→→B和B→→C在关系R上成立,则A→→C-B
若A→→B,A→→C,则A→→B∪C
若A→→B,A→→C,则A→→B∩C
若A→→B成立:
若C是B属性加上A的某些属性,则A→→C成立;
若D是B属性中不属于A的属性,则A→→D成立。
关系R(A,B,Z)满足4NF,当且仅当:
- 若A→→B是R上的非平凡多值依赖,则{A}是R的超键
- R中不存在非平凡多值依赖
A→→B是非平凡多值依赖当且仅当:
B中属性不在A中
A和B不包含R中所有属性
2.SQL全局约束
基于元组的检查子句(CHECK)
断言(CREATE ASSERTION断言名CHECK条件)
3. 模式分解
若要求分解保持函数依赖,那么分解后的关系模式总可以达到3NF,但不一定能达到BCNF。
若要求分解既保持函数依赖又具有无损连接性,则可以达到3NF,但不一定能达到 BCNF。
若要求分解具有无损连接性,那么一定可以达到4NF。
(1)无损连接检验算法





若分解后的关系模式只有两个可用以下定理;
(2)保持函数依赖(FD)的分解



4. 求候选码
已知关系模型R<U,F>,其中U=(A,B,C,D,E,G),F={AB–>C,CD–>E,E–>A,A–>G},求R的候选码。
算法:
找出只在函数依赖左部出现的属性集X,X肯定是任意一个候选码的成员,因为只在左边出现,所以少了它肯定推不出全集U。只在右部出现,肯定不属于任何一个候选码。其他的情况尝试组合求闭包,如果闭包是全集U,那么就是候选码。
结果:
只在左边出现的是B和D,所以确定了BD,只在右边出现的是G,所以排除G,剩下A,C,E。
先考虑一个的组合,ABD,BCD和BDE,三个的闭包都是全集U,所以三个都是候选码,算法结束。
5. 闭包算法
【例】关系模式R<U,F>,其中U={A,B,C,D,E},F={AB→C,B→D,C→E,EC→B,AC→B},求(AB)+
第一步,令X(0)=AB。
第二步,求X(1)。先列出X(0)的非空子集,即AB的非空子集为{A,B,AB}。然后扫描F集合,寻找{A,B,AB}可能存在的函数依赖,就可以得到:AB→C,B→D。于是就可以求得X(1)=X(0)∪C∪D=ABCD。然后判断X(0)如果等于X(1)就结束,所求即为答案,如果X(0)不等于X(1)就继续计算。
第三步,求X(2)。同第二步求X(1)得非空真子集,然后在F中一次寻找函数依赖,可以得到:AB→C,B→D,C→E,AC→B。求 得X(2)=X(1)∪C∪D∪E∪B=ABCDE。这时候发现X(2)已经等于全部属性集U了,就结束计算,得出(AB)+ =ABCDE。
6.求最小函数依赖集
关系模型R<U,F>,U={A,B,C,D,E},F={A→BC,ABD→CE,E→D},求F的最小依赖集。
第一步:将F中所有函数依赖的右边化为单一属性。得到F1={A→B,A→C,ABD→C,ABD→E,E→D}。
第二步:将第一步得到的F1去除其中的冗余依赖关系。假设A→B是冗余依赖关系,去除后F1’={A→C,ABD→C,ABD→E,E→D},我们求A对F’的闭包,得A(F1’)+ =AC,不包含B,所以A→B不是冗余依赖关系,不能删除。依次判断F1中的所有函数依赖,去除冗余依赖关系。就得出F2={A→B,A→C,ABD→E,E→D}。
第三步:对第二步所得F2去除其冗余属性。我们只关注函数依赖关系左边为多个的情况(一个必不可能为冗余属性),即观察ABD→E是否包含冗余属性。观察F2发现A→B,所以ABD中B是冗余属性可以删除,得到AD→E,最终得到了F的最小依赖关系F3={A→B,A→C,AD→E,E→D},也可以合并为F3={A→BC,AD→E,E→D}。
7.分解成3NF
(1)算法一:将关系R转化3NF的保持函数依赖的分解
第一步:首先计算出F的最小依赖集,得到F’={A→BC,AD→E,E→D}。
第二步:观察U中是否有属性不在F’中的出现,如果有,则这个个属性组成一对关系R,并在原来的U中删除这些属性。而例子中U中的属性都出现在F中,则可以跳过这一步。
第三步:对F’中的函数依赖,把左边的相同分为一组,一组中出现的所有属性为一个关系。如F={A→B,A→C,……},左边都为A的分为一组,出项的所有属性组为一个关系R{A,B,C,……}。例题中左边都不相同,所以一个函数依赖组为一个关系得到转化为3NF的保持依赖分解R1{A,B,C},R2{A,D,E},R3{E,D}。
(2)算法二:既保持函数依赖又无损连接
只要将算法一中计算出的集合并上候选键组成的集合即可,若算法一计算出的集合已经包含候选键,那么无需再次计算
8.关系代数基本操作1
9.什么时候用group by
当SELECT 后 既有 表结构本身的字段,又有需要使用聚合函数(COUNT(),SUM(),MAX(),MIN(),AVG()等)的字段,就要用到group by分组,查询的限定条件里有需要用聚合函数计算的字段时也需要用分组
1 | select sno,sum(grade) from cs group by sno |
查询选课表里每个学生的总成绩,这里就要用分组,分组的依照字段必须是select 后没有被计算过的原始字段
10.数据库的独立性
指不会因为系统数据存储结构与逻辑结构的变化而影响应用程序,即指数据和应用程序之间的独立性
11.集合并交叉运算
传统的集合并交叉运算施加于两个关系时,这两个关系的属性个数必须相等,相对应的属性值必须取自同一个域。
即两个关系具有相同的关系模式或结构。
12.分解必须遵守的规范化原则
保持原有的依赖关系和无损连接
13.事务必须有的四个性质
ACID:原子性,一致性,隔离性,持久性
原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。
一致性(Consistency):官网上事务一致性的概念是:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。以转账为例子,A向B转账,假设转账之前这两个用户的钱加起来总共是2000,那么A向B转账之后,不管这两个账户怎么转,A用户的钱和B用户的钱加起来的总额还是2000,这个就是事务的一致性。
隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
14.SQL中表达完整性约束的规则
主键约束,外键约束,属性约束和全局约束
实体完整性:标识每一行数据不重复,可以理解为是对主键的约束
参照完整性(引用完整性):对外键的约束
域完整性:限制此单元格的数据正确,不对照此列的其它单元格比较
15.关系代数之连接
(1)等值连接(逗号连接)
就是特殊的条件连接,当条件为某字段=某字段时,即为等值连接。如
1 | SELECT ename,sal,dname FROM emp,dept WHERE emp.deptno=dept.deptno; |
(2)自然连接
是一种特殊的等值连接,他要求多个表有相同的属性字段,然后条件为相同的属性字段值相等,最后再将表中重复的属性字段去掉,即为自然连接。natural join:自然连接(不允许带on/using)
如A中a,b,c字段,B中有c,d字段,则
1 | select * from A natural join B |
相当于
1 | select A.a,A.b,A.c,B.d from A.c = B.c |
(3)θ连接(条件连接)
就是在多个表的笛卡尔积中选取满足条件的行的连接,例如
1 | select * from A,B where A.a > A.b |
(4)内连接
两个表(或连接)中某一数据项相等的连接称为内连接。
(5)外连接
①外连接必须使用on或using子句提供相应的连接条件
②不能为using子句中所列举的列指定表别名,即使在group by和select子句中也是如此
③外连接规则:左连右补,右连左补,全连左右合并
(6)自然连接和外连接的区别
自然连接是通过对参与表关系中所有同名的属性对取等(即相等比较)来完成的,故无须自己添加连接条件,与外连接的区别在于对于无法匹配的记录外连接会虚拟一条与之匹配的记录来保全连接表中的所有记录,但自然连接不会
(7)自然连接和内连接的区别
内连接与自然连接基本相同,不同之处在于自然连接只能是同名属性的等值连接,而内连接可以使用using或on子句来指定连接条件,连接条件中指出某两字段相等(可以不同名)。
(8)内连接和等值连接的区别
等值连接一般用where字句设置条件,内连接一般用on字句设置条件,但内连接与等值连接效果是相同的。
内连接与等值连接其实是一回事情(等效)
16.关系代数基本操作2
(1)消除重复操作符
δ(R) 能对关系R消除重复元组
(2)分组操作符γ
包含了以某个属性作为分组属性,还有聚集操作符;
(3)外连接
(4)左外连接
(5)右外连接
(6)自然连接
(7)θ连接
17.外键删除和更新策略
(1)删除策略
①On Delete Restrict/No action
当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
②On Delete Cascade
当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。
③Set Null
当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
(2)更新策略
①On Update Restrict/No action
当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。
②On Update Cascade
当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。
③Set Null
当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
18.数据结构和数据操作
数据结构是对数据系统的静态特性的描述,数据操作是对数据库系统的动态特性的描述
19.函数依赖完备的推理规则
自反律,传递律,增长律
20.ER图转换成关系模式
(1)E1到E2的多对多联系R
R表示为一个关系,其属性是E1和E2的键属性加上自身属性
(2)E1到E2的多对一联系R
在E1关系中增加E2的键属性,E2作为被参照关系。
R可以表示为一个关系,但不是必须表示为一个关系。
(3)E1到E2的一对一联系R
在E1关系中增加E2的键属性,E2作为被参照关系。(也可以反过来)
R可以表示为一个关系,但不是必须表示为一个关系。
南理工:
一对一的联系,关系R自身属性加上有联系的实体集的键属性共同表示成一个关系模式。一对一联系可能会被合并为一个关系模式的表。
(4)处理弱实体集
弱实体集:
有些实体集的所有属性都不足以形成主码,这样的实体集称为弱实体集。与此相对,其属性可以形成主码的实体集称为强实体集。
cook:实体集,厨师(假设每个厨师都有编号,可以认为是某个饭店内部的厨师集)
food :实体集,食物。有 名称name 和 第一次被制作的时间time 两个属性
cook_food : 联系集,哪个厨师做了哪个食物
处理方法:将弱实体集E表示为一个关系R,包含自身属性和箭头所指实体的键属性,且R不在表示为一个关系。
(5)子类结构转换成关系isa
①遵照E/R观点(做题使用这一种)
包含根的键属性和自身属性
②面向对象方法
包含根所有属性和自身属性
③使用空值Null
创建一个包含层次中所有实体集属性的关系,每个实体由由一个元组表示,对于实体不具有的属性,设置该元组的相应分量为空。
21.包运算
设R和S是包,若元组t在R和S中分别出现n和m次,则:
t在R∪S中出现n+m次
t在R∩S中出现min(n,m)次
t在R-S中出现max(0,n-m)次
集合中无重复元组,包中有重复元组
22.增删列名
1 | 添加字段 |
23.增删改查
只有当该表执行insert或update时才检测check条件,执行delete时,不检测check条件
选择:
1 | select * from 表名 where 条件 |
插入:
1 | insert into 表名(字段名1,字段名2) values(值1,值2) |
删除:
1 | delete from 表名 where 条件 |
更新:
1 | update 表名 set 要更新的字段名=值 where 条件 |
24.视图
视图显示的是真实的数据,而对视图进行修改却不会影响数据库,故视图提高了数据库系统的安全性。
1 | CREATE VIEW view_name AS |
视图和表也可以进行连接
25.关系模式规范化主要目的
减少数据冗余;解决更新异常问题;提高存储空间效率。
主要是为解决关系数据库中插入、删除、和数据冗余问题而引入的。
26.自然连接和等值连接属性个数
关系A有m个属性,关系B有n个属性,若两个关系有p个相同属性名,则:
AB自然连接的运算结果有m+n-q个
AB等值连接的运算结果有m+n个
27.关系规范化异常
关系模式设计不当可能会带来一下几个问题:
数据冗余大:想修改一个属性,就要更新多行数据
更新异常:想更新一条数据,结果工作量大,还容易出错
插入异常:应该插入的数据未被插入
删除异常:不该删除的数据被删除
解决这些问题的方法是进行模式分解,将一个关系模式分解为多个关系模式。
28.分布式数据库和关系型数据库
关系型数据库
关系型数据库是由多张能互相联接的二维行列表格组成的数据库,当前主流的关系型数据库有Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL。
分布式数据库
分布式数据库的应用场景包括交易型应用:大并发、大数据量、以联机事务处理为主的交易型应用,如电商、金融、O2O、电信CRM/计费等。NoSQL(Not only SQL),泛指非关系型的数据库。Cassandra是一套开源分布式NoSQL数据库系统。
29.三层模式两级映像
(1)三级模式
DBS采用三级模式结构,那就是外模式,模式,内模式三级。这是DBMS的内部结构。
外模式(也叫external schema、子模式,用户模式)
用户(也就是程序员和使用者)最终看到和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是和某个应用有关的数据的逻辑表示。通常是模式的子集。一个数据库可以有多个外模式,因用户不同,故外模式的描述也不同。同一个外模式可以让某个用户的多个应用系统使用,但是一个应用系统只能使用一个外模式。
模式(schema)
模式也叫逻辑模式,是对DB中全体数据的逻辑结构和特征的总体描述,位于DBS的中间层,不关乎物理实现也不关乎应用程序或者程序语言,仅仅涉及到对型(下一个问题回答什么是型)的描述。是数据在逻辑上的视图,记住:一个DB只有一个模式。模式的一个具体值为一个实例(instance),一个模式可以多个实例。内模式(也叫internal schema,存储模式,storage schema)
一个DB只有一个内模式,关乎数据的物理结构和存储方式。DBMS提供内模式描述语言(内模式DDL,或者存储模式DDL)来严格定义内模式。
(2)两级映像
为在数据库系统内部实现3个层次的联系和转化,DBMS提供了三级模式间的两层映像。他们有效组织管理数据,提高了数据库的逻辑独立性和物理独立性。
- 外模式/模式映像
同一个模式可有任意多个外模式,每一个外模式在DBS中都对应有(局部逻辑结构)外模式/模式映像,它定义了对应关系。当模式改变(如增加新关系,属性,改变数据类型等),DBA可以对外模式/模式映像做相应改变,使外模式不变,应用程序根据数据的外模式编写,所以应用程序不必修改,实现了数据和应用程序的逻辑独立性。
- 模式/内模式映像
一个DB只有一个模式,并且只有一个内模式,故模式/内模式映像唯一。它定义全局逻辑结构和物理存储的对应关系,DB存储结构变化(内模式变化),DBA对模式/内模式映像相应做修改实现模式不变,从而应用程序不变,就保证数据和应用程序的物理独立性。
(3)三层模型
三层模型依次是概念模型、逻辑模型和物理模型。
对于概念模型,最主要的工作就是要了解客户需求做E-R图;
对于逻辑模型,就是选择用什么类型的数据库,是用层次、网状还是关系型数据库,由于现在都是用的关系型数据库,比如说是Oracle、Mysql和sqlserver都是关系型数据库,也就是说我们在为客户设计数据库系统时不用考虑逻辑模型;
对于物理模型,物理模型就是在逻辑模型阶段选定的数据库上把E-R图来具体实现。
30.脏数据
在数据库技术中,未提交的随后叉被撤销的数据即为脏数据。
31.SQL中except、intersect用法
EXCEPT 返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值)。
INTERSECT 返回 两个结果集的交集(即两个查询都返回的所有非重复值)。
UNION返回两个结果集的并集。
MINUS运算符,用于从另一个结果集中减去一个结果集
1 | { (<SQL-查询语句1>) } |
32.外连接sql语句
外连接分为三种:
(1)左外连接
1 | SELECT * FROM 表1 LEFT JOIN 表2 ON 条件; |
(2)右外连接
1 | SELECT * FROM 表1 RIGHT JOIN 表2 ON 条件; |
(3)全外连接
1 | SELECT * FROM 表1 FULL JOIN 表2 ON 条件; |
on后面接的是连接的条件,若要加其他限制条件,后面再用where即可。
33.数据库四大功能
(1)数据定义
数据定义用到CREATE(生成)、DROP(删除)、ALTER(修改,仅可以对表格使用);其对象就是模式(SCHEME)、表格(TABLE)、视图(VIEW)、索引(INDEX)。
(2)数据查询
select
(3)数据操纵
到操纵这里主要是对元组进行操作
INSERT INTO 插入
UPDATE SET 修改
DELETE FORM 删除
(4)数据控制
数据控制是数据的授权和回收,用到GRANT,和REVOKE
34.函数依赖集F和G等价的充要条件
F的闭包和G的闭包相同
35.数据库事务隔离级别
隔离级别 | 脏读(Dirty Read) | 不可重复读(NonRepeatable Read) | 幻读(Phantom Read) |
---|---|---|---|
读未提交(Read uncommitted) | 可能 | 可能 | 可能 |
读已提交(Read committed) | 不可能 | 可能 | 可能 |
可重复读(Repeatable read) | 不可能 | 不可能 | 可能 |
可串行化(Serializable ) | 不可能 | 不可能 | 不可能 |
36.SQL语句
(1)外键约束
- sql语句创建表的同时添加外键约束
1 | CREATE TABLE tb_UserAndRole --用户角色表 |
- 添加外键约束
1 | ALTER TABLE pc ADD CONSTRAINT fk_cpu_model |
第一行是说要为pc表设置外键,给这个外键起一个名字叫做fk_cpu_model;第二行是说将本表的cpumodel字段设置为外键;第三行是说这个外键受到的约束来自于parts表的model字段。
如果我们试着CREATE一台pc,它所使用的 cpu 的型号是 parts 表中不存在的,那么 MySQL 会禁止这台 PC 被 CREATE 出来。
(2)创建带主键和约束的表
1 | CREATE TABLE Student |
(3)级联操作
考虑以下这种情况:
技术人员发现,一个月之前输入到 parts 表中的某个系列的 cpu (可能有很多款)的型号全都输错了一个字母,现在需要改正。我们希望的是,当 parts 表中那些 Referenced Column 有所变化时,相应表中的 Referencing Column 也能自动更正。
可以在定义外键的时候,在最后加入这样的关键字:
1 | ON UPDATE CASCADE; |
即在主表更新时,子表(们)产生连锁更新动作,似乎有些人喜欢把这个叫“级联”操作。
如果把这语句完整的写出来,就是:
1 | ALTER TABLE pc ADD CONSTRAINT fk_cpu_model |
除了 CASCADE 外,还有 RESTRICT(禁止主表变更)、SET NULL(子表相应字段设置为空)等操作。(见17)
37.数据不一致的根本原因
由于数据冗余,有时修改数据时,一部分数据修改,而另一部分没有修改,造成同一种数据有多个值,产生数据不一致。
38.函数依赖
函数依赖简单点说就是:某个属性集决定另一个属性集时,称另一属性集依赖于该属性集。
函数依赖是由数学派生的术语,它表征一个属性或属性集合的值对另一个属性或属性集合的值的依赖性。需要强调的是,函数依赖是关系所表述信息本身具有的语义特性,而不能由属性构成关系的方式来决定,也不能由关系的当前内容所决定
39.零散知识点
在包上的投影运算比在集合上的投影运算效率更高
默认情况下,UNION运算去除重复元组
R∩S运算等价于R-(R-S)
对数据库并发操作有可能会读出脏数据
数据操作是指对DB的查询和更新两大操作
SQL语言有两种使用方式:交互式和嵌入式
函数依赖完备的推理规则集包括:自反律,增广律,传递律
事务的原子性是由DBMS的事务管理程序实现的
判断一个并发调度是否正确,可用并发事务的可串行化概念来衡量
与IN等价的是some
缓冲区管理程序是由DBMS的存储管理程序实现的
数据按外模式的描述提供给用户,按内模式的描述存储在磁盘中,而概念模式提供了连接这两级的相对稳定的中间观点,并使得两级中任何一级的改变都不受另一级的牵制。
关系代数里面用AND/OR
在数据库系统中对存取权限的定义称为授权
select语句执行结果是:表
关系代数表达式的优化策略中,首先要做的是尽早执行选择运算
事务的隔离性是由DBMS的并发控制子系统实现
数据库的逻辑模型设计阶段,任务是将总体ER模型转换成关系模型
在函数依赖中,平凡函数依赖可由推理规则的自反律推出
SQl中安全机制主要有两个,一个是视图,另一个是用户权限
在关系代数运算中,当查询涉及到”否定”时,用到差操作
当数据库被破坏后,如果事先保存了日志文件和数据库的副本,就有可能恢复数据库。
数据库在磁盘上的基本组织形式是文件
数据库技术中,独立于计算机系统的模型是ER模型
关系模式R中若没有非主属性,则R属于3NF,不一定是BCNF
一个好的设计模式应该符合以下三条原则:表达性、分离性、最小冗余性
数据库管理系统保证数据安全的主要措施是进行存取控制
判定事务并发执行正确性的准则是:满足可串行化调度
在DBS中,DBMS和OS之间的关系是:DBMS调用OS
DBMS中实现事务持久性的子系统是:恢复管理子系统
当关系R和S自然连接时,能够把R中原本该舍弃的元组放到结果关系中的操作是:外连接
一个数据库系统必须能够表示实体和联系,联系可以与1个或1个以上的实体有关
SQL语句嵌入在高级语言程序中时,必须加上前缀标志:EXEC SQL
当数据的物理存储结构改变时,应用程序不变,而由DBMS处理这种改变,这是指数据的物理独立性。
40.分解成BCNF的算法
例:关系模式R<U,F>,其中:U={A,B,C,D,E},F={A→C,C→D,B→C,DE→C,CE→A},将其分解成BCNF并保持无损连接。
解:
① 令ρ={R(U,F)}。
② ρ中不是所有的模式都是BCNF,转入下一步。
③ 分解R:R上的候选关键字为BE(因为所有函数依赖的右边没有BE)。考虑A→C函数依赖不满足BCNF条件(因A不包含候选键BE),将其分解成R1(AC)、R2(ABDE)。计算R1和R2的最小函数依赖集分别为:F1={A→C},F2={B→D,DE→D,BE→A}。其中B→D是由于R2中没有属性C且B→C,C→D;DE→D是由于R2中没有属性C且DE→C,C→D;BE→A是由于R2中没有属性C且B→C,CE→A。又由于DE→D是蕴含关系,可以去掉,故F2={B→D,BE→A}。
分解R2:R2上的候选关键字为BE。考虑B→D函数依赖不满足BCNF条件,将其分解成R21(BD)、R22(ABE)。计算R21和R22的最小函数依赖集分别为:F21={B→D},F22={BE→A}。
由于R22上的候选关键字为BE,而F22中的所有函数依赖满足BCNF条件。故R可以分解为无损连接性的BCNF如:ρ={R1(AC),R21(BD),R22(ABE)}
41.between and
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
包括边界值,即求闭区间
42.where、Having、on区别
where和having子句的区别
where 不能放在group by后面
having 是跟group by连在一起用的,放在group by 后面,此时的作用相当于where
where 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING可以。
查询过程中聚合函数(SUM,MIN,MAX,AVG,COUNT)要比having子句优先执行;where子句在查询过程中执行优先级别优先于聚合函数
where和on的区别
在使用inner join(内连接)没有区别,但是 在使用left jion时,on和where条件的区别如下:
- on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。(返回左表全部记录)。此时可能会出现与右表不匹配的记录即为空的记录。
- where条件是在临时表生成好后,再对临时表进行过滤的条件。
43.游标
游标是系统为用户开设的一个数据缓冲区,用来存放SQL语句的执行结构。其步骤为:(1)声明游标。(2)打开游标。(3)关闭游标
44.关系代数表达式的优化策略
尽可能早的执行选择、同时计算一连串的选择和投影、把笛卡儿积和随后的选择合并成连接运算
45.实体完整性约束实现技术不能使用视图
完整性约束是对基本数据的正确性和相容性的限制,以防止不正确的数据进行数据库。实体完整性约束和参照完整性约束其约束条件就是对数据的限定,触发器是程序机制,可通过代码实现数据更新时的条件判定,以灵活全面的方式实现复杂的数据约束。虽然视图也会因为建立时有WITH CHECK OPTION谓词,而在对视图的更新时带入该谓词条件,但只能是作为对基本表更新的附加条件或缺省数据,不能看作是约束。