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

原创 2005年06月06日 19:23:00

今天总算搞懂了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(限制):这个报错,不允许更改,当父方没有相应的记录关联时;如,更改某篇文章的类别时,类别表没有相应的类别记录。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/keminlau/article/details/389028

面向对象搞JAVA

-
  • 1970年01月01日 08:00

A referential integrity constraint violation occurred BUG修复

参考:http://stackoverflow.com/questions/8856588/how-to-update-complex-model-in-asp-net-mvc-3
  • xujianrj
  • xujianrj
  • 2012-05-30 10:34:05
  • 2217

关于引用完整性即外键的用法

先说点基础知识,每张表必须要有主键,先有主键才有外键,没有主键,是添加不成功外键的。在很多时候我们需要两张表甚至三张表进行关联查询,这时候就需要用到外键了,但有的人说用外键效率不高,用冗余。这里暂时不...
  • pengyu1801
  • pengyu1801
  • 2017-02-23 15:34:07
  • 746

什么是引用完整性?

什么是引用完整性?
  • studyvcmfc
  • studyvcmfc
  • 2010-03-13 16:34:00
  • 445

rpgle中引用完整性的实现

rpgle编程中,也经常会碰到这样的问题,向B物理文件中添加数据的时候,一定要先检查A物理文件中是否有其相关数据的存在; 若不存在,则不允许添加,若存在于A中,则可以向B物理文件中添加数据。这种检查...
  • BOBO12082119
  • BOBO12082119
  • 2012-10-28 21:00:56
  • 995

Laravel seed data 导致 主键冲突 Integrity constraint violation

原因是这段代码$resources = factory(Resource::class)-&amp;gt;times(30)-&amp;gt;create();这里应该使用 make() ,而不是 c...
  • u011088792
  • u011088792
  • 2018-03-09 22:40:42
  • 62

Hibernate级联操作Cascade学之---delete

所在cascade,就是说我在更新一方的时候,可以根据这一方对象之间的关联关系,去对被关联方进行持久化,比如说Team和Student之间的1对多关系,使用cascade,可以在team方维护其持有的...
  • daryl715
  • daryl715
  • 2007-12-04 15:15:00
  • 6410

Hibernate框架基础——cascade属性

我们以部门和员工的关系为例讲解一对多关联关系映射时,删除部门时,如果部门有关联的员工且inverse属性为false,那么由于可以维护关联关系,它就会先把关联的员工的外键列设为null值,再删除自己。...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016-10-08 19:47:21
  • 13330

oracle cascade用法

级联删除,比如你删除某个表的时候后面加这个关键字,会在删除这个表的同时删除和该表有关系的其他对象 1.级联删除表中的信息,当表A中的字段引用了表B中的字段时,一旦删除B中该字段的信息,表A的信息也自...
  • kadwf123
  • kadwf123
  • 2012-10-13 14:35:31
  • 14325

SQL——SQL语言全部关键字详解

数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就是数据库。虽然这种观点是错误的,但是也确实从一个方面体现了这种面向结果的查询语言的重要性。...
  • QuinnNorris
  • QuinnNorris
  • 2017-05-01 21:05:32
  • 12892
收藏助手
不良信息举报
您举报文章:今天总算搞懂了RI (Referential Integrity) 引用完整性
举报原因:
原因补充:

(最多只允许输入30个字)