资料库系统 L4-中级资料库
4-1 关联表达式
Joined Relations(结合关係)
连结操作(Join operations):取两个关係,将结果返回另一个关係
利用笛卡尔乘积,将两个元组匹配
通常在 from 后做子查询表达式
连接条件(Join condition):定义两个关係中哪个元组匹配,连接结果存在那些属性
course inner join prereqoncourse.course_id= prereq.course_id
Outer Join(外结合)连结操作的延展,避免资料的丢失Left Outer Join(左外结合)
course left outer join prereq oncourse.course_id= prereq.course_id




4-2 视图
限定资料库用户可浏览的虚拟关係
视图定义(View Definition)
定义一张视图(View)
create view v as < query expression >
query expression为SQL表达式 v为视图名称
範例
对没有薪水的讲师的视图create view faculty asselect ID, name, dept_namefrom instructor
查找生物学的所有讲师select namefrom facultywhere dept_name= ‘Biology’
创建部门薪资总额视图create view departments_total_salary(dept_name, total_salary) as select dept_name, sum (salary) from instructor group by dept_name;
利用视图定义其他视图
如果在 v1 视图中定义 v2,则视图 v1 依赖于视图 v2如果视图依赖本身则表示递迴查看表达式的扩展重複以下替换步骤repeat Find any view relation vi in e1 Replace the view relation vi by the expression defining vi until no more view relations are present in e1
视图的更新
为我们定义的教师视图添加一个新的元组insert into faculty values (’30765’, ’Green’, ’Music’)
允许简单的视图上更新FROM 子句只有一个数据库关係Select 子句仅包含关係的属性名称,并且没有任何表达式,聚合或不同的规範未在 SELECT 子句中列出的任何属性可以设置为 NUL查询没有组或具有子句的组4-3 交易次数
完整性约束
确保数据库资料的一致性,不会因为缺是数据导致损害
1.客户必须有非空的电话号码2.银行薪资必须至少4美元
单一关係的限制
not null:不得为空name varchar(20) not null
unique( A1, A2, ..., Am):指出唯一的规格check (P):确保资料的限定create table section (course_idvarchar (8),sec_idvarchar (8),semester varchar (6),year numeric (4,0),building varchar (15),room_number varchar (7),time slot id varchar (4),primary key (course_id, sec_id, semester, year),check(semester in (’Fall’, ’Winter’, ’Spring’, ’Summer’));
参照完整性
关联的两个表中,被关联的属性会互相影响,不可单独删除或增加
A 为一组属性。R 和 S 两个包含属性 A 的关係,其中 A 是 S 的主要键。如果对于所出现的任何值,这些值也会出现在 S 中的所有值也会出现。
create table course ( course_idchar(5) primary key,title varchar(20), dept_name varchar(20) references department)
4-4 诚信约束(?)
检查条款check (time_slot_idin (select time_slot_idfrom time_slot))
4-5 SQL 数据与类型
资料类型date: 日期,(4位数)年,月和日期date '2005-7-27'
time::一天中的时间,以小时,分钟和秒time '09:00:30' time '09:00:30.75'
timestamp:日期加上一天的时间timestamp '2005-7- 27 09:00:30.75'
interval:一段时间nterval '1' day
用户类型定义(?)create type Dollarsas numeric (12,2) final
域(?)类型和域是相似的。域可以具有约束,例如指定不是null大物件类型大物件:照片,视频,CAD文件等大型档案blob:二进制的大物件clob:大型字串数据查询大物件时,返回的是指标而非大物件本身4-6 授权
资料库的部分授权形式read:允许阅读,但不能修改资料insert: 允许插入新资料,但不能修改现有数据update:允许修改,但不能删除资料delete:允许删除数据修改数据库架构的授权形式index:允许创建和删除索引resources:允许创造新关联alteration :允许在关联中添加或删除属性drop:允许删除关联SQL的授权规範grant<privilege list>on <relation name or view name> to<user list>
<user list>:user-id* 视图的授权并不代表基础关联的任何授权
SQL的特权
select:允许读取关联的访问,或使用视图查询的能力
EX:予许U1~3的查询关联的授权
grant select on instructor to U1, U2, U3
insert:插入元组的权限update:使用UPDATE语句的更新功能delete:删除元组的权限all privileges:允许所有权限在SQL中撤销授权
revoke on fromrevoke select on branch from U1, U2, U
可以全部撤消的所有权限。如果包含public,所有用户会失去权限角色
向角色授权grant select on takes to instructor;
角色可授权其他角色或用户•create role student•grant instructor to Amit;•create role dean;•grant instructor to dean;•grant dean to Satoshi;
授权视图
create view geo_instructor as(select *from instructorwhere dept_name= 'Geology');
转让特权grant select on department to Amit with grant option;revoke select on department from Amit, Satoshi cascade;revoke select on department from Amit, Satoshi restrict;