今天总算搞懂了RI (Referential Integrity) 引用完整性

今天总算搞懂了RI (Referential Integrity) 引用完整性

数据的完整性内容比较多,暂不谈,现只举个例子理解一下引用完整性

实例关系:多篇文章(Article)<归属于>某一类别(Class)

父子关系:一方为父多方为子

主外键关系:父方主键与子方外键关联

原理:父子关系是通过选定的键关联的,如果某一方的这个键变更了,而另一方不作更新,必然造成数据的不正确。如:文章实体用Class外键与类别实体的主键ClassId关联(更确切是文章实体聚合了类别实体),当某类别ID被改或者删除了,如果文章实体不作相应的操作,那么文章就不知道是哪个类别的了。

反之,文章的类别被改,那么文章的类别就可能会出错,当然系统允许改文章类别另当别论了。

可用事件:看图,父方只有UPDATE和DELETE事件,而子方只有INSERT和UPDATE事件,是因为,父方插入新记录(新的类别)不影响子方(现存文章)的数据完整性。反之,删除一篇文章不影响类别的数据完整性。这里要注意,事件的对象是关联双方的键。

可用规则:

  1. 父方:
    1. None:这个不用说了吧,什么都不干,当父方的主键被更改时;
    2. Restrict(限制):这个报错,不允许更改,当子方有相应的记录关联时;如,删除某一类别记录时,文章实体有该类别的文章。
    3. Cascade(级联):用得最多是这个了吧。级联更改子方相关记录。
    4. Set NULL:允许父方更改,子方外键设NULL,在某些场合有用。
    5. Set default:和上类似。
  2. 子方:
    1. None:这个不用说了吧,什么都不干,当子方的外键被更改时;
    2. Restrict(限制):这个报错,不允许更改,当父方没有相应的记录关联时;如,更改某篇文章的类别时,类别表没有相应的类别记录。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值