第四章分布透明10年.docx
《第四章分布透明10年.docx》由会员分享,可在线阅读,更多相关《第四章分布透明10年.docx(12页珍藏版)》请在冰点文库上搜索。
第四章分布透明10年
第四章分布透明性的级别
所谓分布透明性级别就是应用程序与数据分布相关程度的一种度量,很类似于集中式数据库中的数据独立性,数据分布透明性分为四个级别。
首先通过例子考虑什么是分段及分段种类。
4.1数据分段及分段种类
设有如下关系数据模型:
S(学号,姓名,年令,性别,系号,奖学金,班长学号,民族)
D(系号,系名,系主任)
C(课号,课名,学时,任课教师)
SC(学号,课号,成绩)
(1)水平分段---通过选择运算实现
例:
把表S分为2个段,男、女各一段
选择的条件称为限定语,用q表示
S1=SL性别=’男’S
S2=SL性别=‘女‘S
(2)垂直分段---通过投影运算实现
例:
根据学习与生活的不同用途把S按属性分为2个段。
S3=PJ学号,姓名,系名,班长学号S
S4=PJ学号,性别,奖学金,民族S
注意:
学号必须重复,用于结合还原
(3)导出式水平分段---通过半结合运算实现
例:
把成绩表SC按男、女分为2个段
SC1=SCNSJS1(男)
SC2=SCNSJS2(女)
(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=SL10EMP3=SLDEPTNUM>20PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)
EMP4=PJEMPNUM,NAME,SAL,TAX(EMP)
DEPT1=SLDEPTNUM<=10(DEPT)
DEPT2=SL10DEPT3=SLDEPTNUM>20(DEPT)
SUPPLIER1=SLCITY=’SF’(SUPPLIER)
SUPPLIER2=SLCITY=’LA’(SUPPLIER)
SUPPLY1=SUPPLYSJSNUM=SNUMSUPPLIER1
SUPPLY2=SUPPLYSJSNUM=SNUMSUPPLIER2
也可写成:
SUPPLY1=SUPPLYNSJSUPPLIER1
SUPPLY2=SUPPLYNSJSUPPLIER2
例子:
Q1:
任意给一个供应商号,求供应商名。
(1)系统具有分段透明性
Read(terminal,$SNUM);
selectNAMEinto$NAME
fromSUPPLIER
whereSNUM=$SNUM;
Write(terminal,$NAME);
站点1
DDBMS站点2
站点3
(a)分段透明性(级别1)
查询Q1:
任意给一个供应商号,求供应商名。
(2)系统具有位置透明性:
Read(terminal,$SNUM);
selectNAMEinto$NAME
fromSUPPLIER1
whereSNUM=$SNUM;
ifnot#FOUNDthen
selectNAMEinto$NAME
fromSUPPLIER2
whereSNUM=$SNUM;
Write(terminal,$NAME);
站点1
DDBMS站点2
或站点3
(b)位置透明性(级别2)
(3)系统具有本地映射透明性:
Read(terminal,$SNUM);
selectNAMEinto$NAME
fromSUPPLIER1ATSITE1
whereSNUM=$SNUM;
ifnot#FOUNDthen
selectNAMEinto$NAME
fromSUPPLIER2ATSITE3
whereSNUM=$SNUM;
Write(terminal,$NAME);
站点1
DDBMS站点2
站点3
(c)本地映射透明性(级别3)
图4.1分布透明性不同级别下的只读应用SUPINQUIRY
(4)无透明性
(2)较复杂的读应用(多表读)
查询Q2:
任意给一个零件号,求供应商名。
设分配模式为:
SUPPLIER1为站点1SUPPLY1为站点3
SUPPLIER2为站点2SUPPLY2为站点4
(1)系统具有分段透明性
Read(terminal,$PNUM);
selectNAMEinto$NAME
fromSUPPLIER,SUPPLY
whereSUPPLIER.SNUM=SUPPLY.SNUM
andSUPPLY.PNUM=$PNUM;
Write(terminal,$NAME);
(a)分段透明性(级别1)
查询Q2:
任意给一个零件号,求供应商名。
设分配模式为:
SUPPLIER1为站点1SUPPLY1为站点3
SUPPLIER2为站点2SUPPLY2为站点4
(2)系统具有位置透明性
Read(terminal,$PNUM);
selectNAMEinto$NAME
fromSUPPLIER1,SUPPLY1
whereSUPPLIER1.SNUM=SUPPLY1.SNUM;
andSUPPLY1.PNUM=$PNUM;
ifnot#FOUNDthen
selectNAMEinto$NAME
fromSUPPLIER2,SUPPLY2
whereSUPPLIER2.SNUM=SUPPLY2.SNUM;
andSUPPLY2.PNUM=$PNUM;
Write(terminal,$NAME);
(b)位置透明性(级别2)
思考:
SUPPLIER与SUPPLY都有更多的段?
SUPPLIER1与SUPPLY2或
SUPPLIER1与SUPPLY2的结合不为空呢?
查询Q2:
任意给一个零件号,求供应商名。
并设分配模式为:
SUPPLIER1为站点1SUPPLY1为站点3
SUPPLIER2为站点2SUPPLY2为站点4
(3)系统具有本地映射透明性
Read(terminal,$PNUM);
selectSNUMinto$SNUM
fromSUPPLY1atsite3
wherePNUM=$PNUM;
if#FOUNDthen
begin
send$SNUMfromsite3tosite1;
selectNAMEinto$NAME
fromSUPPLIER1atsite1(程序员很聪明)
whereSNUM=$SNUM
end
elsebegin
selectSNUMinto$SNUM
fromSUPPLIER2atsite4
wherePNUM=$PNUM;
send$SNUMfromsite4tosite2;
selectNAMEinto$NAME
fromSUPPLIER2atsite2
whereSNUM=$SNUM
end
Write(terminal,$NAME);
(d)本地映射透明性(级别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=SCNSJS1站点1
SC2=SCNSJS2站点2
SC3=SCNSJS3站点3
模式C与D不分段,且重复地存放在2个站点上。
请完成:
(1)把100号学生的奖学金增加50元。
(2)把6号与2号系学生的奖学金都加50元。
(2)分别写出在前3级透明性下的学号为100的学生由2号系调入5号系的程序。
Q3:
100号雇员从3号部门调至15号部门。
SelectMGRNUMinto$MGRNUM
FromDEPT
WhereDEPTNUM=15;
UpdateEMP
SetDEPTNUM=15,MGRNUM=$MGRNUM
WhereEMPNUM=100
(a)分段透明性(级别1)
SelectNAME,SAL,TAXinto$NAME,$SAL,$TAX
FromEMP1
WhereEMPNUM=100;
SelectMGRNUMinto$MGRNUM
FromEMP2
WhereEMPNUM=‘15‘;
InsertintoEMP3(EMPNUM,SAL,TAX,DEPTNUM);
(100,$name,15);
InsertintoEMP4(EMPNUM,SAL,TAX,MGRNUM);
(100,$SAL,$TAX,$MGRNUM);
DeleteEMP1whereEMPNUM=100;
DeleteEMP2whereEMPNUM=100;
(b)位置透明性(级别2)
SelectNAME,SAL,TAXinto$NAME,$SAL,$TAX
FromEMP1atsite1
WhereEMPNUM=100;
SelectMGRNUMinto$MGRNUM
FromEMP2atsite2
WhereEMPNUM=‘15‘;
InsertintoEMP3(EMPNUM,NAME,DEPTNUM);
Atsite3:
(100,$name,15);
InsertintoEMP3(EMPNUM,NAME,MGRNUM);
Atsite7:
(100,$NAME,15);
InsertintoEMP4(EMPNUM,SAL,TAX,MGRNUM);
Atsite4:
(100,$SAL,$TAX,$MGRNUM,);
InsertintoEMP4(EMPNUM,SAL,TAX,MGRNUM);
Atsite8:
(100,$SAL,$TAX,$MGRNUM,);
DeleteEMP1atsite1whereEMPNUM=100;
DeleteEMP1atsite5whereEMPNUM=100;
DeleteEMP2atsite2whereEMPNUM=100;
DeleteEMP2atsite6whereEMPNUM=100;
(C)本地映射透明性(级别3)
图4.2不同级别分布透明性下的更新应用。