1.primary key:要求元组中不能出现相同的主键
2.foreign key:当r的主键是s的属性B,则B是s的外键。
外键是别人的主键。
B中的值必须从s的主键中选取。
relation algebra
1.select: σ 条件 ( 表 ) \sigma_{条件}(表) σ条件(表),从表中选取符合条件的元组
使用 ∧ \wedge ∧和 ∨ \vee ∨增加条件
2.projection : Π 属性 1 , 属性 2... ( 表 ) \Pi_{属性1,属性2...}(表) Π属性1,属性2...(表),输出不相同的元组。(注意不是多个属性值),
出现all of 的时候用
3.Union A ∪ B A\cup B A∪B,将表连接起来扩展行,A,B必须有相同的属性。
4.difference: A − B A-B A−B,在A中不在B中的元组
5.Cartensian-product: A × B A\times B A×B,输出A和B的笛卡尔积,扩展后名称相同的元素被重命名为s.A,t.A,注意每一行都会被匹配一次,一共m*n行
一般外面套一个select做两张表的列扩展
6.rename: ρ x ( E ) \rho_x(E) ρx(E),将表E重命名为x,另外E的属性也可以重命名。
7.natural join: A ⋈ B A\Join B A⋈B,将A和B做笛卡尔积,将相同属性属性值相同的元组连接在一起列扩展,注意结果中只有一个相同属性名
如果A和B没有共同属性名,则做笛卡尔积
自然连接是对称的,因此从左到右算也行,从右往左也行。
使用 r ⋈ θ s r\Join_\theta s r⋈θs表示仅按照 θ \theta θ条件进行连接,和 σ θ ( r × s ) \sigma_\theta(r\times s) σθ(r×s)相同
8.赋值: t e m p ← s × r temp\leftarrow s\times r temp←s×r,将这个表赋值给temps
9.outer left/right join,将左侧或者右侧的表在natural join中未出现的添加入结果,只在两张表元组个数不一样时有用,针对元组个数多的那张表有用。
10.聚集函数, G s u m ( A ) ( r ) G_{sum(A)}(r) Gsum(A)(r),返回r表中A属性值的和,还有avg,max,min,count,count-distinct
在前面加入属性值,比如 B G s u m ( A ) r BG_{sum(A)}r BGsum(A)r表示按照B分组,返回A属性的和。
常见操作:
1.连接:比如按照A属性相同的s和r连接起来。
σ
s
.
A
=
r
.
A
(
s
×
B
)
\sigma_{s.A=r.A}(s\times B)
σs.A=r.A(s×B)
2.对自身的两个属性进行判断,需要用的笛卡尔积和重命名。
3.选s中属性A属性值最大的元组(或是该元组的其他的属性值):
1.首先找到其补集,如果不满足就挑选入补集。
Π s . A ( σ s . A < r . A ( s × ρ r ( s ) ) ) \Pi_{s.A}(\sigma_{s.A<r.A}(s\times\rho_r(s))) Πs.A(σs.A<r.A(s×ρr(s)))
2.将原来的表的集合该属性值的集合减去其补集:
Π A ( s ) − Π s . A ( σ s . A < r . A ( s × ρ r ( s ) ) ) \Pi_A(s)-\Pi_{s.A}(\sigma_{s.A<r.A}(s\times\rho_r(s))) ΠA(s)−Πs.A(σs.A<r.A(s×ρr(s)))