数据库期末复习(6-9章)
来源:互联网 发布:手机qq监控软件 编辑:程序博客网 时间:2024/05/17 21:44
第6章 关系代数
目录
一个恒定的关系
* E1∪E2
* E1-E2
* E1×E2
* σF(E1),F是E1属性的谓词
* ∏A(E1),A是包含E1的一些属性的一个列表
* ρX(E1),X是E1的结果的一个新名字
<Relational exp>::= RELATION {<Tuple exp commalist>} |<relvar name> |<relational operation> |(<relational exp>)<relational operation>::=<project>|<nonproject><project>::=<relational exp>{[All But] <attr name commalist>}<nonproject>::=<rename>|<union>|<intersect>|<minus>|<times>|<restrict>|<join>|<divide><rename>::=<relational exp>RENAME <renaming commalist><union>::<relational exp> UNION <relational rxp><intersect>::=<relational exp>INTERSECT <relational exp><minus>::=<relational exp>MINUS <relational exp><times>::=<relational exp>TIMES <relational exp><restrict>::=<relational exp> WHERE <relationla exp><join>::= <relational exp> JOIN <relationla exp><divide>::=<relational exp> DIVIDEBY <relational exp> PER <per><per>::= <relational exp>|(<relational exp>,<relational exp>)
* 记号:σF(r)
r WHERE F
* F称为选择谓词
* 定义为:σF(r)={t|t∈r and F(t)}
* 其中f是命题演算中包含的术语的公式:^(and),∨(or),┐(not)
* 每一项都是以下之一
<attribute> op <attribute> or <constant>,其中op是:=,≠,>,≥,<,≦
* 选择例子:$\sigma_{city}="London"(S)$
Project操作
* 记号:$\prod{A_1,A_2,...,A_k}(r)$
* 结果为k列关系,其中有些关系没有列出的被擦除掉了
* 结果中删除了重复行,因为关系是集合
* E.g.擦除S的城市属性:$\prod{s \sharp,sname,status}(S)$
* 记号:r∪s
* r union s 定义为:r∪s={t|t∈r or t∈s}
* 若r∪s有效,r,s必须有相同的数量,属性域必须兼容
* E.g.找到所有城市的供应商或部分:$\prod{city}(S)\cup\prod{city}(P)$
* 记号r-s r minus s
* 定义为 r-s={t|t∈r and t≠s}
* 集合差必须在兼容的关系间定义
* 记号:r ∩s r intersect s
* 定义为 r∩s={t|t∈ and t∈s}
* 假设:r,s有相同的数量,r和s的属性兼容
* r∩s=r-(r-s)
* 记号:r×s t times s
* 定义为r×s={t q|t∈r and q∈s}
* 对于r×s,假设r(S)和s(S)的属性是不相交的
* 如果r(R)和s(S)的属性是不相交的,则必须使用重命名
* ρX(E)返回在名字X下的表达式E
* 如果一个关系代数表达式E的数量为n,那么$ρ_X(A1,A2,...An)(E)$返回在名字X下的表达式E,带有重命名为A1,A2,…的属性值
* $σ_status>20(S) \quad S\, WHERE\, status>20$
为每个供应商的状态找到大于20的供应商状态
* $\prod{s\sharp}(\sigma_{status}>20(S))$
S WHERE status>20{s#}
查找所有供应商、所有零件或两者的城市
* $\prod{city}(S)\cup\prod{city}(P)$
S{city} union P{city}
查找所有拥有供应商和零件的城市
* $\prod{city}(S)\cup\prod{city}(P)$
* S{city} intersect P{city}
查找在伦敦提供零件的所有供应商的数量
* $\prod{s\sharp}(\sigma{city}="London"(\sigma_{p.p\sharp=sp,p\sharp}(P\times SP)))$
查找所有供应商的城市,这些城市的状态大于20且没有零件
* $\prod{city}(\sigma_{status>20}(S))-\prod{city}(P)$
查找所有供应零件在伦敦的供应商的数量
* Query1:$\prod{s\sharp}(\sigma{city}="London"(\sigma_{p.p\sharp=sp,p\sharp}(P\times SP)))$
* Query2: $\prod{s\sharp}(sigma_{p.p\sharp=sp.p\sharp}((\sigma_{city="London"}(P))\times SP))$
查找最大零件的qty,重命名SP关系为d
* $\prod{qty}(SP)-\prod{SP.qty}(\sigma_{SP.qty<d.qty}(SP\times ρ_d(SP)))$
SP{qty} minus ((SP times (SP RENAME qty as qt1) WHERE qty<qt1){qty})
* 假设r和s分别是模式R和S上的关系,结果是R∩S上的关系,分别考虑了r中的tr元组和ts中的s。
* 如果tr和ts在R∩S的每个属性上有相同的值,一个元组t会被加到结果中,t在r上和tr有相同的值,在s上和ts有相同的值。
* 如R = (A, B, C, D),S = (E, B, D),结果模式=(A, B, C, D, E)
* r * s 定义为:r.A, r.B, r.C, r.D, s.E (r.B = s.B r.D = s.D (rx s))
* 令q为r÷s的结果,则q是满足q x s ∈ r的最大的关系
Select s#From P, SPWhere P.p#=SP.p# AND city='London'e.g.
Select s#From SPWhere p# in (Select p# From P Where city = 'London')e.g.
Select sum(SAL) From EMPe.g.
Select d#, AVG(SAL)From EMPGroup By d#Having AVG(SAL)>2000
第7章 关系演算
目录
<Range var definition>::=RANGEVAR <range var name>RANGES OVER <relational exp commlist><range attr reference>::= <range var name>.<attr reference> [AS <attr name>]<boolean exp>::=...all the usual possibilityes,together with: | <quantified boolean exp><quantified boolean exp>::= EXISTS <range var name> (<boolean exp>)|FORALL <range var name>(boolean exp>)<relational operation>::= <proto tuple>[WHERE <boolean exp>]<proto tuple> ::= <tuple exp>范围变量
RANGEVAR sx RANGES OVER S;RANGEVAR sy RANGES OVER S;RANGEVAR spx RANGES OVER SP;RANGEVAR spy RANGES OVER SP;RANGEVAR px RANGES OVER P;量词
(sx.s#,sx.status)WHERE sx.city = 'paris' ANDsx.status > 20查找所有在同一地点的供应商的供应号码组合:
(sx.s# AS SA, sy.s# AS SB)WHERE sx.city = sy.cityAND sx.s#<sy.s#查找供应零件p2的供应商的所有信息:
sx WHEREEXISTS spx (spx.s#=sx.s# AND spx.p#=p#('p2'))查找至少供应一个红色零件的供应商名称:
sx.sname WHEREEXISTS spx (sx.s#=spx.s# ANDEXISTS px (px.p#=spx.p# ANDpx.color = color('red')))查找至少有一个零件和供应商s2所供应的相同的供应商名称
sx.sname WHEREEXISTS spx ( EXISTS spy (sx.s#=spx.s# AND spx.p#=spy.p# AND spy.s#=s#('s2')))查找供应了所有零件的供应商名称:
sx.sname WHEREFORALL px (EXISTS spx (spx.s#=sx.s# AND spx.p#=px.p#))查找没有供应零件p2的供应商名称:
sx.s#WHERE NOT EXISTS spx(spx.s#=sx.s# AND spx.p#=p#('p2'))查找至少供应了所有s2供应商所供应的零件的供应商号码:
sx.s# WHERE FORALL spx(spx.s# ≠ s#('s2') OR EXISTS spy (spy.s#=sx.s# AND spy.p#=spx.p#))查找零件质量大于16磅或者由供应商s2所供应的零件号码,或者两者均满足:
RANGEVAR pu RANGE OVER(px.p# WHERE px.weight>weight(16.0)),(spx.p# WHERE spx.s# = s#('s2'));pu.p#或者px.p#WHERE px.weight>weight(16.0)OR EXISTS spx(spx.p#=px.p# ANDspx.s# = s#('s2'))
4.关系演算与关系变量比较
计算能力
(px.P#,px.weight*454 as GMWT)WHEREpx.weight*454>weight(10000.0)对每个零件,取出每一个零件号和其供货总数量:
(px.p#,SUM(spx WHERE spx.p#=px.p#,QTY) AS totqty)查找总的供货数量:
SUM(spx,QTY) AS Grandtotal对每一个供应商,取出其供应商号及其供应的零件总数量:
(sx.s#, COUNT(spx WHERE spx.s#=sx.s#)AS #_of_parts)找出保存至少5个红色零件的城市:
RangeVar py Over Ppx.city WHERE COUNT(py WHERE py.city=px.cityAND py.color=color('red'))>5
5.域演算
RANGEVAR sx, sy RANGES OVER S#;RANGEVAR px, py RANGES OVER P#;RANGEVAR namex, namey RANGES OVER name;RANGEVAR qtyx, qtyy RANGES OVER qty;RANGEVAR cityx, cityy RANGES OVER char;成员条件:R(pair, pair,...)
sx WHERE EXISTS statusx (statusx>20 AND S(s#:sx, status:statusx, city: 'Paris'))查找所有成对的住在同一城市的供应商的供应商号:
(sx AS sa, sy AS sb)WHERE EXISTS cityz(S (s#:sx, city:cityz) AND S (s#:sy, city:cityz) ANDsx < sy)
表达式的安全性
第8章 视图
目录
VAR <relvar name> VIEW <relational expression> [<candidate key definition list>];
举例:
VAR good_supplier VIEW (S WHERE status>15){s#,status,city}
VAR redpart VIEW ((P WHERE color=color('red')) {ALL BUT color} RENAME weight AS wt;
2.视图的用途
视图对于隐藏的数据自动给予安全保障;提供了一个快捷方式或者是“宏”的功能;使相同的数据可在同一时间被不同的用户以不同的方式查看;提供了逻辑上的数据独立性
视图定义结合了外部模式函数和外部模式/概念映像函数
逻辑独立性:用户或用户程序在数据库逻辑结构发生改变时的抗扰性
可成长性:已有的基本关系变量为增加新的属性而扩展;引入一个新的基本关系变量
可重构性:如果用以下两个关系变量代替S:
VAR snc BASE RELATION {s#,s#,sname name,city char} PRIMARY KEY {s#}VAR st BASE RELATION{s# s#,status integer}PRIMARY KEY {s#}则S为:VAR S VIEW snc JOIN st;
两个准则:
互换性准则:在基本关系变量和导出的关系变量中不能有随意的或不必要的区别, 如S vs snc and st
数据库相对性准则:真实数据库 vs 可表达数据库
3.视图检索
D是一个数据库,V是定义在D上的视图,则视图的定义表达式X是定义在D上的一个函数:
V = X(D)
在V上的检索为:
R(V) = R(X(D)) = X'(D)
所以,对视图的检索和对基本变量的检索没多大差别
视图实现:
物化(Materializing):X(D)拥有关系的一个副本
替代(Substitution):X(D)没有物化的副本,检索V会直接改变检索D
4.视图更新
U是V上的更新操作,则
U(V) = U(X(D))
变为 U(X(D)) = X(U'(D))
所以,视图更新更复杂了
视图更新机制要遵循的基本准则:
视图可更新性是一个语义学问题,而与语法无关;
对于视图就是基本关系变量这一特殊情况,视图更新机制必须要正确处理;
更新法则必须要用到它的地方保持对称;等。
DELETE:如果A中的元组时,如果它还在B中出现,则在B中删除
UPDATE:更新后的元组必须能满足PA或PB或同时满足两者
INSERT:新的元组必须满足PA或PB,或同时满足PA和PB
Difference、Restrict、Project、Extend、Join
5.快照
导出的关系变量,与视图相似
定义:
VAR <relvar name> SNAPSHOT <rel exp><candidate key definition list>REFRESH EVERY <now and then>
6.SQL对视图的支持
create view v as <query expression>
例如:
create view good_supplier as(select s.s#,s.status,s.cityfrom Swhere s.status>15);
Create view redpart AS select p#,pname,weight AS wt,city from P where color = 'red';
Create view PQAS select p#, SUM(qty) AS totqtyfrom SPgroup by p#;
create view city_pairAS select distinct s.city scity, p.city pcityfrom S,SP,Pwhere s.s#=sp.s# and sp.p#=p.p#
Create viewdept_summary(name,minsal,maxsal,avgsal)AS select dname,min(sal),max(sal),ave(sal)from EMP,DEPTwhere dept.d#=emp.d#group by dname;视图检索:
从redpart视图中查找所有重量大于20磅的零件:
select * from redpartwhere wt > 20;它会改变在基本关系上的操作:
select p#,pname,weight,cityfrom Pwhere color = 'red' and weight > 20;查找雇员平均工资等于2000的所有部门:
select name from dept_summarywhere avesal = 2000它会改变在基本关系上的操作:
select dname from emp, deptwhere emp.d#=dept.d#group by dnamehaving avg(sal)=2000;简单视图vs复杂视图
简单视图必须满足:不包含关键词JOIN,UNION,INTERSECT,EXCEPT,不包含关键词DISTINCT,SELECT语句只包含单列名称,子查询语句不能参照与外部查询相同的表,没有GROUP BY 语句等。
向redpart中添加新的元组:
insert into redpartvalues (p8, knife, 10, 'shanghai')
对更复杂的视图的更新比较困难或不可能,所以被禁止
大多数SQL实现只允许在简单视图上的更新(无聚集函数)
SQL使用with check option'作为更新视图定义
create view good_supplier asselect s.s#,s.status,s.cityfrom Swhere s.status>15with check option;则如下操作失败:
Update good_supplierset status=10where s#='s1';
第9章 安全性
目录
grant <privilege list>on <relation name or view name> to <user list><user list>包括:a user-id(用户id),public(允许对所有有效用户的授权)、a role(角色)
对一个视图进行授权并不意味着对其下的关系进行授权
grant select on branch to U1,U2,U3insert:
revoke <privilege list>on <relation name or view name> from <user list> [restrict|cascade]举例:
revoke select on branch from U1,U2,U3 cascade避免级联撤销的方法:采用restrict代替cascade,此时,当请求进行级联撤销时,操作会失败
审计追踪
3.强制访问控制
基于系统级别政策而不能被单一用户改变
每个数据对象都具有一定的密级
每个用户具有一定的许可证级别
在1900s受到关注,具有特定应用(军事、银行等)
对象(如表、视图、元组)
主体(如用户、用户程序)
密级:TS(Top Secret)、S(Secret)、C(Classified)、U(Unclassified)
每个主体和客体都被分为某个特定密级
Bell-LaPadulla 性质:
简单规则:(NO READ UP)用户i可以查询对象j,当且仅当i的许可证级别大于或等于j的密级
星规则:(NO WRITE DOWN)用户i可以更新对象j,当且仅当i的许可证级别等于j的密级
多级关系
multilevel relation(MLS) schema
密级属性C
元组密级TC
R(A1,C1,A2,C2,...An,Cn,TC)
橘皮书
- 数据库期末复习(6-9章)
- 数据库期末复习(1-5章)
- 数据库期末复习-(1)
- Android期末复习(4) SQLite 数据库
- 关于期末复习数据库
- 数据库期末复习
- 数据库期末复习笔记
- 数据库期末复习---SQL语言
- 数据库系统概论期末复习
- 计算机网络(期末复习)
- java期末复习(1)
- java期末复习(2)
- java期末复习(3)
- Android期末复习(1)
- Android期末复习(2)
- 人工智能(AI)期末复习
- 信息论第一章(期末复习)
- 数据库期末sql基础语句的复习
- 第十六周:( LeetCode606) Construct String from Binary Tree(c++)
- centos6/7 装 ant
- 轮播图插件swiper
- liunx 环境下安装JDK1.8
- 正则表达式手记
- 数据库期末复习(6-9章)
- ecshop首页分类树广告设置
- 零基础研究kotlin
- 6.5世界环境日!来聊聊那些你想不到的环保黑科技?
- python中的函数可变参数
- 64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本
- 对递归的一点理解
- 检验是否为BMP格式文件
- 浅析python 中__name__ = '__main__' 的作用