关系的完整性-参照完整性

(首先理解弄透实体完整性,实体完整性规则是最好理解的,再来理解参照完整性就不难了)

2.参照完整性

   现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系间的引用。

   定义:设F是基本关系的一个或一组属性,但不是关系R的码(如果某张表多个属性作为主码,那么这里的主码不能理解为单个主属性,这也是码和主属性的区别),Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。关系和R和S不一定是不同的关系。

   2.1 一对多关系的理解

学生实体和专业实体用下面关系表示:

     学生(学号,姓名,性别,专业号,年龄)

              (Sno,Sname,Ssex,Smajor,Sage)

     专业 (专业号,专业名)

               (Major,Mname)

(黑体加下划线的属性为主码)

  1. 两个关系之间存在着属性的引用,及学生关系引用了专业关系的主码“专业号”。显然这个“专业号”必须是确实存在的专业号,打个比方,学校现在只开了计算机,政治,数学,
专业
专业号专业名
001计算机
002政治
003数学

   

 

 

 

 

        我总不可能添加一个学生是小偷专业的吧!!!所以这也是为什么参照完整性规则是对多个关系(关系可以理解为实体或关系,实体或关系可以理解为一张表,也就是多张表,不懂可以翻阅上篇博客)的约束 ,所以现在我每在学生表添加一个学生都要参照专业表。

       回到定义,设F是基本关系的一个或一组属性,(这里的F可以指学生表专业号),但不是关系R(这里指学生表)的码,Ks(专业表专业号)是基本关系S(专业表)的主码,如果F(学生表中的专业号)与Ks(专业表专业号)相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系。关系R和S不一定是不同关系(这句话可以忽略,影响现阶段的理解)。

      有了上面的定义与对照的关系表示可以弄懂

     学生表中红字专业号为外码,基本关系R(学生表)为参照关系,基本关系S为被参照关系。

    所以当你设置学生表中的专业号为外码  (前提是已经创建专业表ZMajor,实体完整性不用我多说吧,顺序不能弄反)

     CREATE TABLE Student

(  Sno CHAR(9),

   Sname CHAR(4),

   Ssex  CHAR(2),

   Smajor  CHAR(9),

   Sage  SMALLINT,

PRIMARY KEY(Sno),/*这里定义了实体完整性,Sno不能取空值,参照上一篇博客*/

FOREIGN KEY(Smajor)  REFERENCES ZMajor(Major)/*定义了参照完整性,学生表专业号引用专业表专业号*/

ON DELETE CASCADE   /*当删除ZMajor表中的某个专业的时候,比如学校取消了某个专业,级联删除这个专业的所有学生

                                            当然,如果你正在学计算机,学校如果取消计算机专业,你的信息(学生表)也会进行级联删除

                                             所以一般学校等你们毕业了,计算机专业不招人了也没有人了,学校再来取消这个专业,所以这个                                               级联删除不是很常见。毕竟是贴近现实世界,大学取消某个专业*/

ON UPDATE CASCADE /*理解了上面的注释话,这个就好理解了,当更新ZMajor表中某个专业信息,比如你们校长疯了,计算机专 业全部取搬砖专业,所以你们所有计算机专业的学生专业号001-计算机,统一是001-搬砖,其实学生表中001并没有改变,但是当查询到你的时候,比如连接查询,嘿嘿,那你就是搬砖专业*/

 

  

)

级联操作只是参照完整性被破坏时采取策略的一种,默认策略为NO ACTION(拒绝执行),有了上面的理解基础,不难理解当INSERT插入学生表中数据,你加了一个不存在的专业号,这就就是为上面数据库就会拒绝执行。查询的话不改变数据库中的原则。参照完整性被规则破坏一般是被参照表中(例子中的专业表)的内容被修改,破坏时的操作均写在参照表的定义中。

以上部分时一对多的关系,如果有需要的话私我,我可以继续更新多对多参照完整性。

 

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值