1关系模式与关系数据库
1.1数据库的数据、逻辑、物理独立性
数据独立性高
物理独立性
指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。当数据的物理存储改变了,应用程序不用改变。逻辑独立性
指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,用户程序也可以不变。- 数据独立性是由DBMS的二级映像功能来保证的
本质:希望不管怎么变,想不修改应用程序
1.2关系数据库三级模式、两级映像
数据库系统模式的概念
模式是数据库结构的描述、关系模式是表的结构的描述
;
"型" 和"值" 的概念
型(Type)
对某一类数据的结构和属性的说明
值(Value)
是型的一个具体赋值
例如
学生记录型:
(学号,姓名,性别,系别,年龄,籍贯)
一个记录值:
(900201,李明,男,计算机,22,江苏)
模式(Schema)
数据库逻辑结构和特征的描述(数据模型是什么,表的结构、表之间的关系等等)
是型的描述,反映的是数据的结构及其联系
模式是静态的,相对稳定的,是数据库的蓝图或框架
一个数据库只有一个模式(三级模式中的概念模式)
实例(Instance)
模式的一个具体值
反映数据库某一时刻的状态
同一个模式可以有很多实例
实例随数据库中的数据的更新而变动
例如:在学生选课数据库模式中,包含学生记录、课程记录和学生选课记录
2003年的一个学生数据库实例,包含:
2003年学校中所有学生的记录
学校开设的所有课程的记录
所有学生选课的记录
2002年度学生数据库模式对应的实例与2003年度学生数据库模式对应的实例是不同的
数据库三级模式的结构和特征
-
外部模式(External Schema):
- 定义:外部模式描述特定用户或应用程序可以看到和访问的数据库部分视图。它定义了用户视角的数据结构。
- 特征 :
- 每个用户或应用程序可以有不同的外部模式,提供个性化的数据库视图。
- 通过视图(Views)来实现。
- 保障数据的安全性和隐私,用户只能访问授权的数据。
-
概念模式(Conceptual Schema):
- 定义:概念模式描述数据库的全局逻辑结构,是对数据库中所有数据的整体描述,独立于物理存储细节。
- 特征 :
- 包含所有实体、关系、属性及其约束。
- 提供数据库的全局视图,隐藏了物理细节。
- 确保数据的一致性和完整性。
- 独立于任何特定用户视角。
-
内部模式(Internal Schema):
- 定义:内部模式描述数据库在物理存储层面的实现细节,涉及数据存储结构、存储路径、索引、压缩和加密等技术。
- 特征 :
- 关注数据在存储设备上的布局和组织方式。
- 优化数据的存储和访问性能。
- 涉及具体的存储结构和文件组织方式。
- 包含存储分配、数据压缩、索引和访问方法等细节。
三级模式体系的优点
- 数据独立性 :
- 逻辑数据独立性:概念模式独立于外部模式,用户的视图变化不会影响概念模式。
- 物理数据独立性:内部模式独立于概念模式,物理存储的变化(如存储结构优化)不会影响概念模式。
- 灵活性:能够根据不同用户或应用程序的需求定制不同的外部模式视图。
- 数据安全性:通过外部模式控制用户对数据的访问权限,保障数据安全性和隐私。
示例说明
假设有一个大学管理系统,其数据库设计如下:
-
外部模式:
- 教师视图:包括教师信息和所教授的课程信息。
- 学生视图:包括学生信息和所选课程信息。
- 管理员视图:包括所有教师、学生和课程的详细信息。
-
概念模式:
- 实体:教师(Teacher)、学生(Student)、课程(Course)。
- 关系:教师教授课程(Teacher teaches Course)、学生选修课程(Student enrolls Course)。
- 属性:教师ID、教师姓名、学生ID、学生姓名、课程ID、课程名称等。
-
内部模式:
- 数据存储:教师、学生、课程表在磁盘上的具体存储方式。
- 索引:在教师ID、学生ID、课程ID上创建索引以加速查询。
- 存储结构:使用B树或哈希表来组织存储。
数据库的二级映像功能与数据独立性
三级模式是对数据的三个抽象级别
二级映象在DBMS内部实现这三个抽象层次的联系和转换
外模式/模式映像
模式/内模式映像
① 外模式/模式映象
模式:描述的是数据的全局逻辑结构
外模式:描述的是数据的局部逻辑结构
同一个模式可以有任意多个外模式
每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系
映象定义通常包含在各自外模式的描述中
保证数据的逻辑独立性
当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变
应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
② 模式/内模式映象
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。
例如,说明逻辑记录和字段在内部是如何表示的
数据库中模式/内模式映象是唯一 的
该映象定义通常包含在模式描述中
保证数据的物理独立性
当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变。
应用程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性。
关系模式与关系r
关系模式是表的结构的描述
关系模式可以形式化地表示为:
R(U,D,DOM,F)
R 关系名
U 组成该关系的属性名集合
D 属性域
属性域定义了每个属性的取值范围或数据类型。例如,StudentID 的域可以是整数类型,Name 的域可以是字符串类型。
DOM 属性的取值范围
DOM(Ai) 表示属性 Ai的取值范围,确保每个属性的值符合其定义的域。例如,DateOfBirth 的域可能是日期格式。
F 属性间的数据依赖关系集合
函数依赖是一组约束,表示在关系中某些属性的值决定了其他属性的值。例如,StudentID -> Name 表示学生ID唯一确定学生的名字。
·
关系模式通常可以简记为
R (U) 或 R (A1,A2,...,An)
R: 关系名
A1,A2,...,An : 属性名
关系
在关系型数据库中,"关系"和"表"通常可以互换使用。
1.3关系数据库的完整性约束:实体完整性、参照完整性、 自定义完整性
码(Key) :唯一标识实体的属性集称为码。例如学号是学生实体的码。又可以称为键。
候选码 是最小的码集合,它可以唯一地标识数据表中的每一条记录,并且没有冗余的成分。换句话说,候选码是那些没有多余属性的码,不能再去掉任何属性而仍然保持其唯一性。
简单的情况:候选码只包含一个属性,最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码 (All-key),若一个关系有多个候选码,则选定其中一个为主码(Primary key),候选码的属性称为主属性 (Prime attribute),不包含在任何侯选码中的属性称为非主属性(Non-Prime attribute)或非码属性(Non-key attribute)。
++三大完整性约束++
实体完整性(Entity Integrity)
若属性A是基本关系R的主属性,则属性A不能取空值
例:
SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
主码POSTGRADUATE 不能取空值
实体完整性规则的说明
(1) 实体完整性规则是针对基本关系而言的。一个基本表通常对应现 实世界的一个实体集。
(2) 现实世界中的实体是可区分的,即它们具有某种唯一性标识。
(3) 关系模型中以主码作为唯一性标识。
(4) 主码中的属性即主属性不能取空值。主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性
外码 (Foreign Key)
设F是基本关系R的一个或一组属性,但不一定是关系R的码。如果F与基本关系S的主码 Ks相对应,则称F是基本关系R的外码,即该码是另一个表的主码 。
基本关系R称为参照关系 (Referencing Relation),即本表。
基本关系S称为被参照关系(Referenced Relation) 或目标关系(Target Relation),即外码对应的主码所在的表。
- 关系R和S不一定是不同的关系
- 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上
- 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名 字,以便于识别
参照完整性规则
若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)
- 或者等于S中某个元组的主码值
- 外码的值要么为空,要么为S中某个元组的主码值
蓝色表示有参照关系,横线表示主属性
用户定义的完整性
- 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
- 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能
2关系代数
关系代数运算符
传统的集合运算
① 并(Union)
② 差(Difference)
③ 交(Intersection)
④ 笛卡尔积(Cartesian Product)
专门的关系运算
① 几个记号
② 选择(Selection)
③ 投影(Projection)
④ 连接(Join)
❶ 左连接、右连接、外连接
⑤ 除(Division)
⑥ 综合举例
,"除"运算有以下几个主要作用:
1. 处理全包含查询
"除"运算最常见的作用是处理全包含查询,即查找那些在所有给定条件下都符合的记录。例如:
- 在学生选课的例子中,查找选修了所有必修课程的学生。
- 在销售数据中,查找那些在所有给定月份内都有销售记录的销售员。
2. 数据筛选和过滤
通过"除"运算,可以筛选出那些在特定条件下全部符合的记录。这在许多实际应用中非常有用,例如:
- 选出那些符合所有标准的产品。
- 找出在所有项目中都取得成功的员工。
3SQL语⾔
基本表的定义、删除与修改---TABLE
定义基本表的标准格式
CREATE TABLE <表名>(
<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]
.........
[,<表级完整性约束条件> ]
);
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
++定义主码、定义外码++
- 示例:
数据类型
-
SQL中
域
的概念用数据类型
来实现 -
定义表的
属性
时 需要指明其数据类型及长度
-
选用哪种数据类型
- 取值范围
- 要做哪些运算
-
以下是通用数据类型,不同数据库的数据类型可能有所不同,可查相关文档。
修改基本表
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ];
[例8]向Student表增加"入学时间"列,其数据类型为日期型。
-
不论基本表中原来是否已有数据,新增加的列一律为空值。
ALTER TABLE Student ADD S_entrance DATE;
[例9]将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
[例10]增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表
标准格式:
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:删除表是有限制的。
欲删除的基本表不能被其他表的约束 所引用(三类完整性约束,这里主要指参照完整性)
如果存在依赖该表的对象,则此表不能被删除(视图、索引、触发器)
CASCADE:删除该表没有限制。
在删除基本表的同时,相关的依赖对象一起删除