- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CREATE TABLE SC(S# CHAR(8)NOT NULL C# CHAR(10)NOT NULL G NUMBERIC(3)NOT NULL PRIMARY KEY(S#,C#)); 6.4.3 用户定义完整性约束 * 例6-22 定义关系DEPTCREATE TABLE DPET(DEP# NUMBERIC(2),Dn CHAR(8)UNIQUE, /*C#属性不允许取空值*/Loc CHAR(10),PRIMARY KEY(DEP#); /*在关系级别上定义主键*/ 6.4.3 用户定义完整性约束 * 例6-23 S关系中限定Se只能取“male”或“female”。CREATE TABLE S(S# CHAR(8)PRIMARY KEY,/*在属性列级别上定义主键*/Sn CHAR(8)NOT NULL,/*C#属性不允许取空值*/Se CHAR(2)CHECK(Se IN(“male”,“female”)), /*Se属性只能取“male”或“female” */Sd CHAR(20)); 6.4.3 用户定义完整性约束 * 2.基于元组约束基于元组完整性限制可以设置不同属性间取值的相应约束条件。在例8-12中加入CHECK子句:……Sa NUMERIC(2),CHECK(Sa BETWEEN 18 AND 25),UNIQUE(Card#),PRIMARY KEY(S#); 6.4.3 用户定义完整性约束 * CHECK子句只对定义其的关系起到约束作用,对其他关系没有约束作用,有可能会产生违反参照完整性的情形。例8-25 对关系SC中加入CHECK子句:CHECK (S# IN (SELECT S# FROM S))CHECK (C# IN (SELECT C# FROM C)) 6.4.3 用户定义完整性约束 * 此时,就会出现违反参照完整性的情况,即当关系S中删除一个元组时,该操作与关系SC中的CHECK无关。这样,如果SC还存在被删除学生的选课元组,SC就会不满足CHECK子句的约束。在CHECK子句中的条件最好不要涉及其他关系,而使用外键子句或断言子句定义相关完整性。 6.4.3 用户定义完整性约束 * CREATE TABLE SC(S# NUMBERIC(6),C# CHAR(3),G INT,RRIMARY KEY (S#,C#),FOREIGN KEY(S#)REFRERCENCE S,FOREIGN KEY(C#)REFRERCENCE S,CHECK((G IS NULL)OR(G BETWEEN 0 AND 100))); 6.4.3 用户定义完整性约束 * 3.域约束与断言约束在用户自定义完整性约束过程中,还可以使用域约束和断言约束两种技术。(1)域约束SQL域约束的含义是作用于所有属于指定域的属性列的约束,并且使用“CREATE DOMAIN”语句实现该约束,约束语句中允许出现CHECK子句。 6.4.3 用户定义完整性约束 * 域约束规则基本形式为CREATE DOMAIN 域名域类型CHECK条件为了便于引用,约束可以命名。约束命名使用保留字CONSTRAINT。 6.4.3 用户定义完整性约束 * 例6-26 CREATE DOMAIN Grades CHAR(1)DEFULT‘?’CONSTRAINT VALID-GradesCHECK(VALUE IN (‘A’,‘B’,‘C’,‘D’,‘E’,‘?’)); 8.4.3 用户定义完整性约束 * 说明 上述语句定义了一个新的域Grades,并且加了一个名为“VALID-Grades”的域约束,CHECK子句指明了定义在该域上列上的取值,缺省值为“?”。如果对学生成绩基本关系SC(S#,C#,G)中的G用域Grades定义:CREATE TABLE SC(S# NUMERIC(6),C# CHAR(6),G Grades,……); 6.4.3 用户定义完整性约束 * 则关系示对SC进行插入操作时,每插入一条学生成绩记录,其成绩G就必须为CHECK子句中指明的值,缺省时为“?”,否则为非法成绩值,系
文档评论(0)