第四章 分布透明性.docx

上传人:b****6 文档编号:3880077 上传时间:2022-11-26 格式:DOCX 页数:13 大小:35.18KB
下载 相关 举报
第四章 分布透明性.docx_第1页
第1页 / 共13页
第四章 分布透明性.docx_第2页
第2页 / 共13页
第四章 分布透明性.docx_第3页
第3页 / 共13页
第四章 分布透明性.docx_第4页
第4页 / 共13页
第四章 分布透明性.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

第四章 分布透明性.docx

《第四章 分布透明性.docx》由会员分享,可在线阅读,更多相关《第四章 分布透明性.docx(13页珍藏版)》请在冰豆网上搜索。

第四章 分布透明性.docx

第四章分布透明性

第四章分布透明性的级别

所谓分布透明性级别就是应用程序与数据分布相关程度的一种度量,很类似于集中式数据库中的数据独立性,数据分布透明性分为四个级别。

首先通过例子考虑什么是分段及分段种类。

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=SL10

EMP3=SLDEPTNUM>20PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)

EMP4=PJEMPNUM,NAME,SAL,TAX(EMP)

DEPT1=SLDEPTNUM<=10(DEPT)

DEPT2=SL10

DEPT3=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

else

begin

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元。

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

的程序。

分段透明:

UPDATES

SET奖学金=奖学金+50

WHERE学号=’100’;

位置透明:

SELECT*FROMS1WHERE学号=’100’;

IF#FOUNDTHEN

UPDATES1

SET奖学金=奖学金+50

WHERE学号=’100’;

ELSE

BEGIN

SELECT*FROMS2WHERE学号=’100’;

IF#FOUNDTHEN

UPDATES2

SET奖学金=奖学金+50

WHERE学号=’100’;

ELSE

UPDATES3

SET奖学金=奖学金+50

WHERE学号=’100’;

END;

本地映射透明:

SELECT*FROMS1ATSITE1WHERE学号=’100’;

IF#FOUNDTHEN

UPDATES1ATSITE1

SET奖学金=奖学金+50

WHERE学号=’100’;

ELSE

BEGIN

SELECT*FROMS2ATSITE2WHERE学号=’100’;

IF#FOUNDTHEN

UPDATES2ATSITE2

SET奖学金=奖学金+50

WHERE学号=‘100‘;

ELSE

UPDATES3ATSITE3

SET奖学金=奖学金+50

WHERE学号=‘100‘;

END;

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

分段透明:

UPDATES

SET奖学金=奖学金+50

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

位置透明:

UPDATES2

SET奖学金=奖学金+50;

UPDATES3

SET奖学金=奖学金+50

WHERE系号=‘6‘;

本地映射透明:

UPDATES2ATSITE2

SET奖学金=奖学金+50;

UPDATES3ATSITE3

SET奖学金=奖学金+50

WHERE系号=‘6‘;

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

分段透明:

UPDATES

SET系号=’5’

WHERE学号=’100’;

位置透明:

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

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

FROMS1

WHERE学号=’100’;

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

FROMSC1

WHERE学号=’100’;

DELETESC1WHERE学号=’100’;(先删SC1,因为学号在该表中为外键)

DELETES1WHERE学号=’100’;(再删S1)

INSERTINTOS2(‘100‘,$姓名,$年令,$性别,

$奖学金,$民族)

INSERTINTOSC2ASSELECT*FROM$SC

本地映射透明:

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

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

FROMS1ATSITE1

WHERE学号=’100’;

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

FROMSC1ATSITE1

WHERE学号=’100’;

DELETESC1ATSITE1WHERE学号=’100’;

DELETES1ATSITE1WHERE学号=’100’;

INSERTINTOS2ATSITE2(‘100‘,$姓名,$年令,$性别,$奖学金,$民族)

INSERTINTOSC2ATSITE2ASSELECT*FROM$SC

设EMP有如下分段:

EMP1=PJEMPNUM,NAME,SAL,TAXSLDEPTNUM<=10(EMP)

EMP2=PJEMPNUM,MGRNUM,DEPTNUMSLDEPTNUM<=10(EMP)

EMP3=PJEMPNUM,NAME,DEPTNUMSLDEPTNUM>10(EMP)

EMP4=PJEMPNUM,SAL,TAXMGRNUMSLDEPTNUM>10(EMP)

Q3100号雇员从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

FROMDEPT2

WHEREDEPTNUM=15;

DELETEEMP1WHEREEMPNUM=100;

DELETEEMP2WHEREEMPNUM=100;

INSERTINTOEMP3(EMPNUM,SAL,TAX,DEPTNUM);

(100,$NAME,15);

INSERTINTOEMP4(EMPNUM,SAL,TAX,MGRNUM);

(100,$SAL,$TAX,$MGRNUM);

(b)位置透明性(级别2)

本地映射透明:

SELECTNAME,SAL,TAXINTO$NAME,$SAL,$TAX

FROMEMP1ATSITE1

WHEREEMPNUM=100;

SELECTMGRNUMINTO$MGRNUM

FROMDEPT2ATSITE2

WHEREEMPNUM=15‘;

DELETEEMP1ATSITE1WHEREEMPNUM=100;

DELETEEMP1ATSITE5WHEREEMPNUM=100;

DELETEEMP2ATSITE2WHEREEMPNUM=100;

DELETEEMP2ATSITE6WHEREEMPNUM=100;

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);

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1