您的位置:首页 > 数据库

数据库学习笔记之关系模型

2015-03-23 17:23 393 查看

数据库学习笔记之关系模型

数据库学习笔记之关系模型
关系数据库的结构
数据库概念与数学概念的对应关系

码key

关系代数基本运算
一元运算

二元运算

附加的关系代数运算

扩展的关系代数运算

关系数据库的结构

关系型数据库是表的集合

数据库概念与数学概念的对应关系

数据库数学
表(table)关系(relation)
行(raw)元组(tuple)
关系是元组的集合,即表是行的集合

码(key)

超码(superkey)是一个或多个属性的集合,可以唯一标识一个元组

候选码(candidate key):真子集不能成为超码的超码

主码(primary):用来在同一关系中区分不同元组的候选码

关系代数基本运算



一元运算

选择运算(selection)

选择运算选出满足给定谓词的元组

选择运算σ p(r)

p是命题表达式,用∧ (and), ∨ (or), ¬ (not)串起来,如

σA=B ^ D > 5 (r) //选出A属性等于B属性且D属性大于5的关系r中的元组

σ dept_name=“Physics”(instructor)

mysql> select * from loan where branch_name="Perryridge";
+-------------+-------------+--------+
| loan_number | branch_name | amount |
+-------------+-------------+--------+
| L-15        | Perryridge  |   1500 |
| L-16        | Perryridge  |   1300 |
+-------------+-------------+--------+
2 rows in set (0.01 sec)


投影运算(projection)

投影运算返回作为参数的关系的某些属性(去除重复行)

投影运算ΠA1,A2,…..Ak(r)

ΠID, name, salary (instructor) //选出instructor中ID,name,salary三个属性

默认去重

mysql> select loan_number,amount from loan;
+-------------+--------+
| loan_number | amount |
+-------------+--------+
| L-11        |    900 |
| L-14        |   1500 |
| L-15        |   1500 |
| L-16        |   1300 |
| L-17        |   1000 |
| L-23        |   2000 |
| L-93        |    500 |
+-------------+--------+
7 rows in set (0.00 sec)


重命名运算

重命名运算ρ x (E)

ρ x (E) //把关系E重命名为关系X

ρ x(A1,A2,….An) (E) //把关系E重命名为X,并把属性名称改为A1,A2,…An

mysql> select balance from account
->  where balance not in
-> (select distinct account.balance from account, account d
-> where account.balance<d.balance);
+---------+
| balance |
+---------+
|     900 |
+---------+
1 row in set (0.00 sec)


二元运算

并运算(union)

并运算r ∪ s

执行并操作的两个关系必须有相同的属性(属性数量),并且每个属性各自的域是相互兼容的

Πcourse_id (σ semester=“Fall” Λ year=2009 (section)) ∪ Πcourse_id (σ semester=“Spring” Λ year=2010 (section))

mysql> select customer_name from borrower union select customer_name from depositor;
+---------------+
| customer_name |
+---------------+
| Admas         |
| Curry         |
| Hayes         |
| Jackson       |
| Jones         |
| Smith         |
| Williams      |
| Johnson       |
| Lindsay       |
| Turner        |
+---------------+
10 rows in set (0.00 sec)


集合差运算(set difference)

集合差运算r – s

执行集合差运算的两个关系必须有相同的属性(属性数量),并且每个属性各自的域是相互兼容的

Πcourse_id (σ semester=“Fall” Λ year=2009 (section)) − Πcourse_id (σ semester=“Spring” Λ year=2010 (section))

mysql> select distinct customer_name
-> from depositor
-> where customer_name not in
-> (select customer_name from borrower);
+---------------+
| customer_name |
+---------------+
| Johnson       |
| Lindsay       |
| Turner        |
+---------------+
3 rows in set (0.00 sec)


笛卡尔积运算(cartesian product)

笛卡尔积运算r x s

得出两个集合的笛卡尔积,如果两个集合的交非空,则要用到重命名运算,稍后提到。

σA=C(r x s)

mysql> select customer_name from borrower, loan
-> where borrower.loan_number=loan.loan_number
-> and branch_name="Perryridge";
+---------------+
| customer_name |
+---------------+
| Hayes         |
| Admas         |
+---------------+
2 rows in set (0.00 sec)


附加的关系代数运算

集合交运算(intersection)

执行集合交运算的两个关系必须有相同的属性(属性数量),并且每个属性各自的域是相互兼容的

r ∩ s r – (r – s)

mysql> select distinct customer_name from borrower
-> where customer_name not in
->  (select distinct customer_name from borrower
->   where customer_name  not in
->    (select customer_name from depositor)
->   );
+---------------+
| customer_name |
+---------------+
| Hayes         |
| Jones         |
| Smith         |
+---------------+
3 rows in set (0.00 sec)


自然连接运算(natural union)

首先形成它的两个参数的笛卡尔积,然后基于两个关系式中都出现的属性上的相等性进行选择,最后去除重复属性

R = (A, B, C, D)

S = (E, B, D)

Result schema = (A, B, C, D, E)

r |X| s is defined as: Πr.A, r.B, r.C, r.D, s.E (σr.B = s.B ∧ r.D = s.D (r x s))

natural join有几个特性

(instructor |X| teaches) |X| course is equivalent to instructor |X| (teaches |X| course)

instruct |X| teaches is equivalent to teaches |X| instructor

另外还可以写成theta join的形式

r |X| θ s = σθ (r x s)

mysql> select customer_name, borrower.loan_number, amount
-> from borrower left join loan
-> using(loan_number);
+---------------+-------------+--------+
| customer_name | loan_number | amount |
+---------------+-------------+--------+
| Admas         | L-16        |   1300 |
| Curry         | L-93        |    500 |
| Hayes         | L-15        |   1500 |
| Jackson       | L-14        |   1500 |
| Jones         | L-17        |   1000 |
| Smith         | L-11        |    900 |
| Smith         | L-23        |   2000 |
| Williams      | L-17        |   1000 |
+---------------+-------------+--------+
8 rows in set (0.00 sec)


除运算

给定关系 r(R) 和 s(S), S ⊂ R,则 r ÷ s是最大的关系 t(R-S) 满足 t x s ⊆ r

假设r(ID, course_id) = ΠID, course_id (takes )

s(course_id) = Πcourse_id (σdept_name=“Biology”(course )

那么r ÷ s 的结果就是选了所有生物系课程的学生

可以写成下面的形式

temp1 ← ΠR-S (r )

temp2 ← ΠR-S ((temp1 x s ) – ΠR-S,S (r ))

result = temp1 – temp2

赋值运算

(←)当一个表达式的值是一个查询的结果的时候用

扩展的关系代数运算

广义投影(generalized-projection)

通过允许在投影列表中使用算术函数来对投影进行扩展

聚集函数

外连接



left join 左连接 会从左表那里返回所有的记录,即使在右表中没有匹配的行。

right outer join 右连接 返回右表中的所有记录,即使在左表中没有记录与它匹配

full outer join 全连接 返回左右表中的所有记录

注意:如果没有匹配的数据项会置为null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐