Skip to content

关系模型

约 1192 个字 预计阅读时间 4 分钟

是什么

Difinition: * A relation database is a collection of one or more relations, which are based on relational model. * A relation is a table with rows and columns. * 说白了,relation就是一张表(集合,所以不能重复),关系型数据库是表的集合

Note

这里有两个词需要区分: * relationship:an association among several entities * relation:the mathematical concept, referred to a table

给定一个集合 \(D_1,D_2,...,D_n (,一个关系 \(r\)就是\)D_1 x D_2 x ... x D_n\)(\(D_i\)上的笛卡尔积)的一个子集。因此关系就是一个n维元组。

属性类型

关系的每项属性都有自己的名称和域,并且属性值必须是原子性(atomic/indivisible)的。至于什么是原子性,就是不可分,下面是两个反例,它们都不是原子属性: * 多重属性(multivalued attribute) * 复合属性(composite attribute)

null是一个特殊的值,它存在于任一属性的域中,它不是''也不是0,它的存在会引发一些问题。

相关概念

Difinition: * A Relation is concerned with two concepts: * relation schema: describe the structure of the relation. 就像是OOP中的一个类,比如:Instructor_schema=(ID:string,name:string,dept_name:string,salary:int) * relation instance corresponds to the snapshot of the data in the relation at a given instant in time 就像是OOP中的一个实例,连名称都是一样的(

或者说,relation schema是变量的类型,relation instance 是值

\(A_1,A_2,...,A_n\)是属性,\(R=(A_1,A_2,...,A_n)\)就是一个 relation schema,\(r(R)\)是在\(R\)上的关系。一个关系的当前值可以被一张表表示,r的一个元素t就是一个元组(tuple),可以被表的一行表示。

Difinition:Let a tuple varible t stands for a tuple.Then t[name] denotes the value of t on the name attribute.

元组的顺序是不相关的(irrelevant),元组可能以任意顺序储存。在一个关系中元组是不能重复的(no duplicated)

  • 首先,键\(K\)是关系\(R\)的属性组合,然后如果\(K\)可以作为元组的标识(键与元组形成一一映射),那么这个键就是超键(superkey);
  • 如果它还是最小的超键(去除任一属性就不在是超键),那么它就是候选键(candidate key)。
  • 可以认为指定一个候选键为主键(primary key),用下划线表示。
  • 假设存在关系\(r(A,B,C)\)\(s(B,D)\),且\(B\)\(s\)中是主键,可以说\(B\)\(r\)中是一个外键指向(referencing)\(s\),即指向主键。\(r\)是参照关系,\(s\)是被参照关系。外键的作用是引入外键约束,以及把两张表关联起来。

查询语言

关系代数

六个基本操作:

  • select 选择

  • project 投影

  • union 并

  • set difference 差

  • cartesian product 笛卡尔积

  • rename 重命名

附加的运算符:

  • set intersection 交

  • natural join 然连接

  • division 除

  • assignment 赋值

1. 选择

一行一行的去挑

Notation::\(\sigma_p (r)\),p叫做选择条件(selection predicate),表示$\sigma_p(r)={t|t\in r $ and \(p(t)\} \(,其中\)p(t)\)是命题演算(propositional calculus),包含terms 被\(\land\)(and),\(\lor\)(or),\(\neg\)(not)连接terms,每个term是<attribute> op <attribute>或者常数,其中op是$=,\neq,>,\geq,<,\leq $

2. 投影

一列一列地去挑

Notation:\(\Pi_{A_1,A_2,...,A_k}(r)\),其中\(A_1,A_2,...,A_k\)是属性名,\(r\)是一个关系。结果是k列除去没有选择的列以及去除重复行

3. 并

Notation:\(r\cup s \(,表示\)r\cup s=\{t|t\in r\) or $t \in s } $,对于操作对象有一定要求:

  1. r,s必须等目(same arity),即有相同数量的属性
  2. 属性的名字可以不一样,但是域必须是兼容的,比如第一列都是INT
4. 差

Notation:\(r-s\),表示$r-s={t|t\in r and t\notin s } $,要求和“并”一样

5. 笛卡尔积

Notation:\(r\times s\),表示$r\times s={{t q}t\in r and q\in s } $。如果r和s的属性名称是不相交的,则正常组合就好,但是如果不是,就需要考虑重命名

6. 重命名

一是给关系代数运算的结果命名,二是给元素取别名,格式是$\rho_{\times(A_1,A_2,...,A_n)}(E) $,对E及其attributes都重命名


1. 交

参考“并”,Notation::\(r\cap s \(,表示\)r\cap s=\{t|t\in r\) and $t \in s } \(,实际上\)r\cap s = r - (r - s) $

2. 自然连接

Notation:emm,这个符号太抽象了,我打不出来,大概长这样alt text。这个操作要与"并"区分,"并"是接在下面,然连接是找到同名属性相等的元组,然后连接二个关系中同名属性值相等的元组并消除同名属性

Theta join 可以由用户自定义条件\(\theta\)

3. 除

这个比较抽象,建议结合基本运算理解:

\[A=\{A_1,..,A_m,B_1,..,B_n\}\]
\[B=\{B_1,..,B_n\}\]
\[R-S=\{A_1,...,A_m\}\]
\[r\div s=\{t|t\in \Pi_{R-S}(r)\cap \}\]
4. 赋值