数据库原理(第三版)(张红娟)ppt4
数据库原理与应用教程(第3版)第3章 关系数据库
关系数据结构及其形式化定义
• 1.关系的形式化定义
笛卡尔积:
设D1,D2,…,Dn为任意集合,定义笛卡尔积 D1,D2,…,Dn为: D1×D2× …×Dn = {(d1,d2,…,dn) | di ∈Di,i=1,2,…,n } 其中每一个元素(d1,d2,…,dn)称为一个n元 组,简称元组。元组中每一个di称为是一个分量。
2.投影(Projection)
例如,选择sname,sdept两个列构成新关系:
∏sname,
sdept(Student)
sname
李勇 刘晨 王敏 张立 吴宾 张海 钱小平 王大力
sdept
计算机系 计算机系 计算机系 信息系 信息系 信息系 数学系 数学系
3.连接
R
Aθ B
S ={tr^ts | tr ∈R∧ts∈S∧tr[A]θ ts [B]}
关系模型的数据操作
• 主要包括:查询、插入、删除和修改 数据。 • 是基于集合的操作,操作对象和操作 结果都是集合(或关系)。 • 是非过程化的。
数据完整性约束
• 数据完整性是指数据库中存储的数据是有 意义的或正确的。 • 主要包括三大类: • 实体完整性 • 参照完整性 • 用户定义的完整性
关系数据模型的基本术语
职工
(职工号,姓名,性别,直接领导)
参照完整性规则
• 参照完整性规则就是定义外码与主码之 间的引用规则。 • 对于外码,一般应符合如下要求:
• 或者值为空; • 或者等于其所应用的关系中的某个元组 的主码值。
用户定义的完整性 按应用语义,属性数据有:
• 类型与长度限制:方便计算机操作 • 取值范围限制:防止属性值与应用语义 矛盾
笛卡尔积实际上就是一个二维表
《数据库原理》PPT课件
精选ppt
12
2、软件
数据库系统的软件主要包括: (1)DBMS。DBMS是为数据库的建立、使用和 维护配置的软件。
(2)支持DBMS运行的操作系统。
(3)具有数据库接口的高级语言及其编译系统, 便于开发应用程序。
精选ppt
13
(4)以DBMS为核心的应用开发工具。 应用开发工具是系统为应用开发人员和最终用户
精选ppt
15
(1)数据库管理员(DataBase Administrator, DBA)
具体职责包括:
1)决定数据库中的信息内容和结构 2)决定数据库的存储结构和存取策略 3)定义数据的安全性要求和完整性约束条件 4)监控数据库的使用和运行
精选ppt
16
另外,在数据运行过程中,大量数据不断插入、 删除、修改,时间一长,会影响系统的性能。因此, DBA要定期对数据库进行重组织,以提高系统的性 能。
存储、检索和维护,它是数据处理的中心问题。
(2) 数据管理经历了三个阶段 .人工管理 .文件系统 .数据库系统
精选ppt
3
精选ppt
4
数据密集型应用(data intensive application)
数据密集型应用的特点
1.设及数据量大(TB),一般内存容纳不下,需放在 辅存; 2.数据为持久数据(persistent data); 3.数据为多个应用程序所共享,MIS、银行、办公系统、 网络数据服务等。
提供的高效率、多功能的应用生成器、第四代语言 等各种软件工具。它们为数据库系统的开发和应用 提供了良好的环境。 (5)为特定应用环境开发的数据库应用系统。
精选ppt
14
3.人员
开发、管理和使用数据库系统的人员主要是: 数据库管理员、系统分析员和数据库设计人员、 应用程序员和最终用户。不同的人员涉及不同的 数据抽象级别,具有不同的数据视图,有各自的 职责。
数据库原理PPT课件
模式
也称为逻辑模式或概念模 式,定义了数据库中所有 数据的逻辑结构和关系。
内模式
也称为物理模式或存储模 式,描述了数据在物理存 储介质上的组织结构和存 储方式。
数据库管理系统
数据定义语言(DDL)
数据控制语言(DCL)
用于定义数据库中的各种对象,如表、 视图、索引等。
用于控制对数据库中数据的访问权限 和安全控制。
数据库原理ppt课件
目录
• 数据库概述 • 数据库系统结构 • 数据库设计 • 关系数据库 • 数据库管理系统实现技术 • 数据库新技术与发展趋势
01 数据库概述
数据库的定义与作用
数据库的定义
数据库是一个长期存储在计算机 内的、有组织的数据集合,它能 为多种应用提供数据服务。
数据库的作用
数据库用于存储、检索、更新和 管理大量数据,支持企业或组织 的运营和决策。
NoSQL数据库具有可伸缩性强、灵活 性高和可靠性好等优点,可以满足大 规模数据处理和实时分析的需求。
03
NoSQL数据库的挑 战
NoSQL数据库面临着数据一致性、查 询效率和标准化等挑战,需要进一步 研究和标准化工作。
THANKS FOR WATCHING
感谢您的观看
关系数据库标准语言SQL
SQL定义
SQL(Structured Query Language)是用于管理关系数 据库的标准编程语言,它包括数 据查询、数据操作、数据定义等
方面的命令。
SQL的主要功能
SQL的主要功能包括表格的定义 和维护、数据的查询和检索、数 据的插入和更新、数据的删除等。
SQL的特点
数据操纵语言(DML)
用于对数据库中的数据进行查询、插 入、更新和删除等操作。
数据库原理及应用完整教程PPT课件
U
组成该关系的属性名集合
D
属性组U中属性所来自的域
DOM 属性向域的映象集合
F
属性间的数据依赖关系集合
Principles and Applied of Database
第25页/共188页
定义关系模式 (续)
例: 导师和研究生出自同一个域——人, 取不同的属性名,并在模式中定义属性向域 的映象,即说明它们分别出自哪个域: DOM(SUPERVISOR-PERSON) = DOM(POSTGRADUATE-PERSON) =PERSON
3) 单元关系与二元关系 • 当n=1时,称该关系为单元关系(Unary relation) 或一元关系 • 当n=2时,称该关系为二元关系(Binary relation)
Principles and Applied of Database
第13页/共188页
关系(续)
4) 关系的表示 • 关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域
第30页/共188页
2. 关系数据库的型与值 • 关系数据库的型: 关系数据库模式
对关系数据库的描述。
• 关系数据库模式包括
• 若干域的定义 • 在这些域上定义的若干关系模式
• 关系数据库的值: 关系模式在某一时刻对应的关系的集合,简称为关系数据库
Principles and Applied of Database
Principles and Applied of Database
第16页/共188页
关系(续)
码(续) • 主码 若一个关系有多个候选码,则选定其中一个为主码(Primary key) • 主属性 候选码的诸属性称为主属性(Prime attribute) 不包含在任何侯选码中的属性称为非主属性( Non-Prime attribute)或非码属性(Non-key attribute)
数据库原理及应用课件ppt
(3)类的特性 ①封装性 将一个数据和与这个数据有关的操作 集合在一起,形成一个有机的实体—对象。 ②继承性 是类(基类)创建新类(子类)的过 程。子类(派生类)自动共享其父类(基类)中的所有 属性和方法,但子类可定义自己属性和方法。 ③多态性 当不同的对象收到相同的消息时产生 不同的动作。
面向对象程序设计已成为当前应用软件发 展的主流,它与传统的结构化程序设计有很大 的区别。Visual FoxPro不仅支持面向过程的编 程技术,而且支持面向对象的编程技术。
结构化程序设计以对数据进行操作的过程 作为程序的主体,将一个待求解的问题自顶向 下分解成一个个简单独立的子问题,然后用子 程序或函数解决这些子问题。
2. 类 (1)类的定义 对具有相同属性和行为的对象
集合的一种综合描述。类是对象的抽象描述, 对象是类的具体化和实例化。同类对象都具 有所属类的方法和属性,但每个对象的属性 值可以不同。
为深入学习习近平新时代中国特色社 会主义 思想和 党的十 九大精 神,贯彻 全国教 育大会 精神,充 分发挥 中小学 图书室 育人功 能
任意控件
可
选项按钮组
选项按钮
包
命令组
命令按钮
含
页框
页面
的
表格
表的列等
对
表格列
表头、文本框等控件
象
为深入学习习近平新时代中国特色社 会主义 思想和 党的十 九大精 神,贯彻 全国教 育大会 精神,充 分发挥 中小学 图书室 育人功 能
(2)控件类 控件类比容器类封装得更为完整。控
数据库原理ppt
3.字(Word):若干个字节组成一个字.一个字所含的二进制位的位 数又称为字长.各种计算机的字长是不一样,例如:有8位,16位,24 位,32位等. 4.块(Block):又称为物理块或物理记录.块是内存和外存交换信 息的最小单位.每块的大小,通常为:210--214字节.内、外存位信息 交换是由操作系统的文件系统管理的. 5.桶(Bucket):外存的逻辑单位,一个桶可以包含一个物理块或多 个在空间上不一定连续的物理块. 6.卷(Volume):一个输入输出设备所能装载的全部有用信息,称卷 44 .例如:磁带机的一盘磁带就是一卷,磁盘上的一个盘组也是一卷.
采用数据模型表示复杂的数据结构
数据模型不仅要描述数据本身的特征,还要
描述数据之间的联系
19
数据库系统的特点(2)
数据的冗余度小,易扩充
数据面向整个系统,而不是面向某一应用, 数据集中管理,数据共享,因此冗余度小 节省存储空间,减少存取时间,且可避免数 据之间的不相容性和不一致性 易扩充性:每个应用选用数据库的一个子集 ,只要重新选取不同子集或者加上一小部分 数据,就可以满足新的应用要求
文件系统的缺陷(2)
数据的共享性差,冗余度大
数据面向应用
• 即使不同应用程序所需要的数据有部分相同时 ,也必须建立各自的文件,而不能共享相同的 数据
数据孤立
• 数据分散管理,许多文件,许多数据格式
数据的不一致性
由于数据存在很多副本,给数据的修改与维 护带来了困难,容易造成数据的不一致性
28
3.数据库管理系统(DBMS)
用户
什么是DBMS
DBMS
OS 数 据 库 管 理 系 统 ( Database Management System,简称DBMS)是位于用户与操作系统 DB 之间的一层数据管理软件。 它为用户或应用程序提供访问DB的方法,包 括DB的建立,查询,更新及各种数据控制.
数据库原理与应用教程(第3版)第9章 sql server 2005基础第三版
数据库原理与应用教程(第3版)
2021/8/5
1
第9章 SQL Server 2005基础
• 9.1 SQL Server 2005平台构成 • 9.2 安装SQL Server 2005 • 9.3 配置SQL Server 2005 • 9.4 SQL Server Management
简易版 开发版
需要的常用操作系统
Windows Server 2003的Standard Edition、Enterprise Edition 和Datacenter Edition版本,同时安装了SP1或更高版本。
Windows 2000的Server、Advanced Server和Datacenter Server 版本,同时安装了SP4。
2021/8/5
7
通知服务
• 是一种应用程序, • 可以向上百万的订阅者及时发送个性
化的消息, • 还可以向各种各样的设备传递这些消
息。
2021/8/5
8
报表服务
• 是一种基于服务器的解决方案,用于生成 企业报表,该报表可从多种关系数据源和 多维数据源中提取数据。
• 所创建的报表可以通过基于Web的连接进 行查看,也可以作为Windows应用程序进 行查看。
2021/8/5
4
分析服务
• 拥有多维分析、数据挖掘等功能, • 使用户可以不购买其他商业智能软件产品
,进行多维分析和数据挖掘等工作。 • 而且在数据挖掘方面SQL Server 2005比SQL
Server 2000有了非常大的改进。
2021/8/5
5
集成服务
• 代替了SQL Server 2000的数据转换服务( DTS),
数据库原理(第三版)(张红娟)ppt3
(3) 数据控制语言(Data Control Language,简称DCL): 用来授予和撤销用户对数据的操作权限,主要由动词Grant 和Revoke组成。
下面将介绍Microsoft SQL Server环境下的SQL基本语句 的语法构成。各厂商RDBMS实际使用的SQL语言,为保持其 竞争力,与标准SQL语言都有所差异及扩充。因此,具体使 用时,应参阅实际系统的有关手册。
(3) 高度非过程化。非关系数据模型的数据操作语言是 面向过程的语言,用过程化语言完成某项请求,必须指定存 取路径。而用SQL进行数据操作,用户只需提出“做什么” ,无须告诉“怎么做”,因此操作过程中的存取路径对用户 是透明的,从而简化了用户对数据操作的实现。
(4) 两种使用方式,统一的语法结构。DML有两类:宿 主型和自主型。宿主型DML本身不能独立使用,只能嵌入特 定的计算机高级语言(如COBOL、C等)。COBOL、C等高级 语言称为主语言。自主型又称自含型,可以独立使用。因此 ,SQL既是自含式语言(用户使用),又是嵌入式语言(程序员 使用)。
第3章 SQL语言初步
3.1 SQL简介 3.2 基本的数据定义 3.3 基本的数据操作 3.4 数据查询——SELECT 3.5 含有子查询的数据更新 3.6 视图 3.7 小结
3.1 SQL 简 介
SQL语言是1974年由Boyce和Chamberlin提出的一种介于 关系代数与关系演算之间的结构化查询语言,是一个通用的 、功能极强的关系性数据库语言。SQL在最早RDBMS之一的 IBM公司San Jose研究室的System R项目上得到了实现。它功 能丰富,不仅具有数据定义、数据控制功能,还有着强大的 查询功能,而且语言简洁,集数据定义、数据操纵、数据控 制功能于一体,且完成核心功能只用了9个动词,易学易用 ,因此,被众多数据库厂商采用。
数据库原理(第三版)(张红娟)ppt6
第6章 关系数据模型及其运算基础
6.3.1 基于传统集合运算的关系运算
与传统的集合运算相同,基于传统集合运算的关系运算
都是二目运算,但对参加并、差和交运算的关系是有一些规 定的。设关系R和S的目都是n(都有n个属性),且相应属性取 自同一域。 (1) 关系R和S的并(Union)为
R∪S ={t | t∈R∨t∈S}
“职工×项目”的基数为3×3=9。对应二维表也有9个元组
。 2.关系(Relation) 笛卡尔积D1×D2×…×Dn的任意一个子集称为D1,D2 ,…,Dn上的一个n元关系,简称关系,又称为表(必须指出 的是,笛卡尔积中元组的分量是有序的,因此,其子集也是 有序的,但在这里,我们去掉了有序这一特性)。每个关系都
关系模式常简记为
R(U) 或 R(A1,A2,…,An) 其中:R为关系名;Ai(i=1, 2, …, n)为属性名。域名及属 性向域的映像一般即为定义中属性的类型和长度。
第6章 关系数据模型及其运算基础 一个应用范围内,所有关系的集合就形成了一个关系数 据库。对关系数据库的描述称为关系数据库模式,也称为关 系数据库的型。 一个关系数据库模式包括:全部域的定义及在这些域上 定义的全部关系模式。全部关系模式在某一时刻的值的集合( 全部关系的集合)为关系数据库的值,简称为关系数据库。
的笛卡尔积为
D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di , i=1, 2, …, n} 其中每一个元素(d1,d2,…,dn)叫做一个n元组(n-tuple),简 称元组(Tuple)。一个元组在集合Di上的值di称为该元组在Di 上的分量(Component)。
第6章 关系数据模型及其运算基础 一个元组是组成该元组的各分量的有序集合,而决不仅 仅是各分量的集合。 若Di的基数(Cardinal Number)为mi,则D1×D2×…×Dn
数据库原理第三版张红娟
■
■
■
■
Select name, Diff_salary(Salary)From employee;自定义函数也可以是C语言程序,在此不作介绍。3.用户自定义操作符在Illustra系统中,用Create
Operator命令来登记操作符,形
式如下:
支持复杂对象复杂对象是由多种基本的或用户定义的类型构成的对象。在 ORDBMS中创建复杂对象的构件有:组合、集合、引用、数组、列表、堆栈等,其中最基本的是前面三种。
方法,包含职工号。这个过
类和实例在组织信息时,人们总是将具有相似特性的对象归为一类。 类中的每个对象称为类的一个实 例(Instance)。一个类中的所有对象其特性必须相同,即具有相同
的消息、使用
的属性、响应相同相同的方法。
类的继承
■
一个类中往往会包含某些具有附加特性的对象,而这些特性并不和类的所有成员相关,这些具有附加特性的对象称为子类。如果类D是类C的子类,则 称类C是类D的超类,子类可继 承其超类的所有特性(包括属性、方法和信息),同时,又可具有
Relationship set<item> joinsInverse item::joinby;String Departname( ) raises(nodepartFound)
■
set<employee>)raise(noitemin);
Otheritem(in item,out
第一个方法是Departname,该函数将产生一字符串型的返回值,假设(因为ODL定义中没有 函数代码,所以只能假设)该方法的功能是返回应用该方法的对象所在的部门名,如果应用该方
■
定义一组合photo_t,由国 家号(country_num)、地区号 (area_num)和电话号码(tele_num)组成:
数据库原理(第三版)张红娟 参考答案
第一章20、供应商(供应商代号,供应商名称,联系电话)项目(项目代号,项目名称,项目负责人)零件(零件号,零件名,价格)供应商-项目(项目代号,供应商代号)项目-零件(项目代号,零件号,零件数)供应商-零件(供应商代号,零件号,零件数)第三章10、设有一数据库GradeManager(成绩管理),包括四个表:学生表(Student)、课程表(Course)、班级表(Class)以及成绩表(Grade),其结构如表3-4所示,数据如表3-5所示。
试用SQL语句创建四个表。
表3-4 成绩管理数据库的表结构表一Student表二Course表三Class表二Course表四Grade答:CREATE TABLE Student(Sno Char(7) NOT NULL UNIQUE,Sname VarChar(20) NOT NULL,Ssex Char(2) NOT NULL,Sage Smallint,Clno Char(5) NOT NULL);CREATE TABLE Course(Cno Char(1) NOT NULL UNIQUE, Cname VarChar(20) NOT NULL,Credit Smallint);CREATE TABLE C lass(Clno Char(5) NOT NULL UNIQUE,SpecialityVarChar(20) NOT NULL,Inyear Char(4) NOT NULL,Number Integer,Monitor Char(7));CREATE TABLE Grade(Sno Char(7) NOT NULL,Cno Char(1) NOT NULL,Gmark Numeric(4,1));INSERT INTO StudentV ALUE(‘2000101’,’李勇’,’男’,20,’00311’);INSERT INTO StudentV ALUE(‘2000102’,’刘诗晨’,’女’,19,’00311’);INSERT INTO StudentV ALUE(‘2000103’,’王一鸣’,’男’,20,’00312’);INSERT INTO StudentV ALUE(‘2000104’,’张婷婷’,’女’,21,’00312’);INSERT INTO StudentV ALUE(‘2001101’,’李勇敏’,’女’,19,’01311’);INSERT INTO StudentV ALUE(‘2001102’,’贾向东’,’男’,22,’01311’);INSERT INTO StudentV ALUE(‘2001103’,’陈宝玉’,’男’,20,’01311’);INSERT INTO StudentV ALUE(‘2001104’,’张逸凡’,’男’,21,’01311’);INSERT INTO CourseV ALUE(‘1’,’数据库’,4);INSERT INTO CourseV ALUE(‘2’,’离散数学’,3);INSERT INTO CourseV ALUE(‘3’,’管理信息系统’,2);INSERT INTO CourseV ALUE(‘4’,’操作系统’,4);INSERT INTO CourseV ALUE(‘5’,’数据结构’,4);INSERT INTO CourseV ALUE(‘6’,’数据处理’,2);INSERT INTO CourseV ALUE(‘7’,’c语言’,4);INSERT INTO ClassV ALUE(‘00311’,’计算机软件’,’2000’,120,’2000101’);INSERT INTO ClassV ALUE(‘00312’,’计算机应用’,’2000’,140,’2000103’);INSERT INTO ClassV ALUE(‘01311’,’计算机软件’,’2001’,220,’2001103’);INSERT INTO GradeV ALUE(‘2000101’,’1’,92);INSERT INTO GradeV ALUE(‘2000101’,’3’,88);INSERT INTO GradeV ALUE(‘2000101’,’5’,86);INSERT INTO GradeV ALUE(‘2000102’,’1’,78);INSERT INTO GradeV ALUE(‘2000102’,’6’,55);INSERT INTO GradeV ALUE(‘2000103’,’3’,65);INSERT INTO GradeV ALUE(‘2000103’,’6’,78);INSERT INTO GradeV ALUE(‘2000103’,’5’,66);INSERT INTO GradeV ALUE(‘2000104’,’1’,54);INSERT INTO GradeV ALUE(‘2000104’,’6’,83);INSERT INTO GradeV ALUE(‘2001101’,’2’,70);INSERT INTO GradeV ALUE(‘2001101’,’4’,83);INSERT INTO GradeV ALUE(‘2001102’,’2’,80);INSERT INTO GradeV ALUE(‘2001102’,’4’,90);INSERT INTO GradeV ALUE(‘2000103’,’1’,83);INSERT INTO GradeV ALUE(‘2000103’,’2’,76);INSERT INTO GradeV ALUE(‘2000103’,’4’,56);INSERT INTO GradeV ALUE(‘2000103’,’7’,88);11、针对T10的四个表,用SQL语言完成以下各项操作:(1)给学生表增加一属性Nation(民族),数据类型为VarChar(20);ALTER TABLE StudentALTER COLUMN Nation VarChar(20);(2)删除学生表中新增的属性Nation;ALTER TABLE StudentDROP COLUMN Nation;(3)向成绩表中插入记录(“2001110”,“3”,80);INSERT INTO GradeV ALUE(‘2001110’,’3’,80);(4)将学号为“200110”的学生的成绩修改为70分;UPDATE GradeSET Gmark = 70WHERE Sno = ‘2001110’;(5)删除学号为“2001110”的学生的成绩记录;DELETE FROM GradeWHERE Sno = ‘2001110’;(6)在学生表的Clno属性上创建一个名为IX_Class的索引,以班级号的升序排序;CREATE INDEX IX_ClassON Student(Clno);(7)删除IX_Class索引DROP INDEX Student.IX_Class;12、针对T10的四个表,用SQL语言完成以下各项操作:(1)找出所有被学生选修了的课程号;SELECT DISTINCT Cno 课程号FROM Grade(2)找出01312班女生的个人信息;SELECT *FROM StudentWHERE Clno='01311' and Ssex='女'(3)找出01311班和01312班的学生姓名性别出生年份;SELECT sname 学生姓名,ssex 性别,2011-sage 出生年份FROM StudentWHERE Clno='01311' or Clno='01312'(4)找出所有姓李的学生的个人信息;SELECT *FROM StudentWHERE Sname like '李%'(5)找出李勇所在班级的学生人数;SELECT COUNT(*)FROM StudentWHERE Clno in(SELECT ClnoFROM StudentWHERE Sname='李勇')(6)找出课程名为操作系统的平均成绩最高分最低分;SELECT A VG(Gmark) 平均成绩,MAX(Gmark) 最高分,MIN(Gmark) 最低分FROM GradeWHERE Cno in(SELECT CnoFROM CourseWHERE Cname='操作系统')(7)选修了课程的学生人数;SELECT COUNT(DISTINCT sno) 学生人数FROM Grade(8)选修了操作系统的学生人数;SELECT COUNT(DISTINCT sno) 学生人数FROM GradeWHERE Cno in(SELECT CnoFROM CourseWHERE Cname='操作系统')(9)找出2000级计算机软件班的成绩为空的学生姓名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
age int check(age>=18 and age<=65)
或在属性列表的最后加上:
check(age>=18 and age<=65)
check 还可以模拟枚举类型,例如,可在create table语句
中用以下子句说明属性sex的取值只能取“男”或“女”:
(3) 删除或修改Department元组中的Dno分量值,而该分 量值出现在一个或多个Employee的Dno分量中。 以上这些更新操作均将被系统拒绝,Employee和 Department中的元组不会有任何改变。
2) 级联策略
当对父表进行删除和修改时,SQL提供了另一种方案, 即级联策略。在这种策略下,当删除或修改父表中某元组的 主码值时,子表中具有该外部码值的元组也将被删除或修改 ,以保证参照完整性。
1) 限制策略
限制策略是sql的默认策略。任何违反参照完整性约束的
更新均被系统拒绝,这些更新操作包括(以department和
employee表为例):
(1) 向employee表中插入一个新元组,其中的dno分量值
既非空值,也非department元组的dno分量值;
(2) 修改employee的一个元组,它的dno分量值被改为 department关系的dno分量值中不存在的非空值;
4.1.4 约束的更新
约束与数据库中的表、视图等一样,可以进行增加、删 除和修改的更新操作。为了修改和删除约束,需要在定义约 束时对约束进行命名,在约束前加上关键字CONSTRAINT和 该约束的名称。
例如,说明Employee表中的主码和外部码时,分别命名 为PK_employee和FK_employee:
(1) 在说明主码的第(1)种方法的name属性后面加上 unique说明:
name varchar(8) unique,
(2) 在说明主码的第(2)种方法的属性列表后使用unique说 明: unique(name), 通常在各商业rdbms支持的sql语言中,并没有强制规定 必须为每个关系指定主码,但为每个关系指定主码通常更好 一些。
例4.4 将Employee表的外部码Dno的更新操作设置为级
联策略,删除操作设置为限制策略。
只需将例4.3中的最后一行改为 dno char(4) references department(dno) on delete no action on update cascade
或
foreign key dno references department(dno)
主码可在定义关系的create table语句中使用primary key 关键字加以定义。有两种定义主码的方法:一种是在属性后 增加关键字;另一种是在属性表中加入额外的定义主码的子 句 primary key(主码属性名表)
例4.1 在employee表中说明eno为主码。
实现上述要求有两种方法: (1) 将属性直接说明为主码。 create table employee ( eno char(4) primary key,
2.参照完整性约束的实现策略 前面讲到参照完整性约束时,规定外部码的取值只有两 种情况:① 取空值;② 取参照关系中的主码值。 当用户的操作违反了上述规则时,如何保持此种约束呢 ?sql中提供了三种可选方案供数据库实现者使用:restrict(限 制策略)、cascade(级联策略)和set null(置空策略)。但具体使 用情况视具体的rdbms不同而不同。
1.外部码约束的说明
说明外部码的方法有两种:
(1) 在该属性的说明(属性名、类型)后直接加上关键字
references,后跟对应表的主码说明,格式为
references <父表名>(<属性名>)
其中,属性名为父表的主码或者是被定义了unique约束
的属性名。
(2) 在create table语句的属性清单后,加上外部码的说明 子句,格式为 foreign key (<属性名表>) references <父表名>(<属性名表
3) 置空策略 置空策略也是针对父表的删除或修改操作的。在这种策 略下,当删除Department中某一元组或修改某一元组的Dno 时,Employee表中Dno分量中对应该部门号的值将被置空。 目前,大型RDBMS在实现参照完整性约束时,都默认采用 了限制策略,有的也支持上述方案中的其他策略。
Microsoft SQL Server环境下的SQL基本语句中,仅提供
了cascade(级联策略)和no action(限制策略)两种可选方案,默
认设置为no action,实现方法为 (1) on delete {cascade | no action}。 当指定要创建的表中的行具有引用关系,并且从父表中 删除该行所引用的行时,要对该行采取的操作:如果指定 cascade,则从父表中删除被引用行时,也将从引用表中删除 引用行;如果指定no action,sql server将产生一个错误并回 滚父表中的行删除操作。
name varchar(8),
sex char(2), age int, dno char(2) );
(2) 在属性列表后单独说明主码。
create table employee
( eno char(4), name varchar(8), sex char(2), age int,
dno char(2),
>)
其中,属性名表中的属性可以多于一个,但必须前后对
应。
例4.3 说明employee表中dno为外部码,被参照关系为 department。 两种方法分别如下: (1) 第一种方法。
create table employee
( eno char(4) primary key, name varchar(8),
这样也可保证关系employee中,每个元组的dno值必须是
关系department中的一个部门的部门号。上述定义在以后插
入、修改关系employee中的元组时都要检查,但它的作用与
外部码的作用并不完全相同,读者可自行分析。
2.基于元组的check约束 对表内元组说明约束时,可在create table语句中的属性 表、主码、外部码的说明之后加上check子句。每当对元组进
第4章 完整性和安全性
4.1 完整性约束的SQL定义 4.2 SQL中的触发器 4.3 数据库安全 4.4 小结
4.1 完整性约束的SQL定义
4.1.1 实体完整性约束和主码
在SQL中,实体完整性是通过主码(Primary Key)的定义 来实现的。一旦某个属性或属性组被定义为主码,该主码的 每个属性就不能为空值,并且在关系中不能出现与主码值完 全相同的两个元组。
sex char(2) check(sex in ('男','女')) check子句的条件中还可以带子查询,引用该关系的其他 属性甚至是其他关系。但是,在microsoft sql server环境下的 sql基本语句中并不支持此用法。
例如,可以使用check子句实现参照完整性约束,将外部 码说明改为如下说明: check(dno in(select dno from department))
eno char(4) constraint PK_employee primary key,
dno char(4) constraint FK_employee foreign key references department(dno);
例4.6中的约束可以在定义时命名如下: constraint rightsalary check (insure+fund<basepay); 这样,可以使用alter table语句来更新与属性或表有关的 约束。在3.2节已讨论了使用alter table语句的其他一些用法。 这里,再举例说明对约束的使用。
check(insure+fund<basepay) );
例4.6中,check约束涉及到表中多个域,为元组约束。 在对整个元组完成插入或对某一元组的修改完成之后,系统 将检查元组是否符合check条件表达式。 完整性约束的检查将花费系统一定的时间,特别是那些 复杂的check条件,虽然非常有用,但不应滥用。
除了主码,sql中还提供了类似于候选码的说明方法,使 用关键字unique描述,说明该属性(或属性组)的值不能重复出 现。但说明为unique的属性可以定义为空值,与候选码又有 所不同。一个表中只能有一个主码,但可以有多个“unique”
说明。
例4.2 说明employee表中职工不能重名。
实现上述要求有两种方法:
1.基于属性的check约束 使用check(检查)子句可保证属性值满足某些前提条件。 check子句的一般格式为
check (<条件>)
属性的check约束既可跟在属性的定义后,也可在定义语 句中另增加一子句加以说明。
例4.5 规定employee表中属性age的值不能小于18且不能
大于65。
primary key(eno) );
如果关系的主码只含有单个属性,则上面的两种方法都
可以使用;如果主码由两个或两个以上的属性组成,则只能
使用第二种方法。例如item_emp表的主码由ino和eno组成, 则只能采用第(2)种方法,primary key子句应说明成:
primary key (ino,eno)
on delete no action on update cascade
4.1.3 用户自定义完整性约束
用户自定义完整性约束取决于应用环境的需要,因此不 同数据库应用系统的自定义完整性要求是千差万别的,有些