关系模型

本文介绍了关系数据库中的数据模型要素及关系完整性概念,包括实体完整性、参照完整性和用户自定义完整性等,探讨了如何通过SQL语句实现这些完整性约束。

一概述:

(1)综述:

*按照数据模型的3要素:关系模型由关系数据结构、关系操作集合和关系完整性约束3部分组成。

*在关系模型术语中,关系用来指代表;元组指代表中的行;属性指代表中的列。

*关系有三种类型:

~基本关系(基本表):实际存在的表,是实际存储数据的逻辑表示。

~查询表:是查询结果对应的表。

~视图:是基本表或其他视图表导出的表,是虚表,不对于实际存储的数据。


(2)术语:

*域:对于关系的每个属性,都存在一个取值集合。称为该属性的域。

*候选码:若关系中某一属性组的值能唯一标示一个元组,则称该属性组为候选码。最简单候选码只包含一个属性,最极端包含全部属性(全码)。

*主码:若一关系有多个候选码,则选定其中一个为主码。主码应该选择那些值从不或极少变化的属性,

*主属性:候选码的诸属性称为主属性。不包含在主码中的属性称为非主属性或非码属性。

*外码:一个关系R1可能在它属性中包括另一个关系R2的主码,这个属性在R1上称为参照R2的外码。


二 关系操作:

(1)常用的关系操作:查询和插入、删除、修改。


三 关系完整性(保证数据的正确、有效、相容):

*任何关系数据库都必须支持实体完整性和参照完整性

(1)实体完整性:若属性A是基本关系R的主属性,那么A不能取空值。

1.定义:关系模型中的实体完整性create table中用primary key定义。两种方法:

*列级约束:只适合单个属性构成的码。例如:create table lyr(name  varchar(20) primary key,age int)。

*表级约束:适合单个属性和多个属性的码。例如:create table lyr(name varchar(20),age int,primary key(name,age))。

2.实体完整性检查:

*检查主码值是否唯一,如果不唯一拒绝插入或修改。

*检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。


(2)参照完整性:若属性(或属性组)F是基本关系的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须为:或者取空值;或者等于S中的某个元组的主码值。

1.定义:在create table中用foreign key定义那些列为外码,用references指明这些外码参照哪些表的主码。

*例如:create table lyr (name varchar(20),salary int,foreign key(name) references worker(name));

2.参照完整性检查或违约处理:


1.违反处理策略:

*拒绝(No Action)操作:不允许该操作执行。默认策略。

*级联(CASCADE)操作:当删除或修改被参照表的一个元组造成了与参照表的不一致,则删除或修改参照表中的所有造成不一致的元组。

*设置为空值:

当删除或修改被参照表的一个元组造成了与参照表的不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。


(3)用户自定义完整性:用户自定义的完整性是针对某一具体关系数据库的约束条件。它反映某一具体应用所涉及的数据必须满足的语义要求。

1.属性上的约束:在create table的同时可根据需要定义属性上的约束条件,包括:

*列值非空(NOT NULL)。

*列值唯一(UNIQUE)。

*检查列值是否满足一个布尔表达式(CHECK)。

*注意:当往表中插入元组或修改属性的值时,DBMS检查属性上的约束条件是否满足,如果不满足,则拒绝操作。


2.元组上约束条件:在create table时可以使用check语句定义元组上的约束条件。

*注意:当往表中插入元组或修改属性的值时,DBMS检查元组上的约束条件是否满足,如果不满足,则拒绝操作。



(4)域上完整性限制:


(5)完整性约束命名子句:

*SQL在create table语句中提供了完整性约束命名子句CONSTRAINT,用来对完整性约束条件命名,从而灵活的增加、删除一个完整性约束条件。

1.完整性约束命名子句:

*格式:CONSTRAINT<完整性约束条件名>[PRIMARY KEY | FOREIGN KEY | CHECK]。

 


2.修改表中的完整性限制:使用drop table语句修改表中的完整性限制。





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值