通过问题长知识----数据完整性

本文解析了数据完整性概念及其四种类型:实体完整性、域完整性、参照完整性和用户定义完整性,并通过实例说明了参照完整性被破坏时可能出现的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 作者:fbysss
msn:jameslastchina@hotmail.com 
blog:blog.youkuaiyun.com/fbysss
声明:本文由fbysss原创,转载请注明出处
关键字:数据完整性

      问题描述:Hibernate查询出现异常ObjectNotFoundException: No row with the given identifier exists
分析原因:数据完整性被破坏。
举例:A,B与中间表M,A表被清空了,但是M的数据还在,这样,M.B_ID字段对应的数据已经没有了,故报错。
解决办法:在表M上建立外键约束,A_ID,B_ID分别与A.ID和B.ID进行约束。这样,A,B表在删除数据的时候,如果没有设置级联删除(CASCADE DELETE),数据库系统会提示错误,要求先删除子表中的数据。
==========================================================
数据完整性相关知识:
==========================================================
数据完整性,是指存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。
  数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据完整性分为四类:实体完整性(Entity Integrity)、
域完整性(Domain Integrity)、参照完整性(Referential Integrity)、用户定义的完整性(User-definedIntegrity)。
  数据库采用多种方法来保证数据完整性,包括外键、束约、规则和触发器。系统很好地处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,互补缺点。
(1)实体完整性:指表中行的完整性。要求表中的所有行都有唯一的标识符,称为主关键字。主关键字是否可以修改,或整个列是否可以被删除,取决于主关键字与其他表之间要求的完整性。
  实体完整性规则规定基本关系的所有主关键字对应的主属性都不能取空值,例如,学生选课的关系选课(学号,课程号,成绩)中,学号和课程号共同组成为主关键字,则学号和课程号两个属性都不能为空。因为没有学号的成绩或没有课程号的成绩都是不存在的。
  对于实体完整性,有如下规则:
  · 实体完整性规则针对基本关系。一个基本关系表通常对应一个实体集,例如,学生关系对应学生集合。
  · 现实世界中的实体是可以区分的,它们具有一种唯一性质的标识。例如,学生的学号,教师的职工号等。
  在关系模型中,主关键字作为唯一的标识,且不能为空。
(2)参照完整性:相关联的两个表之间的约束,具体的说,就是从表中每条记录外键的值必须是主表中存在的,因此,如果在两个表之间建立了关联关系,则对一个关系进行的操作要影响到另一个表中的记录。
例如,如果在学生表和选修课之间用学号建立关联,学生表是主表,选修课是从表,那么,在向从表中输入一条新记录时,系统要检查新记录的学号是否在主表中已存在,如果存在,则允许执行输入操作,否则拒绝输入,这就是参照完整性。
参照完整性还体现在对主表中的删除和修改操作, 例如,如果删除主表中的一条记录,则从表中凡是外键的值与主表的主键值相同的记录也会被同时删除,将此称为级联删除;如果修改主表中主关键字的值,则从表中相应记录的外键值也随之被修改,将此称为级联删除。
(3)域完整性是对数据表中字段属性的约束,如数据类型、格式、值域范围、是否允许空值等约束,它是由确定关系结构时所定义的字段的属性决定的。
域完整性把属性限制在一个有限的集合中。例如,如果属性类型是整数,那么它就不能是101.5或任何非整数。
(4)用户定义完整性:关系数据库系统根据应用环境不同,往往需要一些特殊约束条件,用户定义的完整性是针对某一具体应用领域,对关系数据库提出的约束条件。反应了某一具体应用涉及的数据必须满足的语义要求。
  例如,集成电路芯片的生产工艺必须取值为:CMS、NMS和ECL三种值之一。又如,学生的年龄限制为14---35之间等等。关系模型提供了定义和检验这些完整性约束的机制,以便用统一的系统的方法处理它们,而不用应用程序处理。
-----------------------------------------------------------------------------------------------
学习了上面的知识,回头来看,我们遇到的,就是一个参照完整性被破坏的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值