第四章 分布透明性

更新时间:2024-07-11 20:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第四章 分布透明性的级别

所谓分布透明性级别就是应用程序与数据分布相关程度的一种度量,很类似于集中式数据库中的数据独立性,数据分布透明性分为四个级别。 首先通过例子考虑什么是分段及分段种类。

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=SL1020(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 站点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

(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

6

where SNUM = $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 = 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)学号为100的学生由2号系调入5号系的程序。

的程序。

分段透明:UPDATE S

SET 奖学金=奖学金+50 WHERE 学号=’100’;

位置透明:SELECT * FROM S1 WHERE 学号=’100’; IF # FOUND THEN

7

UPDATE S1

SET 奖学金=奖学金+50 WHERE 学号=’100’; ELSE BEGIN

SELECT * FROM S2 WHERE 学号=’100’; IF # FOUND THEN

UPDATE S2

SET 奖学金=奖学金+50 WHERE 学号=’100’;

ELSE

UPDATE S3

SET 奖学金=奖学金+50 WHERE 学号=’100’; END;

本地映射透明:

SELECT * FROM S1 AT SITE1 WHERE 学号=’100’; IF # FOUND THEN

UPDATE S1 AT SITE1 SET 奖学金=奖学金+50 WHERE 学号=’100’; ELSE BEGIN

SELECT * FROM S2 AT SITE2 WHERE 学号=’100’; IF # FOUND THEN

UPDATE S2 AT SITE2 SET 奖学金=奖学金+50 WHERE 学号=‘100‘; ELSE

UPDATE S3 AT SITE3

8

SET 奖学金=奖学金+50 WHERE 学号=‘100‘; END;

(2)把6号与2号系学生的奖学金都加50元。

分段透明:UPDATE S

SET 奖学金=奖学金+50

WHERE 系号=‘2‘ OR系号=‘6‘;

位置透明:UPDATE S2

SET 奖学金=奖学金+50; UPDATE S3

SET 奖学金=奖学金+50 WHERE 系号=‘6‘;

本地映射透明:

UPDATE S2 AT SITE2 SET 奖学金=奖学金+50; UPDATE S3 AT SITE3 SET 奖学金=奖学金+50 WHERE 系号=‘6‘;

(3)学号为100的学生由2号系调入5号系的程序。

分段透明:UPDATE S

SET 系号=’5’ WHERE 学号=’100’;

位置透明:

SELECT 姓名,年令,性别,奖学金,班长学号,民族INTO

$姓名,$年令,$性别, $奖学金, $民族 FROM S1

WHERE 学号=’100’;

SELECT 学号, 课号,成绩 INTO $SC(学号, 课号,成绩) FROM SC1

9

WHERE 学号=’100’;

DELETE SC1 WHERE 学号=’100’;(先删SC1,因为学号在该表中为外键) DELETE S1 WHERE 学号=’100’;(再删S1) INSERT INTO S2 (‘100‘,$姓名,$年令,$性别,

$奖学金, $民族)

INSERT INTO SC2 AS SELECT * FROM $SC 本地映射透明:

SELECT 姓名,年令,性别,奖学金,班长学号,民族INTO

$姓名,$年令,$性别, $奖学金, $民族 FROM S1 AT SITE1 WHERE 学号=’100’;

SELECT 学号, 课号,成绩 INTO $SC(学号, 课号,成绩) FROM SC1 AT SITE1 WHERE 学号=’100’;

DELETE SC1 AT SITE1 WHERE 学号=’100’; DELETE S1 AT SITE1 WHERE 学号=’100’;

INSERT INTO S2 AT SITE2(‘100‘,$姓名,$年令,$性别, $奖学金, $民族) INSERT INTO SC2 AT SITE2 AS SELECT * FROM $SC

设EMP有如下分段:

EMP1=PJEMPNUM,NAME,SAL,TAXSLDEPTNUM<=10(EMP) EMP2=PJEMPNUM,MGRNUM,DEPTNUMSLDEPTNUM<=10(EMP) EMP3=PJEMPNUM,NAME,DEPTNUM SLDEPTNUM>10(EMP) EMP4=PJEMPNUM,SAL,TAX MGRNUM SLDEPTNUM>10 (EMP)

Q3 100号雇员从3号部门调至15号部门。 分段透明:(注意:部门变了部门经理号也得变) SELECT MGRNUM INTO $MGRNUM FROM DEPT

WHERE DEPTNUM = 15;

10

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 DEPT2

WHERE DEPTNUM = 15 ;

DELETE EMP1 WHERE EMPNUM = 100; DELETE EMP2 WHERE EMPNUM = 100;

INSERT INTO EMP3(EMPNUM,SAL,TAX,DEPTNUM); (100,$NAME,15 );

INSERT INTO EMP4(EMPNUM,SAL,TAX,MGRNUM); (100,$SAL,$TAX ,$MGRNUM);

(b) 位置透明性(级别2) 本地映射透明:

SELECT NAME,SAL,TAX INTO $NAME,$SAL,$TAX FROM EMP1 AT SITE1 WHERE EMPNUM = 100 ;

SELECT MGRNUM INTO $MGRNUM FROM DEPT2 AT SITE2 WHERE EMPNUM = 15‘ ;

DELETE EMP1 AT SITE1 WHERE EMPNUM =100; DELETE EMP1 AT SITE5 WHERE EMPNUM =100; DELETE EMP2 AT SITE2 WHERE EMPNUM =100;

11

DELETE EMP2 AT SITE6 WHERE EMPNUM =100; INSERT INTO EMP3(EMPNUM,NAME,DEPTNUM); AT SITE3:(100,$NAME,15 );

INSERT INTO EMP3(EMPNUM,NAME,MGRNUM); AT SITE7:(100,$NAME ,15);

INSERT INTO EMP4(EMPNUM,SAL,TAX,MGRNUM); AT SITE4:(100,$SAL,$TAX,$MGRNUM); INSERT INTO EMP4(EMPNUM,SAL,TAX,MGRNUM); AT SITE8:(100,$SAL,$TAX,$MGRNUM);

(C) 本地映射透明性(级别3)

图4.2 不同级别分布透明性下的更新应用。

12

本文来源:https://www.bwwdw.com/article/mfo.html

Top