数据库作业10:SQL Server的部分操作(第五章例题 数据库完整性 存储过程)

5.1 实体完整性

一. 定义实体完整性

关系模型的实体完整性
CREATE TABLE中用PRIMARY KEY定义

【例5.1】将Student表中的Sno属性定义为码。

CREATE TABLE Student
      (Sno CHAR(9)  PRIMARY KEY,     ---在列级定义主码
       Sname CHAR(20) NOT NULL,     
       Ssex CHAR(2),
       Sage SMALLINT,
       Sdept CHAR(20)
      );

CREATE TABLE Student
     (Sno  CHAR(9),  
      Sname  CHAR(20) NOT NULL,
      Ssex  CHAR(2),
      Sage  SMALLINT,
      Sdept  CHAR(20),
      PRIMARY KEY (Sno)   ---在表级定义主码
     ); 

【例5.2】将SC表中的Sno,Cno属性组定义为码。

 CREATE TABLE SC
       (Sno   CHAR(9)  NOT NULL, 
        Cno  CHAR(4)  NOT NULL,  
        Grade    SMALLINT,
        PRIMARY KEY (Sno,Cno)    ---只能在表级定义主码
       ); 

二. 实体完整性检查和违约处理

插入或更新操作时,DBMS按照实体完整性规则自动进行检查。

检查 主码值是否唯一 ,如果不唯一则拒绝插入或修改
检查 主码的各个属性是否为空 ,只要有一个为空就拒绝插入或修改

5.2 参照完整性

关系模型的参照完整性定义
CREATE TABLE 中用 FOREIGN KEY 短语定义哪些列为外码,
REFERENCES 短语指明这些外码参照哪些表的主码

一. 定义参照完整性

例如,关系SC中(Sno,Cno)是主码。Sno,Cno分别参照Student表
的主码和Course表的主码

【例5.3】定义SC中的参照完整性。

CREATE TABLE SC
      (Sno    CHAR(9)  NOT NULL, 
       Cno     CHAR(4)  NOT NULL,  
       Grade    SMALLINT,
       PRIMARY KEY (Sno, Cno),   ---在表级定义实体完整性
       FOREIGN KEY (Sno) REFERENCES Student(Sno),     ---在表级定义参照完整性
       FOREIGN KEY (Cno) REFERENCES Course(Cno)    --- 在表级定义参照完整性
       );

二. 参照完整性检查和违约处理

可能破坏参照完整性的情况及违约处理:
在这里插入图片描述

【例5.4】显式说明参照完整性的违约处理示例。

CREATE TABLE SC
    (Sno  CHAR(9)  NOT NULL,
     Cno  CHAR(4)  NOT NULL,
     Grade  SMALLINT,
     PRIMARY KEY(Sno,Cno),			
     FOREIGN KEY (Sno) REFERENCES Student(Sno) 
		 ON DELETE CASCADE        ---级联删除SC表中相应的元组
         ON UPDATE CASCADE,     ---级联更新SC表中相应的元组
     FOREIGN KEY (Cno) REFERENCES Course(Cno)	                    
         ON DELETE NO ACTION 	---当删除course 表中的元组造成了与SC表不一致时拒绝删除
         ON UPDATE CASCADE   ---当更新course表中的cno时,级联更新SC表中相应的元组
      );

5.3 用户定义的完整性

用户定义的完整性是:
针对某一具体应用的数据必须满足的语义要求

一. 属性上的约束条件

1.属性上约束条件的定义

CREATE TABLE时定义属性上的约束条件:
1) 列值非空(NOT NULL)
2) 列值唯一(UNIQUE)
3) 检查列值是否满足一个条件表达式(CHECK)

1) 不允许取空值
【例5.5】 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。

CREATE TABLE SC
      (Sno CHAR(9)  NOT NULL,	---Sno属性不允许取空值
       Cno CHAR(4)  NOT NULL,	---Cno属性不允许取空值
       Grade  SMALLINT NOT NULL,  ---Grade属性不允许取空值	
       PRIMARY KEY (Sno, Cno),---在表级定义实体完整性,隐含了Sno,Cno不允许取空值,在列级不允许取空值的定义可以不写 
      ); 

2) 列值为一
【例5.6】 建立部门表DEPT ,要求部门名称Dname 列取值唯一,部门编号Deptno列为主码。

CREATE TABLE DEPT
        
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值