分布式数据库——第二章 数据与数据模型

1.数据与数据模型

•数据

– 给定事实

•数据模型

– 抽象的, 自含的, 对象和操作符等的逻辑定义, 所有这些一起组成了抽象机

•实现

– 真实机器上的物理实现

•数据抽象

–实体与联系

实体(Entities)

supplier, part, project, warehouse, employee ….

联系(Relationships)

sp, sj, spj…….

–特征 (Properties)

供应商 : location….

零件 : weight …..

2.数据独立

•数据库技术的主要目标

•适应应用需求,数据物理表示和访问技术的改变是必要的

•两类独立性

  • 物理数据独立

    • 当数据库的内部存储结构发生改变时,只要修改模式/内模式映象,可保持概念模式不变,从而保持外模式以及用户程序的不变,保证了数据与程序的物理独立性——数据的物理独立性
  • 逻辑数据独立

    • 当概念模式发生改变时,只要修改外模式/模式映象,可保持外模式不变,从而保持用户应用程序不变,保证了数据与用户程序的逻辑独立性——数据的逻辑独立性

3.体系结构

•三层体系结构

clip_image001

•外模式

  • 单个用户所看到的局部数据的逻辑结构和特征的描述
  • 建立在概念模式之上,同一概念模式上可有多个不同的外模式
  • 通过外模式DDL进行定义

•概念模式

  • 数据库中全体数据的逻辑结构和特征的描述
  • 一个数据库只有一个概念模式
  • 通过模式DDL进行定义

•内模式

  • 数据物理结构和存储方式的描述
  • 一个数据库只有一个内模式
  • 通过内模式DDL定义

4.关系模型

•术语

  • 域 (Domain)

    • 一组具有相同数据类型的值的集合。每个属性有一个域
  • 属性 (Attribute)

    • 二维表格的每一列
  • 元组 (Tuple)

    • 每一行称为关系的一个元组
  • 基数 (Cardinality) 元组的数目

  • 度 (Degree) 列的数目

•性质

  • 一个关系是一个规范化的二维表格

    • 属性值不可分解

不允许表中有表

  • 元组不可重复

因此一个关系模式至少存在一个候选码

  • 没有行序,即元组之间无序

关系是元组的集合,集合的元素是无序的

  • 没有列序,即属性之间无序

关系模式是属性的集合

•操作

  • 选择 (select)

从表中抽取指定的行

  • 投影 ( Project)

从表中抽取指定的列

  • 连接 (Join)

在公共列的基础上连接两个表

  • 以集合为单元操作

算子和结果都是表

  • 闭包性质

一个操作的的输出结果可以是另一个操作的输入

•Key

  • 候选键(Candidate Keys)

当且仅当如下条件成立K 是关系R候选键

  • 唯一性(Uniqueness)
  • 最小性(Irreducibility)
  • e.g. S(s#) 是键,

S(s#, age) 是超键( super key )

  • 主关键字(Primary Keys)与候选键

Primary key 是被关系选中的候选键

  • 主关键字不能取空值(not null)
  • 外关键字(Foreign Key)

– R2 是一关系, R2 中的外关键字是R2的一组属性, FK, 满足:

  • 存在关系R1 有候选键 CK
  • R2 中的每个FK 值一定与 R1中某个元组的CK值相等.

  • 引用完整性

数据库不能含有任何不匹配的外关键字

  • ON DELETE

CASCADE/RESTRICT/NO ACTION

  • ON UPDATE

CASCADE/RESTRICT/NO ACTION

解释:引用关系做删除和更新操作的影响:CASCADE跟随一起变化,RESTRICT受限,不允许删除和更新,NO ACTION 不变化——引用完整性受到影响。

•语言 (SQL,代数)

  • DDL 数据库定义语言

    • 创建create

– Table

– View

– Index

  • 例:

创建表:

Create Table DEPT ( DEPT# Number,

DNAME Char(5),

Budget Number( 7,2));

创建索引:

Create index I1 on EMP (E#);

Create index I2 on EMP (Ename);

创建唯一性索引:

Create unique index I1 on EMP (E#);

创建聚集索引(

元组按照索引值顺序,物理上尽可能的存储在一起 ,在索引值上执行扫描(scan)操作时可以减少 I/O.):

Create cluster index CI1 on EMP (E#);

含有完整性定义得关系定义例子:

Create Table SP ( s# s# not null,

p# p# not null, qty qty not null,

primary key (s#, p#),

foreign key (s#) references S

on delete cascade

on update cascade,

foreign key (p#) references P

on delete cascade

on update cascade,

check (qty >0 and qty <5001) );

  • DML数据库操纵语言

    • 查询select
    • 例:

查询年龄40岁以下不同部门平均工资大于6000的部门,并按部门降序列表。

select d#, avg (SAL) from EMP where age < 40

group by d# having avg (SAL) > 6000

order by d# desc;

查询在sale部门工作的职工名。

select distinct Ename from EMP where d# in

(select d# from DEPT

where Dname=‘sale’)

查询缺少某门课成绩的学生学号。

Select s# From SC Where score IS NULL

查询只选修了1门或2门课程的学生学号、姓名和课程数。

Select student.s#, sname, count_c# From (Select s# as s#, count(s#) as count_c# From sc Group by s#) SC2, student Where sc2.s# = student.s# and (count_c#=1 OR count_c#=2)

  • 删除delete

  • 例:

删除所有低于平均工资的职工 。

delete from EMP where SAL < (select avg (SAL) from EMP)

  • 插入insert

  • 例:

insert into S (status, city, s#, sname) values (20, ‘shanghai’, ‘s6’, ‘wang ping’ );

对所有在黄山路 支行的贷款者$200 存款的礼物。

insert into account select loan-number, branch-name, 200 from loan where branch-name = ‘huangshanlu’

  • 更新update

  • 例:

工资大于 $4,000 的增加 6%, 其他职工工资增加 5%.

clip_image002

  • 嵌入SQL

    • 单元组查询

EXEC SQL Select Ename INTO :ename

From EMP Where e# = ‘e1’

  • 查询供应了amount 数量零件的供应商名字和其所在的城市,先定义游标( cursor)

EXEC SQL

declare c cursor for

select sname, city

from S, SP

where S.s# = SP.s#

and SP.QTY > :amount

游标打开语句( open ),执行游标查询

EXEC SQL open c

游标取语句(fetch )获取一个元组送入主变量

EXEC SQL fetch c into :cn, :cc

通过循环调用fetch语句,获取所有元组

游标关闭语句( close )

EXEC SQL close c

游标更新定义

declare c cursor for select * from EMP where city = ‘Parise’ for update

修改当前游标元组

update EMP set SAL = SAL + 100 where current of c

  • 关系代数

clip_image003

  • 关系代数的符号

clip_image004

  • 关系代数表达式

R∪S={t∣t∈R∨t∈S}

–t是元组变量

–R和S是关系代数表达式

–R与S的degree必须相同

–R与S的属性类型必须相同

clip_image005

R∩S={t∣t∈R∧t∈S}

clip_image006

clip_image007

clip_image008

clip_image009

clip_image010

  • 选择

clip_image011

–水平划分关系

–F是一个逻辑表达式,表示所选的元组应满足的条件

–F由逻辑运算符┐(NOT)、∧(AND)、∨(OR)连接算术表达式构成

•算术表达式clip_image012形为XθY,θ可以是>,<,=, ≤,≥或≠,X和Y可以是属性名、常量或简单函数

  • 投影

clip_image013

clip_image014

  • 自然联接

设R的属性集为{X,Y},S的属性集为{Y,Z}

R∞S=t|t=<X,Y,Z>∧t[X,Y]∈R∧t[Y,Z]∈S}

–相当于在R×S中选取R和S的所有公共属性值都相等的元组,并在结果中去掉重复属性

clip_image015

  • θ联接

clip_image016

clip_image017

  • 等值联接

在θ联接中,当θ为等号时,称为“等值联接”

等值联接是θ联接中比较常见的形式

clip_image018

  • 关系代数封闭性

任意关系代数操作的结果仍是一个关系

关系代数的封闭性保证了关系代数操作的可嵌套性

  • 关系代数-删除

例:“从数据库中删除姓名为‘Rose’的学生”

Student←Student-σname=‘Rose’(Student)

  • 关系代数-插入

例:插入一个新的学生

S1←S1∪ { (‘001’,’Rose’,19) }

  • 关系代数-修改

例:“将所有男学生的学号前加上字母M”

Student←π‘M’||sno,name, sex, age(σsex=‘M’(Student)) ∪ (Student-σsex=‘M’(Student))

  • 关系代数-查询

例:查询所有状态大于20的供应商的供应商号

clip_image019

​ 查询供应了London城市中零件的供应商号

clip_image020

查询状态大于20并且没有零件的城市

clip_image021

  • 关系代数与SQL

例:

供应商关系模式:S (S#, SNAME, STATUS, CITY)

求住在同一个城市里的供应商号码对

clip_image022

clip_image023

-------------全文结束,感谢您的阅读-------------
0%