数据库关系运算
2021/9/18
第二章: 关系模型
关系数据库结构
基本关系代数运算
附加关系代数运算
扩展关系代数运算
空(Null)值
数据库更改
2021/9/18
关系例子
2021/9/18
基本结构
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。
给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为:D1×D2×…×Dn={(d1,d2,…,dn)|diDi,i=1,2,…,n
所有域的所有取值的一个组合不能重复。
一般地, 给定集合D1, D2, …. Dn, 关系r 是 D1 x D2 x … x Dn 的子集。所以,关系是n-元组 (a1, a2, …, an) 集合,且ai Di
2021/9/18
基本结构
例子: If
customer_name = {Jones, Smith, Curry, Lindsay, …} /* Set of all customer names */
customer_street = {Main, North, Park, …} /* set of all street names*/
customer_city = {Harrison, Rye, Pittsfield, …} /* set of all city names */
Then r = { (Jones, Main, Harrison), (Smith, North, Rye), (Curry, North, Rye), (Lindsay, Park, Pittsfield) } is a relation over
customer_name x customer_street x customer_city
2021/9/18
属性类型
关系的每个属性有一个名字
每个属性允许的取值的集合叫做属性的域
属性值(通常)要求是原子的,即,不可分的“基本项”
例如:属性值可以是一个账号,但不能是账号的集合
如果所有域成员是原子的,则说域是原子的
特殊值 null 是每个可能域的成员
null 值造成定义很多运算的复杂性
在本章主要的讲解中,我们将暂时忽略null的影响
2021/9/18
关系模式
A1, A2, …, An 是属性
R = (A1, A2, …, An ) 是关系模式
例子:
Customer_schema = (customer_name, customer_street, customer_city)
r(R) 表示关系模式R上的关系 r
例子:
customer (Customer_schema)
2021/9/18
关系实例
关系当前值(关系实例)由一个表确定
r 的一个成员是元组( tuple), 表示为表中一行
关系术语/文件术语:属性/项,元组/记录,表/文件
Jones
Smith
Curry
Lindsay
customer_name
Main
North
North
Park
customer_street
Harrison
Rye
Rye
Pittsfield
customer_city
customer
属性
(或 列)
元组
(或 行)
2021/9/18
关系是无序的
元组的顺序无关 (元组存储顺序可以是任意的)
例子: 帐户关系中的无序元组
2021/9/18
数据库
数据库由多个关系组成
企业信息被划分成部分,每个关系存储一部分信息
account : 存储帐户信息 depositor (存款人): 存储关于哪个客户拥有哪个帐户的信息 customer : 存储客户的信息
把所有信息存储在单个关系中,如 bank(account_number, balance, customer_name, ..)导致
信息重复
如,如果一个客户拥有两个帐户(哪个信息重复了?)
需要null值
如,一个没有存储账户的客户(也许有贷款,所以是客户)
规范化理论负责处理如何设计关系模式
2021/9/18
数据库关系运算 来自淘豆网www.taodocs.com转载请标明出处.