完整性约束
保证授权用户对数据库做修改时不会破坏数据一致性。
1、域约束
每个属性都必须对应于一个所有可能的取值构成的域。
create domain account-number char(10)
constraint account-type-test
check(value in ("Checking","Saving"))
2、参照完整性
一个关系中给定属性集上的取值也在另一个关系的某一属性集的取值中出现,这一条件称为参照完整性。
3、断言
create assertion sum-constraint check
(not exists(select * from branch
where(select sum(amount) from loan
where loan.branch-name=branch.branch-name
>=(select sum(amount) from account
where account.branch-name=branch.branch-name)))
如果断言复杂,则检测会带来相当大的开销。
4、触发器
define trigger overdraft on update of account T
(if new T.balance<0
then (insert into loan values
(T.branch-name,T.account-number,-new T.balance)
insert into borrower
(select customer-name,account-number
from depositor
where T.account-number=depositor.account-number)
update account S
set S.balance=0
where S.account-number=T.account-number))
5、函数依赖
a) 用于指明合法关系集上的约束。这样就可以只考虑满足给定函数依赖集的那些关系。如果希望只局限于模式R上满足函数依赖集F的关系,我们说R上F成立。
b) 用于检测关系是否在给定函数依赖集上合法。如果关系r在函数依赖集F上合法,则称r满足函数依赖集F。