资源描述
第四章 分布透明性的级别
所谓分布透明性级别就是应用程序与数据分布相关程度的一种度量,很类似于集中式数据库中的数据独立性,数据分布透明性分为四个级别。
首先通过例子考虑什么是分段及分段种类。
4.1 数据分段及分段种类
设有如下关系数据模型:
S (学号,姓名,年令,性别,系号,奖学金, 班长学号,民族)
D(系号,系名,系主任)
C(课号,课名,学时,任课教师)
SC(学号, 课号,成绩)
(1) 水平分段---通过选择运算实现
(2) 例:把表S分为2个段,男、女各一段
选择的条件称为限定语,用q表示
S1=SL性别=’男’S
S2=SL性别=‘女‘S
(2) 垂直分段---通过投影运算实现
例:根据学习与生活的不同用途把S按属性分为2个段。
S3=PJ学号,姓名,系名,班长学号S
S4=PJ学号,性别,奖学金,民族S
注意:学号必须重复,用于结合还原
(3) 导出式水平分段---通过半结合运算实现
例:把成绩表SC按男、女分为2个段
SC1=SC NSJ S1 (男)
SC2=SC NSJ S2 (女)
(4) 混合式分段(含水平和垂直)
例:把S分成4段,男、女及学习与生活信息分开
S11=PJ学号,姓名,系别,班长学号SL性别=‘男‘S
S12=PJ学号,姓名,系别,班长学号SL性别=‘女‘S
S21=PJ学号,性别,奖学金,民族SL性别=‘男‘S
S22=PJ学号,性别,奖学金,民族SL性别=‘女‘S
4.2 分段原则与分段透明性级别
分段原则:
(1)数据完整性(不丢数据),任一数据必属某段。
(2)可重构性
水平分段、或导出水平分段用合并运算重构,
垂直分段用结合运算重构
混合分段用合并和结合运算重构
(3)不相交性
水平分段、或导出水平分段均为划分,即任意一个元组只属某一个段
分段透明性级别:
(1) 分段透明
应用程序与段无关(与集中数据库相同)
(2) 位置透明
应用程序与段有关,但与段所在位置无关
(3) 本地映射透明
应用程序与段及段所在位置都有关,但与
本地的DBMS无关
(4) 无透明性
应用程序与段、段的位置、本地DBMS都有关
4.3 只读应用的分布透明性
(1) 最简单的读应用(单表读)
例子:设有全局据库模型:
EMP(EMPNUM,NAME,SAL,TAX,MGRNUM,DEPTNUM)DEPT(DEPTNUM, NAME, AREA, MGRNUM)
SUPPLIER(SNUM, NAME, CITY)
SUPPLY(SNUM, PNUM, DEPTNUM, QUAN)
分段模式:
EMP1=SLDEPTNUM<=10PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)
EMP2=SL10<DEPTNUM<=20PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)
EMP3=SLDEPTNUM>20PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)
EMP4=PJEMPNUM,NAME,SAL,TAX(EMP)
DEPT1=SLDEPTNUM<=10(DEPT)
DEPT2=SL10<DEPTNUM<=20(DEPT)
DEPT3=SLDEPTNUM>20(DEPT)
SUPPLIER1=SLCITY=’SF’(SUPPLIER)
SUPPLIER2=SLCITY=’LA’(SUPPLIER)
SUPPLY1=SUPPLY SJ SNUM=SNUM SUPPLIER1
SUPPLY2=SUPPLY SJ SNUM=SNUM SUPPLIER2
也可写成:
SUPPLY1=SUPPLY NSJ SUPPLIER1
SUPPLY2=SUPPLY NSJ SUPPLIER2
例子:Q1:任意给一个供应商号,求供应商名。
(1)系统具有分段透明性
Read(terminal,$SNUM);
select NAME into $NAME
from SUPPLIER
where SNUM = $SNUM;
Write(terminal, $NAME);
SUPPLIER1
DDBNS
站点1
SUPPLIER2
DDBMS 站点2
SUPPLIER2
站点3
(a) 分段透明性(级别1)
查询Q1:任意给一个供应商号,求供应商名。
(2)系统具有位置透明性:
Read(terminal,$SNUM);
select NAME into $NAME
from SUPPLIER1
where SNUM = $SNUM;
if not # FOUND then
select NAME into $NAME
from SUPPLIER2
where SNUM = $SNUM;
Write(terminal, $NAME);
SUPPLIER1
DDBNS
站点1
SUPPLIER2
DDBMS 站点2
SUPPLIER2
或 站点3
(b)位置透明性(级别2)
(3)系统具有本地映射透明性:
Read(terminal,$SNUM);
select NAME into $NAME
from SUPPLIER1 AT SITE1
where SNUM = $SNUM;
if not # FOUND then
select NAME into $NAME
from SUPPLIER2 AT SITE3
where SNUM = $SNUM;
Write(terminal, $NAME);
SUPPLIER1
DDBNS
站点1
SUPPLIER2
DDBMS 站点2
SUPPLIER2
站点3
(b)本地映射透明性(级别3)
图4.1 分布透明性不同级别下的只读应用 SUPINQUIRY
(4)无透明性
(2)较复杂的读应用(多表读)
查询Q2:任意给一个零件号,求供应商名。
设分配模式为:
SUPPLIER1 为站点1 SUPPLY1 为站点3
SUPPLIER2 为站点2 SUPPLY2 为站点4
(1)系统具有分段透明性
Read(terminal,$PNUM);
select NAME into $NAME
from SUPPLIER,SUPPLY
where SUPPLIER . SNUM = SUPPLY.SNUM
and SUPPLY.PNUM=$PNUM;
Write(terminal, $NAME);
(a) 分段透明性(级别1)
查询Q2:任意给一个零件号,求供应商名。
设分配模式为:
SUPPLIER1 为站点1 SUPPLY1 为站点3
SUPPLIER2 为站点2 SUPPLY2 为站点4
(2)系统具有位置透明性
Read(terminal,$PNUM);
select NAME into $NAME
from SUPPLIER1,SUPPLY1
where SUPPLIER1 . SNUM = SUPPLY1.SNUM;
and SUPPLY1.PNUM=$PNUM;
if not # FOUND then
select NAME into $NAME
from SUPPLIER2,SUPPLY2
where SUPPLIER2 . SNUM = SUPPLY2.SNUM;
and SUPPLY2.PNUM=$PNUM;
Write(terminal, $NAME);
(b) 位置透明性(级别2)
思考:
SUPPLIER 与 SUPPLY 都有更多的段?
SUPPLIER1 与 SUPPLY2 或
SUPPLIER1 与 SUPPLY2 的结合不为空呢?
查询Q2:任意给一个零件号,求供应商名。并设分配模式为:SUPPLIER1 为站点1 SUPPLY1 为站点3
SUPPLIER2 为站点2 SUPPLY2 为站点4
(3)系统具有本地映射透明性
Read(terminal,$PNUM);
select SNUM into $SNUM
from SUPPLY1 at site3
where PNUM = $PNUM;
if # FOUND then
begin
send $SNUM from site3 to site1;
select NAME into $NAME
from SUPPLIER1 at site1 (程序员很聪明)
where SNUM = $SNUM
end
else begin
select SNUM into $SNUM
from SUPPLIER2 at site4
where PNUM = $PNUM;
send $SNUM from site4 to site2;
select NAME into $NAME
from SUPPLIER2 at site2
where SNUM = $SNUM
end
Write(terminal, $NAME);
(b) 本地映射透明性(级别3)
图4.2 分布透明性不同级别下的只读应用 SUPOFPART
4.4 更新应用的分布透明性
设有全局数据模型:
S(学号,姓名,年令,性别,系号,奖学金,班长学号,民族)
C(课号,课名,学时,任课教师)
SC(学号, 课号,成绩)
D(系号,系名,系主任)
分段与分配模式为:
S1=SL系号=’2’S 站点1
S2=SL系号=’5’S 站点2
S3=SL系号¹’2’ AND 系号¹’5’S 站点3
SC1 = SC NSJ S1 站点1
SC2 = SC NSJ S2 站点2
SC3 = SC NSJ S3 站点3
模式C与D不分段,且重复地存放在2个站点上。
请完成:
(1)把100号学生的奖学金增加50元。
(2)把6号与2号系学生的奖学金都加50元。
(3)分别写出在前3级透明性下的学号为100的学生由2号系调入5号系的程序。
Q3: 100号雇员从3号部门调至15号部门。
Select MGRNUM into $MGRNUM
From DEPT
Where DEPTNUM = 15;
Update EMP
Set DEPTNUM = 15, MGRNUM=$MGRNUM
Where EMPNUM = 100
(a) 分段透明性(级别1)
Select NAME,SAL,TAX into $NAME,$SAL,$TAX
From EMP1
Where EMPNUM = 100 ;
Select MGRNUM into $MGRNUM
From EMP2
Where EMPNUM = ‘15 ‘ ;
Insert into EMP3(EMPNUM,SAL,TAX,DEPTNUM);
(100,$name,15 );
Insert into EMP4(EMPNUM,SAL,TAX,MGRNUM);
(100,$SAL,$TAX ,$MGRNUM);
Delete EMP1 where EMPNUM = 100;
Delete EMP2 where EMPNUM = 100;
(b) 位置透明性(级别2)
Select NAME,SAL,TAX into $NAME,$SAL,$TAX
From EMP1 at site 1
Where EMPNUM = 100 ;
Select MGRNUM into $MGRNUM
From EMP2 at site 2
Where EMPNUM = ‘15 ‘ ;
Insert into EMP3(EMPNUM,NAME,DEPTNUM);
At site 3:(100,$name,15 );
Insert into EMP3(EMPNUM,NAME,MGRNUM);
At site 7:(100,$NAME ,15);
Insert into EMP4(EMPNUM,SAL,TAX,MGRNUM);
At site 4:(100,$SAL,$TAX,$MGRNUM,);
Insert into EMP4(EMPNUM,SAL,TAX,MGRNUM);
At site 8:(100,$SAL,$TAX,$MGRNUM,);
Delete EMP1 at site 1 where EMPNUM =100;
Delete EMP1 at site 5 where EMPNUM =100;
Delete EMP2 at site 2 where EMPNUM =100;
Delete EMP2 at site 6 where EMPNUM =100;
(C) 本地映射透明性(级别3)
图4.2 不同级别分布透明性下的更新应用。
6
展开阅读全文