关系数据库管理系统(DBMS)自动支持 (3)实体完整性约束
实体完整性约束是对关系中主码或主键属性值的约束。由实体完整性规则实现。
实体完整性规则:若属性A是关系R的主属性,则属性A不能取空值。 由此可见:
实体完整性约束是对关系的约束
每个关系必须有主码,主码的值唯一,用于标识关系的元组
组成主码的属性都不能取空值,而不仅仅是主码属性集整体不能取空值 (4)参照完整性约束
不仅两个或两个以上的关系间可以存在参照关系,同一个关系的属性间也可能存在参照关系。
外码不一定要与相应的主码同名
参照完整性规则:若属性(或属性组)F是关系R的外码,它与关系S的主码K相对应(关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:
或者取空值(F的每个属性值均为空值) 或者等于S中某个元组的主码值
参照完整性规则中,R和S可以是同一个关系 (5)用户定义完整性约束
主要是对属性的取值进行限定,所以主要是域完整性约束
域完整性约束是对属性的值域的约束,是指对关系中属性取值的正确性限制,包括数据类型、精度、取值范围、是否允许空值、是否有默认值等。
取值范围又分为静态定义和动态定义两种。
域完整性约束还包括定义属性间的依赖关系,这包括函数依赖和多值依赖。 注意:多个属性具有相同的域是可能的,甚至在同一个关系中的不同属性也可以有相同的域。
四、关系数据库基本语言SQL
1、SQL的基本概念和主要特点 (1)SQL的语言特点:
综合统一 高度非过程化
面向集合的操作方式 灵活的使用方式
语言简洁,易学易用,功能强 (2)SQL语言集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)的功能于一体。
(3)SQL语言的动词 SQL功能 动词 数据查询 select 数据定义 Create\\drop\\alter 数据操纵 Insert\%update\\delete 数据控制 Grant\\revoke (4)SQL的数据类型(P56-57) 预定义数据类型 构造数据类型 用户定义数据类型 大对象类型
(5)SQL语言支持数据库三级模式结构,其中,外模式对应于视图和部分基本表;模式对应于基本表;内模式对应于存储文件。
(6)元组对应于表中的行,属性对应于表中的列,具体如下:
一个SQL数据库模式是该数据库中基本表的集合
一个关系对应于一个SQL表,行对应于元组,列对应于属性 一个表中可以有多个索引,索引可以存放在存储文件中 存储文件的逻辑结构组成了SQL数据库的内模式 一个SQL表可以是一个基本表,也可以是一个视图 一个基本表可以跨一个或多个存储文件存放,一个存储文件也可以存放一个或多个基本表
SQL用户可以是应用程序,也可以是用户
SQL环境是SQL数据存在和SQL语句执行的语境 (7)SQL语言的组成
数据定义语言(DDL):包括数据库模式、表、视图、索引、域、触发器、自定义类型等
数据操纵语言(DML) 数据定义语言(DCL) 嵌入式和动态SQL规则
SQL调用和会话规则 (8)P59
2、SQL的数据定义功能 (1)定义SQL模式:
Create schema <模式名> authrization <用户名>
例:创建一个名为 s_sc_c 的学生-选课-课程数据库模式,属主食Jin Create schema s_sc_c authrization Jin (2) 删除SQL模式:
Drop schema <模式名> |cascade|restrict|
当选用 drop schema 语句删除数据库模式时,有以下两种方式:
选用cascade(级联方式),则当删除数据库模式时,该数据库模式连同其下属的模式对象(基本表、视图、索引等)全部被删除。
选用restrict(约束方式),则当删除数据库模式时,该数据库模式下属的模式对象(基本表、视图、索引等)预先已被全部删除,才能执行对该数据库模式的删除,否则拒绝删除。
例:删除一个名为 s_sc_c 的学生-选课-课程数据库模式。 Drop schema s_sc_c cascade (3) 创建基本表:
Create table [模式名] <表名> (<列名><数据类型>[列级完整性约束])
(4)扩充和修改基本表:
SQL语言用 ALTER TABLE 语句扩充和修改基本表 (5)删除基本表:
Drop table <表名> [cascade|restrict]
当使用 DROP TABLE 语句删除基本表时,可以选用两种方式:
选用 cascade(级联方式),则在删除基本表时,该基本表中的数据、表定义本身以及在该基本表上创建的视图和索引也随之消失;
选用 restrict(约束方式),只有在预先已经清除了该基本表中的所有数据以及在该基本表上所创建的视图和索引后,才能删除这个空表,否则拒绝删除该表。
默认值为CASCADE
(6)在基本表上建立一个或多个索引目的:提供多种存储路径,加快查找速度。 (7)创建索引:
Create [unique][cluster] index <索引名>
Unique 表示此索引的每一个索引值只对应唯一的数据
Cluster表示要建立的索引为聚簇索引,聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。
(8)在一个基本表上只能建立一个聚簇索引。 (9)删除索引:
DROP index [on <表名>] <索引名> 3、SQL的数据查询功能 (1)select * from
(2)字符_(下划线)表示可以和任意的单个字符匹配 字符%(百分号)表示可以和任意长的字符串匹配 (3)P65-71
4、SQL的数据修改功能
(1)SQL的数据修改语句包括插入、删除和更新三类语句。 (2)插入语句:insert into 表名 value
(3)删除语句:delete from <表名> [where <条件表达式> ] (4)更新语句:update <表名>
Set <列名>=<表达式> [where <条件表达式> ] 5、SQL的数据控制功能
(1)SQL的数据控制包括安全性控制、完整性控制、事务控制、并发控制和故障控制。
(2)SQL语言主要使用GRANT语句和REVOKE语句实现权限授予和权限收回。 (3)授予角色语句的一般格式:
Grant <角色> to {<用户> |public|} (4)授予权限语句的一般格式:
Grant {<权限>[,<权限>,...]|ALL} [on <对象名>]
TO{<用户>|<角色>[,<用户>|<角色>,...]|public} [with grant option]
语义:把对指定操作对象的指定操作权限授予指定的用户或角色。
(5)grant语句可以一次向一个用户授权,也可以一次向多个用户授权。 (6)权限收回与权限授予的语句一样。 6、SQL中视图的概念、定义、操作、意义
(1)视图:视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。
(2)视图是从一个或多个基本表(或其他视图)中使用select from 语句导出的表。它与基本表不同,是一个虚表。 (3)视图的创建:
Create view <视图名> As <子查询>
[with check option]
子查询一般不含有 ORDER BY 子句和 DISTINCT 短语的SELECT语句。 在CREATE VIEW 语句中可仅指定视图名,省略组成视图的各个属性列名 以下情况必须明确指定组成视图的所有列名:
其中某个目标列不是单纯的属性名,而是集合函数或列表达式 多表连接时选出了几个同名列作为视图中的列 需要在视图中为某列重新命名
(4)视图不仅可以建立在一个或多个基本表上,也可以建立在一个或多个已定义好的视图上,或同时建立在基本表与视图上。
(5)根据视图定义中的查询语句,将视图分为以下几类:
行列子视图:一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,称这类视图为行列子视图
带表达式的视图:一个视图带有由基本数据经过各种计算派生出的虚拟列,则称为带表达式的视图。
分组视图:一个视图在创建它的SELECT语句中使用了聚集函数和GROUP BY 子句,这样的视图称为分组视图。
连接视图:一个视图在创建它的SELECT语句中使用两个或多个表的连接,这样的视图称为连接视图。
(6)视图的删除:drop view <视图名> [cascade]
如果给出选项cascade,则由该视图导出的所有视图也同时删除。 (7)视图物化:指在视图第一次被查询的时候物理地建立一个临时的视图表(实表),并假设基于这个视图的其他查询会紧随其后,因而保留这个临时视图表。 (8)由于视图是虚表,因此对视图的修改,最终要转换为对基本表的修改。 并不是所有的视图都是可修改的 (9)视图的作用:
视图能够简化结构和复杂查询操作
视图使用户能以多种角度、更灵活地观察和共享同一数据 视图提高了数据的逻辑独立性 视图能够提供安全保护 (10)数据库程序设计方法:
将数据库命令嵌入到通用程序设计语言中 使用数据库函数库 设计一种全新的语言
7、SQL中存储过程、触发器、嵌入式SQL、动态SQL的概念和作用 (1)存储过程:是为了完成特定的功能而汇集成的一组语句,对该组语句命名、编译和优化后存储在数据库服务器中。 (2)使用存储过程的优点:
减少重复工作,还可以增强软件的模块
减少客户与服务器之间的数据传输和通信代价,提高运行效率。 通过为数据库用户提供更复杂类型的导出数据,增强视图所提供的建模能力 (3)SQL/PSM结合了SQL的数据操作能力和过程化预言的流程控制能力,是对SQL的过程化扩展,是一种实用而方便的数据库程序设计语言。
(4)触发器是用户定义在表上的一类特殊存储过程,触发器的执行是通过事件来触发执行的,所以成为触发器。
(5)触发器据有强大的数据控制和监视审计能力,是维护数据库完整性和安全性的简便而有效的方法,也是使数据库系统具有主动性的简便而有效的方法。 (6)创建/删除触发器:create/drop trigger<触发器> (7)P93-96
(8)动态SQL:动态SQL是SQL标准提供的一种语句运行机制,它允许在SQL客户模块或嵌入式宿主程序的执行过程中执行动态生成的SQL语句。动态SQL语句是指在程序编译时尚未确定,其中有些部分需要在程序的执行过程中临时生成的SQL语句。
(9)动态SQL的语句类型
可变的SQL的语句:在程序运行时临时输入完整的SQL语句 条件可变的SQL的语句:SQL语句中的条件子句具有可变性
数据库对象、条件都可变的SQL的语句:SQL语句中的数据库对象和条件子句都是可变的
(10)动态SQL语句的执行方式: 立即执行方式 先准备后执行方式
五、关系数据理论和数据库设计
1、关系数据库规范化理论的基本概念
(1)规范化理论提供了判断关系模式优劣的理论标准。
(2)规范化理论不仅对于关系模式数据库的设计有重要意义,而且对于其他模型数据库的设计也有重要的指导意义。 (3)关系模式SUPPLIER有以下问题:
数据冗余 更新异常 插入异常 删除异常
2、函数依赖的定义及函数依赖的公理系统
(1)函数依赖的定义:若X?Y,若Y?X,则称X?Y为平凡的函数依赖。(选择题)
若X?Y,则称X为决定因素
若X?Y,Y?X,则记为X?Y