要在数据库并发控制下保持数据库的一致性。
通过保证所执行的调度的效果与没有并发执行的调度效果一样,可以确保数据库的一致性。
改为第三范式分解
not null,unique,check,参照完整性。
设计选择:更小的模式
没有足够的属性以形成主码的实体集称作弱实体集,在E-R图中弱实体集的分辨符以虚下划线标明
利用Where子句,A/B,表示为 not exists(B except A)
自然连接是在笛卡尔积的基础上保留相同属性下取值相同的元组,而等值连接可以在笛卡尔积的基础上自由选择比较的属性。
由于r和s的自然连接是在迪克尔积的基础上进行相同属性的取值相同进行筛选元组,所以没有相同的属性就不用删除元组了,所以最终结果和笛卡尔积记过一样。
活动状态 → \rightarrow →部分提交状态 → \rightarrow →失败状态 → \rightarrow →中止
学校教务管理系统首先创建每个学院单独的视图,然后将对应学院的视图的权限赋给对应的教务负责人。
利用触发器,触发事件是delete from 学生 where 学号=“***”;然后就删除选课信息表中学号是退学学生的学号的元组。
门店( 门 店 编 号 ‾ \underline{门店编号} 门店编号,名字,地址)
员工( 员 工 编 号 ‾ \underline{员工编号} 员工编号,员工名字,员工电话,工资)
商品( 商 品 编 号 ‾ \underline{商品编号} 商品编号,商品名字)
拥有( 门 店 编 号 ‾ \underline{门店编号} 门店编号, 商 品 编 号 ‾ \underline{商品编号} 商品编号, 数 量 ‾ \underline{数量} 数量)门店编号是参照关系门店的外码,商品编号是参照关系商品的外码。
工作( 员 工 编 号 ‾ \underline{员工编号} 员工编号,门店编号)门店编号是参照关系门店的外码
管理( 普 通 员 工 ‾ \underline{普通员工} 普通员工,店长)店长是参照关系员工的外码
不是,因为T2,T5,T4,T1形成了一个环。
B,C,A,E,G,D,H
R的正则覆盖为Fc={AH → \rightarrow →C,C → \rightarrow →ADEGH,EH → \rightarrow →C}
分解的3NF是:
(A,C,H),(A,C,D,E,G,H),(E,H,C)
由于(A,C,H)包含在(A,C,D,E,G,H)所以可以删除(A,C,H)
没有候选码(B,C)所以再增加一个模式(B,C)
综上所述为:
(A,C,D,E,G,H)
(E,H,C)
(B,C)
###1、分别用关系模式和SQL语句查询;玩家“wxy"下载的所有游戏的名称。
select Gname
from (PERSON natural join PG) natural join GAME
where Pname='wxy';
∏ G n a m e ( σ P n a m e = ′ w x y ′ ( G A M E ∞ P E R S O N ∞ P G ) ) \begin{matrix} \prod_{Gname}\end{matrix}(\sigma_{Pname='wxy'}(GAME\infty PERSON \infty PG)) ∏Gname(σPname=′wxy′(GAME∞PERSON∞PG))
select Gname,count(Pid)
from GAME natural join PG
group by Gname
having count(Pid)>500
∏ G n a m e ( σ c _ p i d > 500 ( ρ c o u n t g a m e ( G n a m e , c _ p i d ) ( ( G n a m e ) g c o u n t ( P i d ) ( G A M E ∞ P G ) ) ) ) \begin{matrix} \prod_{Gname}\end{matrix}(\sigma_{c\_pid>500}(\rho_{countgame(Gname,c\_pid)}((Gname)g_{count(Pid)}(GAME \infty PG)))) ∏Gname(σc_pid>500(ρcountgame(Gname,c_pid)((Gname)gcount(Pid)(GAME∞PG))))
(select distinct Pname
from PERSON natural join PG
where Gid='G01')
except
(
select distinct Pname
from PERSON natural join PG
where Gid='G02'
);
∏ P n a m e ( σ G i d = ′ G 0 1 ′ ( P E R S O N ∞ P G ) − ∏ P n a m e ( σ G i d = ′ G 0 2 ′ ( P E R S O N ∞ P G ) ) \begin{matrix} \prod_{Pname}\end{matrix}(\sigma_{Gid='G01'}(PERSON \infty PG)-\begin{matrix} \prod_{Pname}\end{matrix}(\sigma_{Gid='G02'}(PERSON \infty PG)) ∏Pname(σGid=′G01′(PERSON∞PG)−∏Pname(σGid=′G02′(PERSON∞PG))
∏ P i d , G i d ( P G ) ÷ ∏ G i d ( σ t y p e = ′ 益 智 类 ′ ( G A M E ) ) \begin{matrix} \prod_{Pid,Gid}\end{matrix}(PG) \div \begin{matrix} \prod_{Gid}\end{matrix}(\sigma_{type='益智类'}(GAME)) ∏Pid,Gid(PG)÷∏Gid(σtype=′益智类′(GAME))
select GAME
from PERSON natural join PG natural join GAME
where age>=15 and age<=25;
insert into PG values ({'p01','G02'});
利用update更新操作。
update GAME
set type=' '
where Gid=' ';