关系模型
约 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 } $,对于操作对象有一定要求:
- r,s必须等目(same arity),即有相同数量的属性
- 属性的名字可以不一样,但是域必须是兼容的,比如第一列都是
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,这个符号太抽象了,我打不出来,大概长这样。这个操作要与"并"区分,"并"是接在下面,然连接是找到同名属性相等的元组,然后连接二个关系中同名属性值相等的元组并消除同名属性
Theta join 可以由用户自定义条件\(\theta\)
3. 除
这个比较抽象,建议结合基本运算理解: