文档详情

数据库原理及应用 第章 完整性约束.ppt

发布:2017-06-17约1.34万字共60页下载文档
文本预览下载声明
DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · 在Doctor关系中包含有外码Deptno 某元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作,和应用环境的语义是相符 4.3 完整性约束的定义 DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · 级联策略(CASCADE) 以4-15中的外码定义为例 用户试图删除Medicine中的一条记录。若该记录在Mno属性列的值仍然在RecipeDetail的某一元组中存在,则系统自动将RecipeDetail中所有此类元组删除 例如,删除了Medicine中药品编号为314418的记录,则系统自动将RecipeDetail中所有药品编号为314418的记录都删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。 4.3 完整性约束的定义 DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · 用户试图修改Medicine中的一元组在Mno属性列的分量值。若修改前的Mno值在RecipeDetail的某一元组中存在,则系统自动将RecipeDetail中这些元组在Mno列的值该为新值 例如,用户将药品编号为314418的记录改为314172,则系统自动将RecipeDetail中所有药品编号为314418的记录都改为314172。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去 4.3 完整性约束的定义 DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · 用户试图向RecipeDetail插入一条新的元组,该元组在Mno属性列上非空,且属性列的值在Medicine的任何元组中都不存在,则系统自动首先在Medicine中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组 例如,用户向RecipeDetail关系插入(1282317,50000,1),系统首先向Medicine关系新增药品编号为50000的元组,然后再向RecipeDetail关系插入(1282317,50000,1)元组。 4.3 完整性约束的定义 DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · 【例4-17】 CREATE TABLE RecipeDetail{ Rno VARCHAR(10), Mno VARCHAR(10) NOT NULL, Mamount DECIMAL(18,0), PRIMARY KEY(Rno,Mno), FOREIGN KEY(Mno)REFERENCE Medicine(Mno) ON DELETE CASCADE ON UPDATE CASCADE } 4.3 完整性约束的定义 DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · 在有些RDBMS中,修改关系主码的操作是不允许的。只能先删除该元组,然后再把具有新主码值的元组插入到关系中。若RDBMS允许修改关系主码,则必须保证主码的唯一性和非空,否则拒绝修改。 4.3 完整性约束的定义 DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · 参照完整性的实现 RDBMS在实现参照完整性时 需要向用户提供定义主码、外码的机制 向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法 4.3 完整性约束的定义 DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · 【例4-18】 CREATE DOMAIN SexVal CHAR(2) CHECK (VALUE IN(男, 女)); CREATE TABLE Patient{ Pno VARCHAR(10), Pname VARCHAR(50) NOT NULL, Psex SexVal, Page INT, Pino VARCHAR(50), Pid VARCHAR(18), PRIMARY KEY(Pno)} 4.3.6 域约束 4.3 完整性约束的定义 DataBase@UESTC 电子科技大学 · 计算机科学 · 数据库 · CREATE ASSERTION 断言名 CHECK谓词 【例4-21】 Create assertion salarycheck CHECK( Not exists( Select * from Doctor x Where Dsalary = some ( select Dsalary from Doctor y Where x.Deptno=y.Deptno
显示全部
相似文档