- 数据模型三要素
数据结构(静态特性):描述数据库的组成对象及对象间的联系
常用来命名数据模型:层状模型,网状模型,关系模型
数据操作(动态特性)
数据上的约束:一组完整性规则的集合
两种非常重要的数据模型
1.关系数据模型
2.半结构化数据模型(XML)
高效性 易用性
关系模型的组成
(1) 关系数据结构:
关系模型中数据的逻辑结构是一张二维表,它由行和列组成。
(2) 关系操作集合:常用的关系操作包括查询、插入、删除、修改等
(3) 关系完整性约束:
<1> 实体完整性约束: 若属性A是基本关系R的主属性,则属性A不能取空值。(注意:说的是主属性,不仅仅指键属性)
<2> 参照完整性约束: 若属性(组)F是基本关系R的外码,它与基本关系S(或者R本身)的主码Ks相对应,则对于R中每个元组在F上的值必须为:空值(F的每个属性值均为空值)或者等于S中某个元组的主码值。
<3> 用户定义的完整性:针对某一具体应用所涉及的数据必须满足的语义要求,对关系数据库中的数据定义的约束条件。
- 关系:命名的二维表 用来描述事物及事物间的联系
- 属性
- 关系模式:关系名和其属性集合的组合(无序集合)
关系名(属性1,属性2...) - (关系)数据库模式:数据库的关系模式的集合
- 域:属性的数据类型,取值范围
关系名(属性1:string,属性2:integer...)
域必须是原子的(域中的元素是不可再分的单元) - 元组:除首行外其他的每一行
(分量1,分量2,……) - 分量:元组的属性(元组的每个分量有特定顺序)
- 键:属性(组),可唯一确定一个元组,若删去其中一个就不能(否则叫超键)
A,B为键的话就代表没有哪两个元组A,B上的分量均相同(仅仅A或仅仅B
相同是可以的 - 候选码:具有键的性质的属性(组)
- 主属性:包含在候选码中
- 非主属性
- 主码(主键):在关系模式中用下划线表示
- 全码:若一个关系的所有属性一起才能构成该关系的码
- 外键:a(被参照)表的主键作为b(参照)表的外键
- 关系实例:一个给定关系中元组的集合
- 当前实例:当前元组集合
- 模式:关系名和属性集合,不太变(数据库的逻辑设计)
- 实例:元组集合,经常变(给定时刻数据库中数据的一个快照)
在SQL中定义关系模式
1.数据定义:用于定义数据库模式的子语言
2.数据操纵:用于查询和更新数据库的子语言
SQL区分三类关系
1.表:存储的关系,存储在数据库中
2.视图:通过计算来定义的关系,不在数据库中存储,只在需要的时候被完整或部
分地构造
3。临时表:执行数据查询和更新时由SQL处理程序临时构造,处理结束后被删除
不会存储在数据库里
数据类型
char(n):最大为n个字符的固定长度字符串(未满的空间会被自动填充)
varchar(n):最大n个字符的可变长度字符串(结束符标记,未满空间不会被填充)
bit(n)
bit varying(n)
boolean:true,false,unknown
int/integer
shortint
float/real
double precision:精度更高
decimal(n,d)
numeric
date:DATE'1983-06-17'
time:TIME'15:00:02.5'
- 模式图
关系查询语言
- 过程化语言:用户指导系统对数据库执行一系列操作以计算出结果
- 非过程化语言:用户只需描述所需信息
实际使用的查询语言两种成分都有
关系代数
一种抽象的查询语言
关系模型数据操纵语言的一种传统的表达方式 ,使用户可以对数据进行查询和修改。
原子操作数:代表关系的变量和代表有限关系的常量
操作:并,交,差;选择(消除某些行),投影(消除某些列);组合两个关系元组:笛卡儿积(所有可能的连接),连接(有选择的连接);重命名
关系代数的表达式称为查询
并,交,差
前提:R和S的模式具有相同的属性集,且顺序相同(属性名不同,可以改名。)
投影:π{小小的下标:title,year,length}(Movies)
会对结果产生的关系进行去重
选择:
σ{小小的下标作为元组选择的条件:length>100 and studioName='fox'}(Movies)
运算施加在单个关系或一对关系上,运算结果也总是单个关系
- 笛卡尔积运算:RXS其结果包含来自两个关系元组的所有对,无论属性值是
否匹配(有序对的集合)
若R和S中都有属性m,则要重命名R.m,S.m - 自然连接:natural join R⋈S两个关系上的自然连接运算所匹配的元组在两个关系
共有的所有属性上取值相同,生成连接元组,共同的属性只用写一列
悬浮元组:不能和另外关系中的任何一个元组匹配
注:
自然连接由笛卡尔积、选择、投影三个步骤实现的:
笛卡尔积:拼接元组
选择:选出公共属性上相同的行
投影:去掉一组公共属性
自然连接符合结合律:
(R1⋈R2)⋈ R3 等价于 R1⋈(R2⋈ R3)
可简记为 R1⋈R2⋈ R3
- θ连接:R⋈{小小的下标表示条件:C}S
先得到RXS 然后在得到的关系中寻找满足条件C的元组
若R和S中都有属性m,则要重命名R.m,S.m
笛卡尔积、选择——》θ连接
关系表达式树
重命名:ρ{小小的下标:S(A1,A2,A3……)}(R)
把关系R的名字改成S,并且属性的名字改成A1,A2……
并,差,选择,投影,积运算,重命名无法用其它操作来实现
一般参与运算(尤其连接运算)的数据越少速度越快(所以优化应该是可以先选择,投影再连接。)
代数表达式的线性符号
用关系代数表示约束
1.引用完整性:在一个关系属性A列中出现的值也必须在同一个或不同关系相应列
B中 π{下标A}(R)⊆π{下标B}(S)(下标中可以有多个属性)
2.键约束:键上值相同,其它属性不同的两个元组是不存在的
σ{下标:MS1.name=MS2.name and MS1.addr≠MS2.addr}(MS1XMS2)=Φ
(MS1,MS2都是movieStar重命名之后的关系)