数据库关系运算优秀课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关系实例
关系当前值(关系实例)由一个表确定
r 的一个成员是元组( tuple), 表示为表中一行 关系术语/文件术语:属性/项,元组/记录,表/文件
customer_name customer_street customer_city
属性 (或 列)
Jones Smith Curry Lindsay
规范化理论负责处理如何设计关系模式
customer 关系
depositor 关系
account 关系
branch 关系
loan 关系
borrower 关系
码 / 键(key)
使 K R (K:一个或多个属性集合)
如果K值足以唯一地标识每个可能关系r(R) 的一个元组,则
K 是R的一个超码( superkey) “可能关系r”意思是:能够存在于我们要建模的企业的 关系r
Main North North Park
Harrison Rye Rye Pittsfield
customer
元组 (或 行)
关系是无序的
n 元组的顺序无关 (元组存储顺序可以是任意的)
n 例子: 帐户关系中的无序元组
数据库
数据库由多个关系组成
企业信息被划分成部分,每个关系存储一部分信息
account : 存储帐户信息
关系模式
A1, A2, …, An 是属性
R = (A1, A2, …, An ) 是关系模式 例子: Customer_schema = (customer_name, customer_street, customer_city)
r(R) 表示关系模式R上的关系 r
例子: customer (Customer_schema)
depositor (存款人): 存储关于哪个客户拥有哪个帐户的信
息 customer : 存储客户的信息
把所有信息存储在单个关系中,如 bank(account_number, balance, customer_name, ..)
导致
信息重复
如,如果一个客户拥有两个帐户(哪个信息重复了?)
需要null值 如,一个没有存储账户的客户(也许有贷款,所以是客户)
数据库关系运算
第二章: 关系模型
关系数据库结构 基本关系代数运算 附加关系代数运算 扩展关系代数运算 空(Null)值 数据库更改
关系例子
基本结构
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为 {(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合 的情况。类似的例子有,如果A表示某学校学生的集合,B表示该 学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情 况。
查询语言
用户从数据库请求信息的语言 语言分类
过程的(Procedural) 非过程的(Non-procedural), 或声明式的( declarative) “纯” 语言: 关系代数(Relational algebra) 元组关系演算(Tuple relational calculus) 域关系演算(Domain relational calculus) 纯语言为人们使用的查询语言构成了支撑基础
属性类型
关系的每个属性有一个名字 每个属性允许的取值的集合叫做属性的域 属性值(通常)要求是原子的,即,不可分的“基本项 ”
例如:属性值可以是一个账号,但不能是账号的集合 如果所有域成员是原子的,则说域是原子的 特殊值 null 是每个可能域的成员 null 值造成定义很多运算的复杂性
在本章主要的讲解中,wk.baidu.com们将暂时忽略null的影响
(a1, a2, …, an) 集合,且ai Di
基本结构
例子: 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 */
例子: {customer_name, customer_street} and {customer_name}
都是Customer的超码(如果没有重名客户)
实际中,诸如属性 customer_id 将用来代替 customer_name 去唯一地标示customers, 这里为了 保持例子属性少,假定客户名字不重复。
给定一组域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-元组
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
外码
一个关系模式可以具有一个是其他关系主码的属性。该属性称为 外码(foreign key)。
如: depositor的 customer_name 和 account_number 属性 分别是到customer 和account 的外码。 只有被参照关系( referenced relation )的主码产生值,参 照关系( referencing relation )的外码才可能产生值 模式图(Schema Diagram)
码 (Cont.)
如果K 是最小超码,则K是候选码(candidate key) 例子: {customer_name} 是Customer的一个 Customer ,因为它是一个超码而且没有其超码子集 主码(Primary key): 被选为首要标识关系中元组的 候选码
应该选其值不变或几乎不变的属性消 例如: email 地址是唯一的,但可能变化