如何实现数据库完整性_第1页
如何实现数据库完整性_第2页
如何实现数据库完整性_第3页
如何实现数据库完整性_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

如何实现数据库完整性 SQL 中的完整性约束 SQL 把各种完整性约束作为数据库模式定义的一部分 既有效防止了对数据库的意外破坏 提高了完整性检测的效率 又可以减轻编程人员的负担 SQL 对三种不同完整性约束的设置及检测 采取了不同的方式加以实现 下面分别介绍 1 实体完整性和主码 实体完整性规定 主码的任何属性都不能为空 因为 概念模型中实体和联系都是可区分 的 而且它们以码为唯一性标识 如果 主码的属性值可以为空 则意味着在概念模型中 存在着不以码为唯一性标识的实体 这显然是前后矛盾的 那么怎样保证实体完整性呢 SQL 中实体完整性是通过主码来实现的 一旦某个属性或属 性组被定义为主码 该主码的每个属性就不能为空值 并且在关系中不能出现主码值完全 相同的两个元组 主码的定义是在 Create Table 语句中使用 Primary Key 关键字来实现的 方法有两种 a 在属性定义后加上关键字 Primary Key b 在属性表定义后加上额外的定义主码的子句 Primary Key 说明 如果主码仅由一个属性组成 上述两种方法都可定义 若由两个或以上的属性组成 则 只能用上述第二种方法定义了 对于候选码的说明方法 可以用 Unique 说明该属性的值不能重复出现 Unique 的使用 与 Primary Key 相似 一个表中只能有一个主码定义 但可以有多个 Unique 说明 SQL 中 并没有强制为每个关系指定主码 但为每个关系指定主码通常会更好一些 因 为主码的指定可以确保关系的实体完整性 2 参照完整性约束与外部码 参照完整性是对关系间引用数据的一种限制 即 若属性组 A 是基本关系 R1 的外码 它与 基本关系 R2 的主码 K 相对应 则 R1 中每个元组在 A 上的值必须 要么取空值 要么等于 R2 中某元组的主码值 一 外部码约束的说明 SQL 中就是利用外部码的说明来实现参照完整性约束 限制表中某些属性的取值的 外部 码的说明也有两种方法 1 在该属性的说明后直接加上关键字 REFERENCES 其中表名称为 参照关系名 属性名称为参照关系的主码 2 在 Create Table 语句的属性清单后 加上外部码说明子句 格式为 FOREIGN KEY REFERENCES 上式中的属性名表 1 和属性名表 2 中属性可以多于一个 但必须前后对应 二 参照完整性约束的实现策略 前面讲了 外部码的取值只有两种情况 要么取空 要么取参照关系中的主码值 可是当 用户操作违反了这个规则时 如何保持此约束呢 SQL 提供了三种可选方案 1 RESTRICT 限制策略 当用户对表进行违反了上述完整性约束 条件的插入 删除或修改操作时 将会被系统拒 绝 2 CASCADE 级联策略 当对参照关系进行删除和修改时 SQL 所提供的一种方案 在这种策略下 当删除或修改 参照关系中某元组的主码值时 被参照关系中 那些外部码具有该值的元组也将被删除或 修改 以保证参照完整性 3 SET NULL 置空策略 置空策略也是针对参照关系的删除或修改操作的 在这种策略下 当删除参照关系中的某 一元组或修改某一元组的主码值时 被参照关系中外码值等于该主码值的元组在该外码上 的值将被置空 说明 当用户不指定参照完整性的实现策略时 一般被默认为 RESTRICT 限制策略 实现策略的 说明通常被加在外部码的说明后面 格式为 ON DELETE SET NULL ON UPDATE CASCADE 3 用户自定义完整性约束 对于用户自定义完整性约束 SQL 提供了非空约束 对属性的 CHECK 约束 对元组的 CHECK 约束 触发器等来实现用户的各种完整性要求 1 非空约束 在 CRETE TABLE 中的属性定义后面加上 NOT NULL 关键字即定义了该属性不能取空值 2 基于属性的 CHECK 约束 使用 CHECK 检查 子句可保证属性值满足某些前提条件 其一般格式为 CHECK 它既可跟在属性定义的后面 也可在定义语句中另增一子句加以说明 如 CHECK age 18 AND age 65 CHECK sex IN 男 女 CHECK dno IN select dno from department 从上例中可以看出 CHECK 子句的条件中还可以带子查询 3 基于元组的 CHECK 约束 基于元组的 CHECK 约束往往要涉及到表中的多个域 所以它是元组约束 在对整个元组完 成插入或对某一元组的修改完成之后 系统将自动检查是否符合 CHECK 条件表达式 若不 符合条件 系统将拒绝该插入或修改操作 基于元组 CHECK 约束的说明方法是在 CREATE TABLE 语句中的属性表 主码 外部码的说明 之后加上 CHECK 子句 4 约束的更新 约束与数据库中的表和视图一样 可以进行增 删 改的更新操作 为了改和删约束 需 要在定义约束时对其进行命名 在各种约束的说明前加上关键字 CONSTRAINT 和该约束的 名称即可 例如 在 employee 表的 create table 语句中 eno char 4 CONSTRAINT PK employee PRIMARY KEY dno char 4 CONSTRAINT FK employee FOREIGN KEY REFERENCES department dno 当对各种约束进行命名后 就可以用 ALTER TABLE 语句来更新与属性或表有关的各种约束 如 ALTER TABLE employee DROP CONSTRAINT FK employee ALER TABLE Salary ADD CONSTRAINT RightSalary CH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论