数据库学习笔记之关系模型
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
相关文章推荐
- Apache sdo学习笔记(六)——数据访问服务(DAS)访问关系数据库
- 云计算学习笔记---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战
- Mybatis学习笔记:(二) java中的实体(对象、List、Set)关系怎样与数据库关联映射
- 数据库系统学习(四)- 关系模型之关系代数
- Fielding的博士论文学习笔记(二)——概念和术语与现实网络模型的对应关系
- hadoop学习笔记 Hive和普通关系数据库比较
- 数据库系统学习(五)- 关系模型之关系演算
- Mysql学习笔记(七):用MySQLWorkBench创建数据库和模型
- 数据库系统概论学习笔记---关系的俩个完整性
- 数据、进程-云计算学习笔记---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战-by小雨
- 数据库学习笔记:实体联系模型
- ThinkPHP学习笔记(五)使用模型操作数据库之CURD
- (学习笔记)摄像机模型与标定——三个坐标系及其之间关系
- SQL Server2008 学习笔记(二)关系数据库
- 云计算学习笔记---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战
- 【数据库学习笔记】(3)SQL数据类型与Java数据类型的对应关系
- Entity Framework 学习笔记(一)之数据模型 数据库
- BigData学习7_五大存储模型关系模型、键值存储、文档存储、列式存储、图形数据库
- 数据库系统学习(三)- 关系模型之基本概念
- Python数据库ORM SQLAlchemy 0.7学习笔记(7) 关系