第章 完整性与安全性.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第章 完整性与安全性

第6章: 完整性与安全性 域约束 参照完整性 断言 触发器 安全性 授权 SQL中的授权 域约束 完整性约束用来保证数据库中数据被更新时不破坏数据的正确性和一致性. 域约束是完整性约束的最基本形式. 可用于检测插入到数据库中的数据的合法性, 或用于查询中检测两个数据进行比较时的合法性. 从现有数据类型可以创建新的域 E.g. create domain Dollars numeric(12, 2) create domain Pounds numeric(12,2) 上面这两种类型的值不能进行比较或赋值. 但我们可以转换类型 (cast r.A as Pounds) (当然应该再乘上美元到英镑的汇率) 域约束 (续) SQL-92的check子句允许对域作限制: 利用check 子句确保“小时工资”域只允许大于指定值的值. create domain hourly-wage numeric(5,2) constraint value-test check(value = 4.00) 这个域具有约束:小时工资大于 4.00 子句constraint value-test 使可选的; 可用于指示以后的更新破坏了哪一条约束. 可有更复杂的域检查条件 create domain AccountType char(10) constraint account-type-test check (value in (‘Checking’, ‘Saving’)) check (branch-name in (select branch-name from branch)) 参照完整性 确保一个关系中某些属性上的值必须在另一个关系中的某些属性上出现. 例如: 若 “Perryridge” 是出现在account 关系某元组中的分行名, 则在关系branch 中必存在关于“Perryridge” 的元组. 形式定义 令关系 r1(R1) 和r2(R2) 的主键分别是 K1 和 K2 . R2 的属性子集 ? 称为引用关系r1中K1的外键, 如果对r2中的每一条元组 t2 i必须存在一条r1的元组 t1 使得 t1[K1] = t2[?]. 参照完整性约束也称为子集依赖, 因为它可以写成 ?? (r2) ? ?K1 (r1) E-R 模型中的参照完整性 考虑实体集E1 和E2之间的联系集R . 对应于R 的关系模式包含E1的主键K1和E2的主键K2. 则 K1与K2分别是引用对应于E1 和E2的关系模式的外键. 弱实体集也是参照完整性约束的来源之一. 因为对应于弱实体集的关系模式必须包含它所依赖的实体集的主键. 数据库更新时检查参照完整性 为了保持参照完整性约束必须尽心如下检查: ?? (r2) ? ?K (r1) 插入. 如果元组 t2 被插入到r2, 则系统必须确保r1中存在元组 t1 使得 t1[K] = t2[?]. 即 t2 [?] ? ?K (r1) 删除. 如果从r1删除元组t1, 则系统必须计算r2中引用t1的元组集合 : ?? = t1[K] (r2) 如果此集合非空, 则要么认为出错而拒绝删除命令, 要么删除这些引用t1的元组(级联删除). 数据库更新 (续) 修改. 有两种情况: 如果修改关系r2中的元组 t2 并且修改了外键?的值, 则作类似于插入情况的检查. 令 t2’ 表示元组t2的新值. 系统必须确保 t2’[?] ? ?K(r1) 如果修改关系r1中的元组 t1并且修改了主键K的值, 则作类似于删除情况的检查. 系统必须利用t1在修改前的旧值计算 ?? = t1[K] (r2) 若此集合非空, 则要么认为出错而拒绝修改, 要么对此集合中的元组作级联修改, 要么删除此集合中的元组. SQL中的参照完整性 可以在create table语句中声明主键, 候选建和外键: create table语句的primary key 子句列出构成主键的属性. create table语句的unique key 子句列出构成候选键的属性. create table语句的foreign key 子句列出构成外键的属性以及被此外键引用的关系. SQL中的参照完整性 – 例 create table customer (customer-name char(20), customer-street char(30), customer-city char(30), primary key (customer-name)) create table branch (branch-nam

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档