第四章 分布透明性的级别
所谓分布透明性级别就是应用程序与数据分布相关程度的一种度量,很类似于集中式数据库中的数据独立性,数据分布透明性分为四个级别。 首先通过例子考虑什么是分段及分段种类。
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=SC NSJ S1 (男) SC2=SC NSJ S2 (女) (4)
混合式分段(含水平和垂直)
例:把S分成4段,男、女及学习与生活信息分开
1
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) 分段模式:
2
EMP1=SLDEPTNUM<=10PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP) EMP2=SL10 EMP3=SLDEPTNUM>20PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP) EMP4=PJEMPNUM,NAME,SAL,TAX(EMP) DEPT1=SLDEPTNUM<=10(DEPT) DEPT2=SL10 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 站点1 DDBNS DDBMS SUPPLIER2 站点2 站点3 (a) 分段透明性(级别1) 查询Q1:任意给一个供应商号,求供应商名。 (2)系统具有位置透明性: 3 SUPPLIER2 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 站点1 DDBNS 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); SUPPLIER2 SUPPLIER1 站点1 DDBNS DDBMS SUPPLIER2 站点2 站点3 SUPPLIER2 (c) 本地映射透明性(级别3) 图4.1 分布透明性不同级别下的只读应用 SUPINQUIRY (4)无透明性 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); 5