文章目录
一、相关数据库(Relational Database)的结构
1.行、列、表
这本的数据库研究的都是相关关系数据库,后面讲的全是这个相关关系。
-
一行(tuple)是一个实体,行的排列是无序的。
-
列名(colunm_name)叫做属性(attribute)
-
一个表(table)是一个实体的集合,就是一个相关关系(relation)
2.null值
(1)定义
null代表不知道的值(an unknown value)或者不存在(a value does not exist),用于行中。
(2)谓词
两个null值认为是一样的。
(3)运算
- 数学运算符对null进行操作后结果仍然为null。如:5+null 返回null。
- project Π \Pi Π、union ∪ \cup ∪、set-intersection ∩ \cap ∩、set-difference − - −、generalized projection:像对待其他数值一样
- aggregate functions :
在分组属性(grouping attributes)中:就像在project Π \Pi Π中一样。如果两个元组在所有分组属性上都相同,则操作会将它们放在同一组中,即使它们的某些属性为空。
在聚合属性(aggregated attributes)中:在应用聚合之前,从一开始就删除空值。如果结果多重集为空,则聚合结果为空。
3.unknown值
(1)逻辑与、或、非
OR
(unknown or true) = true,
(unknown or false) = unknown
(unknown or unknown) = unknown
AND
(true and unknown) = unknown,
(false and unknown) = false,
(unknown and unknown) = unknown
NOT
(not unknown) = unknown
(2)谓词
P is unknown
如果P是unknown,那么P is unknown的判断结果是true
(3)select
如果值是unknown的话,那么值被认为不符合判断条件。
4.键
-
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键。
理解:超键是属性集,意味着一个列名可以是超键,几个列名也可以是超键
如:{customer_id, customer_name} and {customer_id} are both superkeys of Customer. -
候选键(candidate key):不含有多余属性的超键称为候选键
理解:就是只有一个元素的超键。
如:{customer_id}或{customer_name}都是候选键 -
主码(primary key):用户选作元组标识的一个候选键程序主键
替换码(alternate Keys):那么其他的候选键就是替换码。
如:我们选择{customer_id}作为主码,那么{customer_name}就是候选码。反之一样 -
外码(foreign Key):一个关系r1中的一个属性或一组属性,与关系r2(可能相同)的候选键相匹配。
如:r1的外码是r2中主码。
5.完整性约束
- Entity integrity(实体完整性约束):In a base relation, 主码的值不能为空.
- Referential integrity(参照完整性约束):外键参照的那个表中主键必须存在。
二、相关关系的代数指令(查)
0.总结
只使用这些指令,那么意味着查询特定数据。
相应习题:https://blog.youkuaiyun.com/sandalphon4869/article/details/90516749#_225
基本代数名称 | 代数符号 | 作用 |
---|---|---|
select | σ \sigma σ(sigma小写) | 选择行 |
project: | Π \Pi Π(pi大写) | 选择列 |
union: | ∪ \cup ∪ | 行的并集,列相同 |
set difference: | – | 行的差集,列相同 |
cartesian product: | × \times × | 行的笛卡尔积,列=R和S的和(不是并集) |
rename: | ρ \rho ρ | 另命名 |
附加代数名称 | 代数符号 | 作用 |
---|---|---|
set-intersection | ∩ \cap ∩ | 行的交集,列相同 |
natural-join | ⋈ \bowtie ⋈ | 自然连接:两表中相同属性中各个对应属性相同的去重属性笛卡尔积。 |
division | ÷ \div ÷ | 除:表示结果是相关关系r的R-S的列,行是对于相同的r中的R-S列中的实体, 其相关关系r中的S列在相关关系s的S列都有的行。 |
assignment | ← | 赋值 |
扩展代数名称 | 代数符号 | 作用 |
---|---|---|
generalized project | Π \Pi Π | 含有代算术运算的选择列 |
聚合函数 | ||
avg | average value | |
min | minimum value | |
max | maximum value | |
sum | sum of values | |
count | number of values | |
四大连接 | ||
自然连接(内连接) natural join(inner join) | ⋈ \bowtie ⋈ | 只保留两者都共有的 |
左连接left outer join | ⊐ ⋈ \sqsupset \bowtie ⊐⋈ | 保证左边关系的完整性 |
右连接right outer join | ⋈ ⊏ \bowtie \sqsubset ⋈⊏ | 保证右边关系的完整性 |
全连接full outer join | ⊐ ⋈ ⊏ \sqsupset \bowtie \sqsubset ⊐⋈⊏ | 保证两边关系的完整性 |
1.Fundamental
(1)select:σ
格式:σp( r )
根据谓词p的选择条件,从相关关系r中挑选出符合条件的行。
谓词p
一个谓词条目(term):[列column/属性attribute] [操作符op(=, ≠, >, <, ≥, ≤)] [某个值]
多个谓词的链接: ∧(and), ∨ (or), ¬ (not)
例子
选择出A=B并且D的值大于5的行构成新的相关关系
(2)project: Π \Pi Π
格式: Π A 1 , A 2 , . . . , A 3 ( r ) \Pi_{A1,A2,...,A3}( r ) ΠA1,A2,...,A3(r)
从r中选择出特定的列(A1,A2,…,A3)构成新的相关关系
PS:自动去除重复的行,去重叫做(remove duplicate rows)
例子
(3)union: ∪
格式:r ∪ s
求两个相关关系的并集:行的并集,列相同(行去重)
PS:这两个相关关系必须有一样的属性/列
例子
(4)set difference: −
格式:r−s
求两个相关关系的差集:行的差集,列相同
PS:这两个相关关系必须有一样的属性/列
例子:
(5)cartesian product: X
格式:r X s
求两个相关关系的笛卡尔集
属性:
新生成的行数 = r的行数 * s的行数
新生成的列数 = r的列数 + s的列数
关系属性重名
要么
- 如果r ∩ s = 空集,那么可以直接r X s
- 如果两个关系属性重名(r X r),则必须采用重命名机制(rename操作)加以区分,pd( r ),然后才能
r X d
例子:
(6)rename: ρ \rho ρ
格式: ρ d ( r ) \rho_{d}( r ) ρd(r)
将相关关系r起名为d
格式: ρ d ( A 1 , A 2 , . . . , A n ) ( r ) \rho_{d(A1,A2,...,An)}( r ) ρd(A1,A2,...,An)(r)
将相关关系r起名为d,并将其内列名起名为A1,A2,…An。
(7)组合操作的例子
2.Additional
(1)set-intersection:∩
行的交集,列相同
格式:r ∩ s
r1和r2有一样的列/属性
等价: r ∩ s = r – (r – s)
等价于set difference
r – s:(在r中)去掉s中特有的元素、保存r中特有的元素(去掉r、s中共有的元素)
r –(r – s): (在r中)去掉r中特有的元素(保存r、s中共有的元素)
例子
(2)natural join(inner join):⋈
格式:r ⋈ s
r和s的自然连接:两表中相同属性中各个对应属性相同的去重属性笛卡尔积。
等价: r ⋈ s = Π r . A , r . B , r . C , r . D , s . E ( σ r . B = s . B ⋁ r . D = s . D ( r × s ) ) r \bowtie s = \Pi_{r.A,r.B,r.C,r.D,s.E} (\sigma_{r.B=s.B \bigvee r.D=s.D}(r \times s)) r⋈s=Πr.A,r.B,r.C,r.D,s.E(σr.B=s.B⋁r.D=s.D(r×s))
等价于project, select, cartesian product
- σ r . B = s . B ⋀ r . D = s . D ( r × s ) \sigma_{r.B=s.B \bigwedge r.D=s.D} (r \times s) σr.B=s.B⋀r.D=s.D(r×s):r和s的笛卡尔积,选择B、D分别同值的行
r.A | r.B | r.C | r.D | s.B | s.D | s.E |
---|---|---|---|---|---|---|
α | 1 | α | a | 1 | a | α |
α | 1 | α | a | 1 | a | γ |
α | 1 | γ | a | 1 | a | α |
α | 1 | γ | a | 1 | a | γ |
δ | 2 | β | b | 2 | b | δ |
- Π r . A , r . B , r . C , r . D , s . E ( σ r . B = s . B ⋀ r . D = s . D ( r × s ) ) \Pi_{r.A,r.B,r.C,r.D,s.E} (\sigma_{r.B=s.B \bigwedge r.D=s.D}(r \times s)) Πr.A,r.B,r.C,r.D,s.E(σr.B=s.B⋀r.D=s.D(r×s)):去掉一个B、D列
r.A | r.B | r.C | r.D | s.E |
---|---|---|---|---|
α | 1 | α | a | α |
α | 1 | α | a | γ |
α | 1 | γ | a | α |
α | 1 | γ | a | γ |
δ | 2 | β | b | δ |
例子
(3)division:÷
格式:r ÷ s
等价:
设R = (A1, …, Am , B1, …, Bn ),S = (B1, …, Bn)
则
r
÷
s
=
Π
R
−
S
(
r
)
–
Π
R
−
S
(
(
Π
R
−
S
(
r
)
)
×
s
–
Π
R
(
r
)
)
r \div s = \Pi_{R-S}(r) – \Pi_{R-S}((\Pi_{R-S}(r)) \times s – \Pi_{R}(r))
r÷s=ΠR−S(r)–ΠR−S((ΠR−S(r))×s–ΠR(r))
等价于project, set difference, cartesian product
表示结果是相关关系r的R-S的列,行是对于相同的r中的R-S列中的实体,其相关关系r中的S列在相关关系s的S列都有的行。
比如:
相关关系r的R-S的列就是α、β、γ、δ、ε,
行就是α在r中有1、2,3,都有s中的1、2;β在r中有1、2,都有s中的1、2;γ在r中有1,缺少s中的2;δ在r中有1、3,4,缺少s中的2;ε在r中有1、6,缺少s中的2。
所以只有α、β符合。
- Π R − S ( r ) \Pi_{R-S}( r ) ΠR−S(r)
A |
---|
α |
β |
γ |
δ |
ε |
- ( Π R − S ( r ) ) × s (\Pi_{R-S}(r)) \times s (ΠR−S(r))×s
A | B |
---|---|
α | 1 |
α | 2 |
β | 1 |
β | 2 |
γ | 1 |
γ | 2 |
δ | 1 |
δ | 2 |
ε | 1 |
ε | 2 |
- ( Π R − S ( r ) ) × s – Π R ( r ) (\Pi_{R-S}(r)) \times s – \Pi_{R}(r) (ΠR−S(r))×s–ΠR(r)
A | B |
---|---|
γ | 2 |
δ | 2 |
ε | 1 |
- Π R − S ( ( Π R − S ( r ) ) × s – Π R ( r ) ) \Pi_{R-S}((\Pi_{R-S}(r)) \times s – \Pi_{R}(r)) ΠR−S((ΠR−S(r))×s–ΠR(r))
A |
---|
γ |
δ |
ε |
- r ÷ s = Π R − S ( r ) – Π R − S ( ( Π R − S ( r ) ) × s – Π R ( r ) ) r \div s = \Pi_{R-S}(r) – \Pi_{R-S}((\Pi_{R-S}(r)) \times s – \Pi_{R}(r)) r÷s=ΠR−S(r)–ΠR−S((ΠR−S(r))×s–ΠR(r))
A |
---|
α |
β |
例子
(4)assignment:←
t e m p 1 ← Π R − S ( r ) temp1←\Pi_{R-S}(r) temp1←ΠR−S(r)
3.Extended
(1)generalized projection
格式: Π F 1 , F 2 , . . . , F n ( r ) \Pi_{F1,F2,...,Fn}( r ) ΠF1,F2,...,Fn(r)
一般化投影generalized projection是投影projection的扩展,是带上了算术运算的。
F表示A之间的算术运算,比如F = A1+A2
格式: Π F 1 a s X , F 2 , . . . , F n ( r ) \Pi_{F1 \ as \ X,F2,...,Fn}( r ) ΠF1 as X,F2,...,Fn(r)
还可以把F1的列起名为X。
例子:
Π
c
u
s
t
o
m
e
r
_
n
a
m
e
,
(
l
i
m
i
t
−
c
r
e
d
i
t
_
b
a
l
a
n
c
e
)
a
s
c
r
e
d
i
t
_
a
v
a
i
l
a
b
l
e
(
c
r
e
d
i
t
_
i
n
f
o
)
\Pi_{customer\_name, (limit-credit\_balance) \ as \ credit\_available}(credit\_info)
Πcustomer_name,(limit−credit_balance) as credit_available(credit_info)
(2)aggregate functions
格式:
参数 | 含义 | 理解 |
---|---|---|
E | E is any relational-algebra expression | 相关关系 |
G | G1, G2 …, Gn is a list of attributes on which to group (can be empty) | 列/属性(分组依据) |
F | Each Fi is an aggregate function | 聚合函数 |
A | Each Ai is an attribute name | 列/属性 |
aggregate functions
聚合函数 | 含义 |
---|---|
avg | average value |
min | minimum value |
max | maximum value |
sum | sum of values |
count | number of values |
例子
(3)outer join: ⊐ ⋈ \sqsupset \bowtie ⊐⋈、 ⋈ ⊏ \bowtie \sqsubset ⋈⊏、 ⊐ ⋈ ⊏ \sqsupset \bowtie \sqsubset ⊐⋈⊏
四大连接 | 格式 | markdown | 法则 |
---|---|---|---|
自然连接(内连接) natural join(inner join) | ⋈ \bowtie ⋈ | $\bowtie$ | 只保留两者都共有的 |
左连接left outer join | ⊐ ⋈ \sqsupset \bowtie ⊐⋈ | $\sqsupset \bowtie$ | 保证左边关系的完整性 |
右连接right outer join | ⋈ ⊏ \bowtie \sqsubset ⋈⊏ | $\bowtie \sqsubset$ | 保证右边关系的完整性 |
全连接full outer join | ⊐ ⋈ ⊏ \sqsupset \bowtie \sqsubset ⊐⋈⊏ | $\sqsupset \bowtie \sqsubset$ | 保证两边关系的完整性 |
左连接、右连接、全连接都是在自然连接的基础上发展的,对于没有的值,用null值代替。
保证表示左边的相关关系里的共有列里的行都在结果中。
三、数据库的代数指令(增、删、改)
习题:https://blog.youkuaiyun.com/sandalphon4869/article/details/90516749#_311
1.增insertion
格式: r ← r ∪ E r←r \cup E r←r∪E
2.删deletion
格式: r ← r − E r←r - E r←r−E
只能删除整个元组(整行);不能只删除特定属性上的值(一行中的某个值)
3.改updating
格式: r ← Π F 1 , F 2 , . . . , F n ( r ) r←\Pi_{F1,F2,...,Fn} (r) r←ΠF1,F2,...,Fn(r)