例如
ID | name | dpt_name | salary |
---|---|---|---|
11111 | JAM | CS | 12345 |
另外的例子
关系模式可以表示成
R
(
A
1
,
A
2
,
…
,
A
n
)
R(A_1,A_2,…,A_n)
R(A1,A2,…,An)
关系模式不常变化,关系实例常变化。(可以参考第7版教科书32页的图2-9)
Keys(键与码)
K
K
K是唯一识别关系
r
(
R
)
r(R)
r(R)中的一个元组,称
K
K
K是关系
r
(
R
)
r(R)
r(R)的超码(Superkey)
如 {ID}和{ID, name}是instructor的超码
候选码与主码
任意真子集不能称为超码的最小超码为候选码
如{ID}是instructor的候选码
若{name, dept_name}可以唯一确定instructor的各成员,那他也是候选码
于是需要选择其中一个候选码作为主码(primary key)
外码
一个关系模式 ( r 1 ) (r_1) (r1)在其属性上包含另一个关系模式 ( r 2 ) (r_2) (r2)的主码,此属性在 r i r_i ri上称为参照 r 2 r_2 r2的外码(foreign key), r 1 r_1 r1称为外码依赖的参照关系
如 dept_name是instructor的外码
参照完整性约束
参照关系中任意元组在 特定属性(如外码) 的取值,必须等于被参照关系中某个元组在 此特定元素 上的取值
例外:外码约束
模式图
一个含主码与外码依赖的数据库可用模式图表示
分过程化语言与非过程化语言
纯查询语言
所有过程化查询语言(如关系代数)都提供一组关系运算,施加于单个关系上或一对关系上,结果为单个关系
关系代数
基本关系运算
选择 | σ \sigma σ | 一元 |
投影 | Π \Pi Π | 一元 |
并 | ∪ \cup ∪ | 二元 |
差 | − - − | 二元 |
笛卡尔积 | × \times × | 二元 |
更名 | ρ \rho ρ | 一元 |
交连接赋值都可由上述内容引申
选择满足给定为此的元组
σ
p
(
r
)
\sigma_p(r)
σp(r)
其中
p
p
p是选择谓词
σ
p
(
r
)
=
{
t
∣
t
∈
r
∧
p
(
t
)
}
\sigma_p(r) = \{t|t\in r\land p(t) \}
σp(r)={t∣t∈r∧p(t)}
总的来说,就是在最后显示的时候只显示其中某些行。
过滤掉特定元素
Π
A
1
,
A
2
,
…
,
A
m
(
r
)
\Pi_{A_1,A_2,…,A_m}(r)
ΠA1,A2,…,Am(r)
A
i
A_i
Ai属性名,
r
r
r是关系名
通过去除未列出的列,获得的一个m 列的关系
对比
σ
去除的是行,
Π
去除列
\sigma去除的是行,\Pi去除列
σ去除的是行,Π去除列
结合来自任意两个关系的信息
表示
r
×
s
r\times s
r×s
由于相同属性名可能同时出现在 r ( R ) r(R) r(R), s ( S ) s(S) s(S),所以在这个过程中需要rename以区别这些属性
r
×
s
=
{
<
t
,
q
>
∣
t
∈
r
∧
q
∈
s
}
r\times s = \{
r有n列m行数据,k有i列j行数据
r
×
k
有
n
+
i
列,
m
×
k
行
r\times k 有n+i列,m\times k 行
r×k有n+i列,m×k行
r ⋈ θ s = σ θ ( r × s ) r\Join_\theta s = \sigma_\theta(r\times s) r⋈θs=σθ(r×s)
θ \theta θ是 R ∪ S R\cup S R∪S模式属性上的一个选择谓词
符号表示 r ∪ s = { t ∣ t ∈ r ∨ t ∈ s } r\cup s = \{t|t\in r\lor t\in s\} r∪s={t∣t∈r∨t∈s}
如果要让 r ∪ s r\cup s r∪s有意义,要求两个条件成立
本质上是加行
r
−
s
=
{
t
∣
t
∈
r
∧
t
∉
s
}
r-s = \{t|t\in r\land t\notin s\}
r−s={t∣t∈r∧t∈/s}
要求同并运算
本质上就是减行
p
x
(
E
)
p_x(E)
px(E)
返回表达式E的结果并把名字x赋予给他
若表达式E是多元的,可以设置
p
x
(
A
1
,
A
2
,
.
.
.
,
A
n
)
(
E
)
p_{x(A_1,A_2,...,A_n)}(E)
px(A1,A2,...,An)(E)
返回E的结果,赋予名字x,各属性更名为
A
i
A_i
Ai
基本表达式是如下二者之一:
其他附加关系运算
不增强关系代数表达能力,但可简化查询
r
∩
s
=
{
t
∣
t
∈
r
∧
t
∈
s
}
r\cap s = \{t| t\in r\land t\in s\}
r∩s={t∣t∈r∧t∈s}
等价于
r
∩
s
=
r
−
(
r
−
s
)
r\cap s = r-(r-s)
r∩s=r−(r−s)
如果r和s中有名字相同的列,那么需要先检验这些列内的数据是否一致,将一致的数据额外加上两个集合中都没有的列
R = (A, B, C, D)
✓ S = (E, B, D)
✓ 自然连接结果的关系模式为(A, B, C, D, E)
(如果是连接时 A,B,C,D,E,B,D)
r
⋈
s
=
Π
r
.
A
,
r
.
B
,
r
.
C
,
r
.
D
,
s
.
E
(
σ
r
.
B
=
s
.
B
,
r
.
D
=
s
.
B
(
r
×
s
)
)
r\Join s = \Pi_{r.A, r.B, r.C, r.D, s.E}(\sigma_{r.B= s.B, r.D=s.B}(r\times s))
r⋈s=Πr.A,r.B,r.C,r.D,s.E(σr.B=s.B,r.D=s.B(r×s))
赋值操作(
←
\leftarrow
←)可以使复杂查询的表达变得简单,即将查询表达为
一个顺序程序,包括
✓一系列的赋值
✓一个值被做为查询结果显示的表达式
➢ 赋值赋给一个临时关系变量,并不修改数据库关系实例
➢ 赋值赋给一个数据库关系,修改数据库关系实例
参考乘的逆运算即可