参照完整性
- 格式:pdf
- 大小:856.10 KB
- 文档页数:13
3.5 数据完整性在数据库中数据完整性是指保证数据正确的特性,一般包括实体完整性、域完整性、参照完整性。
一、实体完整性是保证表中记录唯一的特性。
即在一个表中,不能有重复的纪录。
候选关键字:如果一个字段的值或几个字段的值能够唯一标识表中的一条记录,这样的字段称为侯选关键字。
主关键字:在一个表中可能会有几个具有这种特性的字段或者字段的组合,这时从中选择一个作为主关键字。
在VFP中将主关键字称做主索引,将侯选关键字称为侯选索引。
实现方法:在VFP中利用主关键字(主索引)或候选关键字(候选索引)来保证表中记录的惟一性。
例1. 打开数据库“成绩管理”,为学生表中的“学号”字段建立主索引(升序)。
二、域完整性1.域:列的取值的范围(EG:数学中的定义域)域完整性:列的取值范围合理性我们以前在创建表的时候指定不同的数据类型和宽度来限制字段的取值类型和取值范围,但这些还远远不够。
我们需要进一步对列里能输入什么样的数据严格要求。
2.实现域完整性的方法:设置列的有效性规则,设置列的默认值⑴设置列的有效性规则例2. 设置“成绩管理”数据库中“学生”表中年龄字段的有效性规则:要求学生表中的年龄必须在15-22之间,否则就认为输入无效!并提示“年龄只能在15-22岁之间!”例3. 设置“学生”表中系部字段的有效性规则:要求系部列的取值必须是四个系之一,如果输入其他值就认为输入无效!并提示“该系部名不存在!”例4.设置“成绩”表中成绩的有效性规则为:成绩只能在0-100分之间,如果用户输入错误,则提示“成绩不在范围内!”⑵为列设置默认值例5.对“学籍”表进行修改,设置“入学日期”的默认值为2009-08-26,然后打开表,输入一条新记录,观察现象例6. 对“学生”表进行修改,设置“系部”列的默认值为基础部,然后打开表,使用Append命令输入一条新记录,观察现象三、参照完整性1.思考:⑴如果同学们在填学生表的时候将自己的班级名称写错了, 写成了一个学校中根本不存在的班级, 这样的结果肯定是错误的。
详解sql中的参照完整性(⼀对⼀,⼀对多,多对多)⼀、参照完整性参照完整性指的就是多表之间的设计,主要使⽤外键约束。
多表设计: ⼀对多、多对多、⼀对⼀设计1.⼀对多关联主要语句:constraint cus_ord_fk foreign key (customer_id) REFERENCES customer(id)创建客户表——订单表⼀个客户可以订多份订单,每份订单只能有⼀个客户。
-- 关联(1对N)create table customer(id int PRIMARY KEY auto_increment,name varchar (20) not null,adress varchar (20) not null);create table orders(order_num varchar(20) PRIMARY KEY,price FLOAT not NULL,customer_id int, -- 进⾏和customer 关联的字段外键constraint cus_ord_fk foreign key (customer_id) REFERENCES customer(id));insert into customer(name,adress) values("zs","北京");insert into customer(name,adress) values("ls","上海");SELECT * from customer;INSERT INTO orders values("010",30.5,1);INSERT INTO orders values("011",60.5,2);INSERT INTO orders values("012",120.5,1);SELECT * from orders;notice: constraint: 约束的意思。
一、有效性规则和参照完整性1.有效性规则先选中要求设置的字段,(1)“规则”:逻辑型表达式即SQL格式表达式。
例:年龄是15-20:年龄>=15 and 年龄<=20(2)“信息”:字符型表达式,直接摘抄加“”(英文状态)(3)“默认值”:看选中的字段是什么类型2.参照完整性(1)判断一方(没有重复字段的表)和多方(有重复字段的表)(2)一方建主索引,多方建普通索引(3)由一方向多方扯一条线(4)清理数据库(数据库—清理数据库,如果遇到“文件正在使用暂不能发布pack命令,”此时close all,再重新以独占方式打开数据库再进行一次清理)(5)右键编辑参照完整性(两个永久性联系须一一设置其参照完整性)二、SQL语句1.格式:格式一:Select [top]字段1/字段2…… from表1,表2…. where连接条件and(or) 筛选条件{group by 某一字段 [haing count(字段)] } order by字段1 asc/desc, 字段2asc/desc…… into table表格式二:Select[top]字段1/字段2…… from表1 join 表2 join表3…. on连接条件(返回来写) where筛选条件 {group by 某一字段 [haing count(字段)] } order by字段1 asc/desc, 字段2 asc/desc…… into table表⑴.“字段1/字段2……”,根据题目要求,搜索什么字段写什么字段,若其中某一字段在表中没有则认定为是起的新名字,在该字段前加as,之后向函数avg(),sum(),max(),min(),count()。
⑵.“group by 某一字段 [haing count(字段)]”为难点。
考虑用不用group by,首先在草稿纸上或脑海生成题目要求的表,选取一个个例填写分析是否用得到group by,按什么分组。
数据库表设计的四条原则
一、完整性原则:
完整性原则,是指一个关系数据库描述的实体或事实的完整性,它规定一个属性的值必须存在,但不要求一定是有效的值。
它可以防止数据库中出现空值带来的记录不完整的现象,确保数据库记录的完整性。
二、唯一性原则:
唯一性原则,是指一个表中列(字段)的唯一性原则。
它规定一个属性不能在同一表中两个记录中出现重复值,以防止表中有相同记录造成交叉参照,造成数据库信息不一致。
三、实体完整性原则:
实体完整性原则是指,一个实体间的各属性之间的相互关系必须是完整的,也就是所有的属性都必须是可以被完整的表达出来的,不能出现有一个属性无法被完整表达出来的现象。
实体完整性原则主要是为了防止一组实体属性不能正确地表述实体间的相关关系,而且它能够保证数据库的准确性。
四、参照完整性原则:
参照完整性原则是指,一个表中的数据项之间的参照完整性必须被保证。
它要求数据表中的信息必须完整,而不是只有部分信息,以便能够完全反映出数据表中的记录之间的一一对应关系,同时也是为了防止某一记录在引用另一记录时出现某种异常情况,从而影响到数据的正确性和一致性。
参照完整性
引用完整性指的是关系中数据的准确性和一致性。
在关系中,数据在两个或多个表之间链接。
这是通过让外键(在关联表中)引用主键值(在主表或父表中)来实现的。
因此,我们需要确保关系双方的数据保持完整。
因此,参照完整性要求每当使用外键值时,它必须引用父表中有效的现有主键。
例子
例如,如果我们删除主表中的第15行,我们需要确保任何相关表中没有值为15的外键。
如果没有关联的行,我们应该只删除主键。
否则,我们将以孤立的记录告终。
这里,相关表包含一个主表的主键字段(即
“CompanyId”字段)中不存在的外键值。
这导致了
“孤立记录”。
因此参照完整性将阻止用户:
•如果主表中没有关联的行,则将该行添加到相关表中。
•更改主表中的值将导致相关表中的孤立记录。
•如果有匹配的相关行,则从主表中删除这些行。
缺乏参照完整性的后果
数据库中缺乏参照完整性可能导致返回的数据不完整,通常没有错误指示。
这可能会导致记录在数据库中“丢失”,因为它们永远不会在查询或报告中返回。
还可能导致报告出现奇怪的结果(比如没有关联公司的产品)。
或者更糟的是,这可能会导致客户收不到他们购买的产品。
更糟糕的是,它可能会影响到生死攸关的情况,例如,医院的病人没有得到正确的治疗,或者救灾小组没有收到正确的材料或信息。
数据的完整性
引用完整性是数据完整性的一个子集,它与所有数据(关系数据或其他数据)的准确性和一致性有关。
维护数据完整性是使用数据库的一个关键部分。
参照完整性规则今天,我来谈一谈关于心理学方面的知识。
所谓的参照完整性规则,是指人的情绪、动机、欲望等都会受到外界因素和内部因素的影响。
而参照完整性规则的三要素是:强度,稳定性,力比多。
人之所以为人,就是他有灵魂,有自己的思想,有自己的主观意识。
同样,作为人的属性,也不可避免地会受到外界因素和内部因素的影响。
如果想控制自己的思想,首先必须考虑到这些因素对自己的影响。
例如,当我的成绩优秀时,我希望别人能够称赞我,如果我没有做出什么成绩,我就会担心别人怎么看待我。
这种担心和怀疑正是由于内部因素和外部因素的影响,这时候就需要用到参照完整性规则。
其实说白了,参照完整性规则就是人们在生活中处理问题或困难时的心理机制。
人们都是活在一个完整的世界中,但各个部分相互作用的过程使得每个部分不断扩张,最终形成一个整体,从而使得社会结构更加复杂。
参照完整性规则在现代社会,已经被广泛运用到社会活动中,人们在面对紧急事件或重大决策时,都习惯性地运用参照完整性规则。
它有助于我们解释行为,并根据某些特殊因素预测行为的发展趋势。
这也是为什么很多专家认为,一个人的发展变化并不是由基因决定的,更多是由外界因素和内部因素共同影响而造成的。
这也与小孩子学走路的原理差不多。
婴儿在一岁半之前,不会走路也不会爬,但他们却是靠内部因素的支撑站立起来的,所以在这个阶段只有适应环境,才能获得更好的发展。
因此,在我们人生的道路上,不管遇到什么样的困难,都需要用积极乐观的态度去解决,而不是悲观厌世,人生不如意十之八九,有时候觉得活得太累,是因为想得太多,身上背负了太多的压力,其实换个角度想想,很多事情根本就不值得我们浪费时间和精力去担忧,真的有那时间还不如多放松自己呢!随着时间的流逝,阅历的增长,参照完整性规则将会对我们的影响越来越大,因为我们正逐步接近成年,并逐渐摆脱父母的束缚,拥有自己独立的思想和意志。
因此,我们必须学会控制自己的思想,积极客观地看待自己和周围的世界,并用参照完整性规则来帮助我们在面对挫折和失败时做出理性的选择。
数据库完整性心得我学习了数据库的完整性,了解了数据库完整性和安全性的区别,学习了实体完整性、参照完整性和用户自定义完整性,掌握了完整性约束命名子句的方法,掌握了触发器机制和方法。
数据库的完整性和安全性的区别在于,数据库的完整性是防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。
而数据库的安全性是保护数据库防止恶意的破坏和非法的存取。
实体完整性要求基本表的主码值唯一且不允许为空值。
在SQL的create语句里,我们可以用Primary Key短语实现,而在alter语句里,我们可以用Add Primary Key短语实现。
参照完整性为若干个表中的相应元组建立联系。
在SQL的create 语句里可以用Foreign Key和References短语来实现,而在alter语句里,可以用Add Foreign Key短语来实现。
Foreign Key指出定义哪些列为外码,References短语指明这些外码参照哪些关系。
给出Foreign Key定义的关系称为参照关系,由References指明的表称为被参照关系。
用户自定义的完整性就是针对某一具体应用的数据必须满足的语义要求,RDBMS提供了定义和检验用户定义完整性的机制。
create table时需要判断列值非空,判断列值唯一,还要检查列值是否满足一个布尔表达式。
触发器是一种特殊的存储过程,不管什么原因造成的数据变化都可以自动响应。
每条SQL语句,触发器都只执行一次,事务可用于触发器中。
经过这次的学习,我对数据库的完整性有了一定的了解。
意识到完整性是数据库一种很重要的特性,完整性是维持数据库正常运作的重要保障。
如何实施参照完整性
实施参照完整性是一种需要严格遵循一些规则的过程,它可以有效地维护数据完整性,保证数据不被破坏。
首先,必须强调参照完整性需要考虑到不同数据表之间的关系。
对于外键类型的数据,必须考虑如何保证外键数据在子表中有对应数据,以及被保留的时候不会来自不同的表,从而达到预期的数据完整性。
其次,数据一旦插入到数据库中后就不应该被修改,其实只是可以被标记为已删除或者不存在,而不能完全抹去。
否则就会导致历史纪录不合理,不符合数据完整性的要求。
另外,实施参照完整性还需要创建一些完备的审查机制来保证数据的完整性,这一点十分重要。
尤其是在复杂的系统中需要添加审查机制,以保证每个数据表同步完成,使数据完整性得以保持。
总之,实施参照完整性是一个需要仔细考虑的重要过程,它可以维护数据的完整性,保证数据的有效性和可靠性。
因此,在实施参照完整性时一定要严格按照上述规则,以确保数据完整性得到有效保护。
简述参照完整性规则并举例说明参照完整性规则是在计算机系统中一种处理数据冲突的重要方法,它有助于实现数据完整性、保持数据一致性,以及消除可能导致数据损坏和损失的因素。
参照完整性规则是保证数据库系统高效运行和确保安全性的重要技术。
参照完整性规则实际上就是一种被设计用来确保在数据库系统或其他关系数据的存储系统中的完整性的技术。
它是通过在数据表中定义关系,以确保在执行数据库操作时不会损坏数据结构,从而确保数据的完整性的。
参照完整性规则包括主键约束、外键约束、唯一性约束、范围约束和检查约束等。
主键约束是通过将特定列设置为主键,从而在一个表中保证属性唯一性,每行数据必须有一个唯一的值。
外键约束通过将一个表中的字段同另一个表中的字段进行关联,确保两个表中的数据的有效性和一致性。
唯一性约束要求表中指定的列必须保持其唯一性,即不能有重复值。
范围约束要求对关联的列定义了范围,只允许在定义的范围中插入或更新数据。
检查约束允许对某个列设置一些条件,若该条件不满足,则不允许插入或更新该列数据。
以上就是参照完整性规则的定义和主要内容,下面来看一个关于参照完整性约束的具体例子。
假设有一个学生表和一个课程表,其中“学生”表存储学生的信息,包括学号、姓名、性别、年龄等,“课程”表存储课程的信息,包括课程编号、课程名称、学分等。
在这里,我们可以将“学号”列作为“学生”表的主键,将“课程编号”列作为“课程”表的主键,定义外键约束,将“学生”表中的“学号”列设置为外键,关联到“课程”表中的“课程编号”列,以确保学生信息和课程信息的一致性。
以上就是参照完整性规则的定义和举例说明,它是一种重要的技术,用于管理数据库数据及确保数据完整性和一致性,从而有助于系统的高效运行和数据安全。
通过不断完善这些规则,可以更好地满足企业的需求。
实施参照完整性的作⽤
实施参照完整性⼀般是创建外键表关联的时候使⽤.
我以⼀个例⼦来说明。
例如有2个表。
⼀个班级表,⼀个学⽣表
班级表(班级编号,班级名称,班级其他字段... )
学⽣表(学号,所属班级编号,学⽣名,学⽣其他字段 ...)
当在班级表与学⽣表之间,创建⼀个关联的时候,也就是学⽣表的 “所属班级编号” 与班级表的 “班级编号” 建⽴关联的时候。
"实施参照完整性" 意味着,当你向学⽣表插⼊数据的时候,如果输⼊了⼀个班级表⾥⾯,还没有的班级编号,那么数据库将报错,不允许你这么做。
也就是如果班级表有 1,2,3 共三个班级。
⽽你插⼊了⼀个学⽣张三,所在班级是 5班的。
那么数据库直接报错了。
这就是 "实施参照完整性" 的效果。
⽬的是为了避免,数据库中,产⽣垃圾数据。
也就是如果软件开发⼈员,在写程序的时候,不⼩⼼,忘记检查某些数据合法性的情况下,数据库最底层,还能做最后⼀次检查。
简述参照完整性规则
参照完整性则是相关联的两个表之间的约束,具体的说,就是从表中每条记录外键的
值必须是主表中存在的,因此,如果在两个表之间建立了关联关系,则对一个关系进行的
操作要影响到另一个表中的记录。
参照的完整性要求关系中不允许引用不存在的实体。
与实体完整性是关系模型必须满
足的完整性约束条件,目的是保证数据的一致性。
参照完整性又称引用完整性。
比如,如果在学生表和课外之间用学号创建关联,学生集是主表,课外从表中,那么,在向从表输出一条崭新记录时,系统必须检查崭新记录的学号与否在主表中已存有,如果
存有,则容许继续执行输出操作方式,否则婉拒输出,这就是参考完整性。
参照完整性还体现在对主表中的删除和修改操作,例如,如果删除主表中的一条记录,则从表中凡是外键的值与主表的主键值相同的记录也会被同时删除,将此称为级联删除;
如果修改主表中主关键字的值,则从表中相应记录的外键值也随之被修改,将此称为级联
删除。
模块五创建和编辑数据表
实验十建立表之间的关系和实施参照完整性学号:1100110719 姓名:苏以文实验日期:2011.12.29
一、实验目的
1.掌握创建和修改Access2003数据表之间的关系的方法。
2.了解实施参照完整性的含义
二、实验内容及步骤
实验二部分:
一、在表之间如何建立关系,请描述建立关系的关键步骤(可截图说明)
答:关闭要建立表间关系的表,打开“显示表”对话框,选择建立表间关系的数据表,建立表间关系,设置完整性,保存建立的表间关系,编辑关系,显示建立关系后的主表和从表。
二、什么是“实施参照完整性”,如何设置
答:当主表中没有相关记录时,不能将记录添加到相关表中。
在“编辑关系”中选择“实施参照完整性”
三、级联更新和级联删除的作用是什么
答:级联更新使得主关键字段的值和关联表中相关字段的值保持同步更新。
级联删除使得主关键字段中相应的记录被删除时,会自动删除相关表中的对应记录。
四、请把你建立的表之间关系图粘贴到下方。
五、实验小结
答:通过这次试验,我学会了如何建立表间关系,而且了解到数据表之间建立关系之后,我们可以同时修改多张表,大大减少了我们的工作量,同时也可以让我们清晰的看到表与表之
间的关系。
数据完整性约束(1)——实体完整性、参照完整性⼀.数据完整性的分类在关系模型中,提供了实体完整性,参照完整性,⽤户定义完整性。
⼆.实体完整性2.1什么是实体?实体是⼀个数据对象,指的是客观存在并可以相互区分的事物,⽐如学⽣,⽼师等。
⼀个实体在数据库中对应的是⼀条记录。
2.2实体完整性在MySQL中实现实体完整性在MySQL中的实现是通过主键约束和候选键约束实现的。
2.2.1主键约束⾸先,我们来了解⼀下主键是什么:主键是表中的某⼀列或者多个列的组合。
多个列就是复合主键。
在MySQL中的主键必须保证⼀下⼏个要求:1.⼀个表只能有⼀个主键,主键可以复合但是只有⼀个。
2.唯⼀性,主键的值在⼀张表⾥⾯是不能重复是唯⼀的,⽽且不能为空。
3.最⼩化原则,当⼀个复合主键删除掉复合的某⼀⾏后如果这个主键还是复合的,那么就是代表原来那个复合主键没有满⾜最⼩化原则。
2.2.2实现主键使⽤关键字:primary key⽅式⼀:单列主键create table tb(tb_pk int primary key);⽅式⼆:复合主键create table tb(tb_id int ,tb_name varchar(10),primary key (tb_id,tb_name));2.2.3候选键约束如果⼀张表中的某⼀个列可以唯⼀标识这张表,⼜不含其他多于的属性,那么他就是⼀个候选键。
⽐如学⽣的学号。
同样的候选键也是⾮空并且唯⼀值,候选键也⽀持复合。
2.2.4候选键与主键键表中主键只有⼀个但是候选键可以拥有多。
两者都会创建索引,主键是priamry key索引,但是候选键是unique索引2.2.5实现候选键使⽤关键字unique:create table tb(tb_id int ,tb_name varchar(10),unique(tb_id,tb_name));三.参照完整性在现实世界中存在多个对应的关系,那么这个对应关系就是参照完整性,也就是MySQL中的外键。
Database System
数据库系统概论Introduction to Database Systems
主讲人:吴岩河南理工大学
第四章 数据库的完整性
知 识 点
实体完整性规则
1
参照完整性规则
2
用户定义的完整性规则
3
4.2 参照完整性规则
参照完整性的含义
定义参照完整性
参照完整性检查和违约处理
4.2.1 参照完整性的含义
参照完整性规则
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主
相对应(R和S不一定是不同的关系),则对于R中每个元组在F上码K
s
的值必须:
●或者等于空值(F的每个属性值均为空值);
●或者等于S中某个元组的主码值。
4.2.2 定义参照完整性
用REFERENCES 短语指明外码参照哪些表的主码 2 可在创建表时定义约束或向表中添加约束
3 用FOREIGN KEY 短语定义哪些列为外码 1
4.2.2 定义参照完整性
创建表时定义-语法格式
CREATE TABLE <表名>
(<列名> <数据类型> ,
…
FOREIGN KEY(<列名>) REFERENCES 被参照表名(<列名>)
)
4.2.2 定义参照完整性
创建表时定义-示例
读者(读者号,姓名,性别,读者类型ID,类型名称)
创建“读者”表时定义“读者类型ID”参照“读者类型”表中的“读者类型ID”:
CREATE TABLE 读者
(读者号 char(6) PRIMARY KEY,
姓名 varchar(20),
性别 char(2),
读者类型ID char(6),
类型名称varchar(16),
FOREIGN KEY(读者类型ID) REFERENCES 读者类型(读者类型ID)
)
4.2.2 定义参照完整性
向表中添加约束-语法格式
ALTER TABLE <表名>
ADD CONSTRAINT<约束名> FOREIGN KEY(<列名>)
REFERENCES被参照表名(<列名>)
4.2.2 定义参照完整性
向表中添加约束-示例
图书(图书号,书名,主编,出版社,单价)
借阅(读者号,图书号,借阅日期,还书日期)
在已经创建的“借阅”表中添加名称为FK_图书号的参照完整性约束:
ALTER TABLE 借阅
ADD CONSTRAINT FK_图书号 FOREIGN KEY(图书号)
REFERENCES 图书(图书号)
程丽
2018-4-13
4.2.3 参照完整性检查和违约处理
可能破坏参照完整性的情况及违约处理
ISBN BookName Editor Press 9781267845 9781678676
9781765980 9781766770
数据库 数据库系统
数据库应用 数据库原理 王伟 陈瑾
郑智浩 王丽娟 清华大学出版社
清华大学出版社 高等教育出版社
电子工业出版社 9781765982 ISBN Reader BorrowDate 张晨
2018-3-2
王明明 2018-3-3 程丽 2018-4-12 程丽
2018-4-12
9781267845 9781267845 9781765980 9781766772
9781766770 9781766771 Borrow 关系
Book 关系
主码
外码
•
借阅表中插入一条新记录 •借阅表中修改一个ISBN 号 •图书表中删除一条记录 •图书表中修改一个ISBN 号
4.2.3 参照完整性检查和违约处理
可能破坏参照完整性的情况及违约处理
被参照表(例如图书表)参照表(例如借阅表)违约处理
可能破坏参照完整性插入元组
可能破坏参照完整性修改外码值删除元组可能破坏参照完整性修改主码值可能破坏参照完整性
拒绝
拒绝
拒绝/级联删除/设置空值
拒绝/级联修改/设置空值
默认策略
4.2.3 参照完整性检查和违约处理 创建参照表时显式定义违约处理策略-示例 CREATE TABLE 借阅
(读者号 char(6) ,
图书号 varchar(15) ,
借阅日期 datetime ,
还书日期 datetime ,
Primary Key(读者号,图书号), Foreign key (读者号) References 读者(读者号) ON DELETE CASCADE ON UPDATE CASCADE , Foreign key (图书号) References 图书 (图书号) ON DELETE NO ACTION ON UPDATE CASCADE )
/*在表级定义实体完整性 /*在表级定义参照完整性 /*当删除读者表中元组时,级联删除借阅表中相应元组 /*当更新读者表中读者号时,级联更新借阅表中相应元组 /*当删除图书表中元组造成与借阅表不一致时,拒绝删除 /*当更新图书表中图书号时,级联更新借阅表中相应元组
●参照完整性规则要求外键属性取值为被参照
表中某主码的取值,或者为空值。
●参照完整性规则可用Foreign Key定义。
●当执行增、删、改等操作时,DBMS根据参照
完整性规则自动进行检查并进行违约处理。