《(3.1.1)--3.1三类完整性的控制.pdf》由会员分享,可在线阅读,更多相关《(3.1.1)--3.1三类完整性的控制.pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库的完整性关系数据库的完整性 数据库的完整性(integrity)正确性(correctness):数据是符合现实世界主义、反映当前实际状况的;相容性(compatibility):数据库同一对象在不同关系表中的数据是符合逻辑的。数据库的完整性是防止数据库中存在不合法语义的数据,防止错误信息的输入和输出,防范对象是不合语义的数据。关系数据库的三类完整性关系数据库的三类完整性实体完整性参照完整性用户定义的完整性三类完整性的控制机制 定义完整性约束条件加在数据库之上的语义约束条件,将作为模式的一部分存入数据库中。进行完整性检查检查用户发出的操作请求是否违背了完整性约束条件。进行违约处理如果发现
2、用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。实体完整性 实体完整性规则 若属性A是基本关系R的主属性,则属性A不能取空值。关系模型的实体完整性在CREATE TABLE中用PRIMARYKEY定义。单属性构成的码的说明方法 定义为列级约束条件 定义为表级约束条件 多属性构成的码的说明方法 定义为表级约束条件CREATE TABLE Student(Sno CHAR(9)PRIMARY KEY,Sname CHAR(20)NOT NULL,Sgend CHAR(2),Sage SMALLINT,Sdept CHAR(20);CREATE TABLE Studen
3、t(Sno CHAR(9),Sname CHAR(20)NOT NULL,Sgend CHAR(2),Sage SMALLINT,Sdept CHAR(20)PRIMARY KEY(Sno);CREATE TABLE SC(Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLINT,PRIMARY KEY(Sno,Cno);实体完整性 实体完整性检查和违约处理 用PRIMARY KEY短语定义了关系的主码后,每当用户进程对基本表插入一条记录或对主码列进行更新操作时,RDBMS将按实体完整性规则自动进行检查。检查主码值是否唯一,如不唯一则拒绝插入
4、和修改 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改参照完整性 参照完整性规则 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值)或者等于S中某个元组的主码值 关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。参照完整性例 关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Cour
5、se表的主码。CREATE TABLE SC(Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES S(Sno)FOREIGN KEY(Cno)REFERENCES C(Cno);参照完整性一般地,当对参照表和被参照表的操作违反了参照完整性,系统选用默认策略,即拒绝执行。如果想让系统采用其他的策略,则必须在创建表时显示地加以说明。例CREATE TABLE SC(Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,G
6、rade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno)ONDELETECASCADEONUPDATECASCADE,FOREIGN KEY(Cno)REFERENCES Course(Cno)ONDELETENOACTIONONUPDATECASCADE,);用户定义的完整性 用户定义的完整性是针对某一具体应用的数据必须满足的语义要求。属性上的约束条件 在GREATE TABLE中定义属性的同时,可以根据要求定义属性上的约束条件,即属性值限制。列值非空(NOTNULL)列值唯一(UNIQUE)检查列值
7、是否满足一个布尔表达式(CHECK)元组上的约束条件 在CREATE TABLE语句中用CHECK短语定义元组上的约束条件,实现元组级的限制。元组级的限制可以设置不同属性之间的取值的相互约束条件。用户定义完整性的约束条件检查和违约处理 向表中插入元组或修改属性的值时,RDBMS会检查属性上的约束条件是否被满足,如果不满足,则操作被拒绝执行。例CREATETABLES(Sno CHAR(9)PRIMARY KEY,Sname CHAR(8)NOT NULL UNIQUE,Sgend CHAR(2)CHECK(Sgend IN(男,女),Sage SMALLINT CHECK(Sage=16 AND Grade=23),Sdept CHAR(20);例当学生的性别是男时,其名字不能以Ms.打头。CREATE TABLE S(Sno(CHAR(9),Sname CHAR(8)NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY(Sno),CHECK(Ssex=女 OR Sname NOT LIKE Ms.%);
限制150内