投影——选择部分列,记为π a1,a2,a3(R)表示只包含关系R中的a1,a2,a3列。举例说明:π name,age (Students)只包含name和age列,得到的结果为
笛卡尔积——两个关系的叉积自然连接——两个关系满足某些属性相配的所有元组配对集合,记为RS属性配对并合并相同属性。举例说明:City为表2,与Students有共同属性name,自然连接StudentsCity的结果如表3所示。
可以看到属性name相同的元组(行)配对了起来。 θ连接——所有满足一定条件的元组配对,所有属性保留,记为RcS其中c为条件,该连接的结果这样来构造:
该连接与自然连接不同在于:
以表1、表2为例说明,Students age > grade City,其中条件c为age > grade 。结果如表4所示(表名简写为S和C)。
可以看到S和C的name属性都还包含其中,只有满足age > grade的元组配对才保留了下来。 二、 函数依赖
函数依赖——属性集合X唯一决定属性集合Y,记为X —> Y定义:若关系R的两个元组在属性A1, A2, ..., An上一致,则它们必定在B1, B2, ... , Bn上也一致,记为 A1, A2, ..., An —> B1, B2, ... , Bn 示例:如表4中若学号number确定,则S.name和age也能根据number确定下来,若number为c012,虽然有两条记录,但是S.name只能是小红,age也必定是14。 平凡函数依赖——子集与原集有函数依赖关系A1, A2, ..., An —> B1, B2, ... , Bn ,其中{B1, B2, ... , Bn } 是{A1, A2, ..., An}的子集。 示例:表1为例,{number, name} —> {name},知道学号和名字,肯定能确定名字,而名字(右属性集)是左属性集的子集,这种依赖称作平凡函数依赖。 非平凡函数依赖——不是子集,但是有函数依赖关系A1, A2, ..., An —> B1, B2, ... , Bn ,其中{B1, B2, ... , Bn } 不是{A1, A2, ..., An}的子集。 最常见的依赖关系,如{number} —> {name, age} 完全函数依赖——可理解为最小函数依赖属性集合Y完全依赖于X,属性集X刚好能完全确定Y的所有属性,X少一个属性就不能确定Y的所有属性。 如在表4里,所有属性的集合完全依赖于{number,C.name}。number和C.name能确定所有属性,但是只有一个number的时候只能确定前面列的S.name和age,不能确定后面的city和grade,而只有一个C.name时也不能确定前面的age。 传递函数依赖——X—>Y,Y—>Z,则有X—>Z三 、 属性集的闭包
eg:考虑属性A,B,C,D,E,F的关系,假设此关系有函数依赖:AB -> C, BC -> AD, D -> E, CF -> B, 那么{A, B}的闭包{A, B}+为? 闭包的作用----能判断(属性集A与属性集B是否含依赖关系){A1, A2 ... An} -> {B1, B2 ... Bm}是否成立,若B是A的闭包的子集,则推断成立。求闭包的算法:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||