1、第四章 分布透明性的级别 所谓分布透明性级别就是应用程序与数据分布相关程度的一种度量,很类似于集中式数据库中的数据独立性,数据分布透明性分为四个级别。 首先通过例子考虑什么是分段及分段种类。 4.1 数据分段及分段种类 设有如下关系数据模型: S (学号,姓名,年令,性别,系号,奖学金, 班长学号,民族) D(系号,系名,系主任) C(课号,课名,学时,任课教师) SC(学号, 课号,成绩) (1) 水平分段---通过选择运算实现 (2) 例:把表S分为2个段,男、女各一段 选择的条件称为限定语,用q表示 S1=SL性别=’男’S S2=SL性别=‘女‘S
2、 (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学
3、号,姓名,系别,班长学号SL性别=‘女‘S S21=PJ学号,性别,奖学金,民族SL性别=‘男‘S S22=PJ学号,性别,奖学金,民族SL性别=‘女‘S 4.2 分段原则与分段透明性级别 分段原则: (1)数据完整性(不丢数据),任一数据必属某段。 (2)可重构性 水平分段、或导出水平分段用合并运算重构, 垂直分段用结合运算重构 混合分段用合并和结合运算重构 (3)不相交性 水平分段、或导出水平分段均为划分,即任意一个元组只属某一个段 分段透明性级别: (1) 分段透明 应用程序与段无关(与集中数据库相同) (2) 位置透明 应用程序与段有关,但与
4、段所在位置无关 (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<=10P
5、JEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)
EMP2=SL10
6、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 SN
7、UM = $SNUM; Write(terminal, $NAME); SUPPLIER1 DDBNS 站点1 SUPPLIER2 DDBMS 站点2 SUPPLIER2 站点3 (a) 分段透明性(级别1) 查询Q1:任意给一个供应商号,求供应商名。 (2)系统具有位置透明性: Read(terminal,$SNUM); select NAME into
8、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
9、 或 站点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(termin
10、al, $NAME); SUPPLIER1 DDBNS 站点1 SUPPLIER2 DDBMS 站点2 SUPPLIER2 站点3 (b)本地映射透明性(级别3) 图4.1 分布透明性不同级别下的只读应用 SUPINQUIRY (4)无透明性 (2)较复杂的读应用(多表读) 查询Q2:任意给一个零件号,求供应商名。 设分配模式为: SUPPLIER1 为站点1 SUP
11、PLY1 为站点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
12、为站点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
13、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 SU
14、PPLY2 为站点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 be
15、gin 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 更新应用的分布透明性
16、设有全局数据模型: 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 模
17、式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)
18、 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 EMP
19、NUM = 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 ); In
20、sert 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






