您好,欢迎访问三七文档
1第四章分布透明性的级别所谓分布透明性级别就是应用程序与数据分布相关程度的一种度量,很类似于集中式数据库中的数据独立性,数据分布透明性分为四个级别。首先通过例子考虑什么是分段及分段种类。4.1数据分段及分段种类设有如下关系数据模型:S(学号,姓名,年令,性别,系号,奖学金,班长学号,民族)D(系号,系名,系主任)C(课号,课名,学时,任课教师)SC(学号,课号,成绩)(1)水平分段---通过选择运算实现例:把表S分为2个段,男、女各一段选择的条件称为限定语,用q表示S1=SL性别=’男’SS2=SL性别=‘女‘S(2)垂直分段---通过投影运算实现例:根据学习与生活的不同用途把S按属性分为2个段。S3=PJ学号,姓名,系名,班长学号SS4=PJ学号,性别,奖学金,民族S注意:学号必须重复,用于结合还原(3)导出式水平分段---通过半结合运算实现例:把成绩表SC按男、女分为2个段SC1=SCNSJS1(男)SC2=SCNSJS2(女)(4)混合式分段(含水平和垂直)例:把S分成4段,男、女及学习与生活信息分开2S11=PJ学号,姓名,系别,班长学号SL性别=‘男‘SS12=PJ学号,姓名,系别,班长学号SL性别=‘女‘SS21=PJ学号,性别,奖学金,民族SL性别=‘男‘SS22=PJ学号,性别,奖学金,民族SL性别=‘女‘S4.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)分段模式:3EMP1=SLDEPTNUM=10PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)EMP2=SL10DEPTNUM=20PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)EMP3=SLDEPTNUM20PJEMPNUM,NAME,MGRNUM,DEPTNUM(EMP)EMP4=PJEMPNUM,NAME,SAL,TAX(EMP)DEPT1=SLDEPTNUM=10(DEPT)DEPT2=SL10DEPTNUM=20(DEPT)DEPT3=SLDEPTNUM20(DEPT)SUPPLIER1=SLCITY=’SF’(SUPPLIER)SUPPLIER2=SLCITY=’LA’(SUPPLIER)SUPPLY1=SUPPLYSJSNUM=SNUMSUPPLIER1SUPPLY2=SUPPLYSJSNUM=SNUMSUPPLIER2也可写成:SUPPLY1=SUPPLYNSJSUPPLIER1SUPPLY2=SUPPLYNSJSUPPLIER2例子:Q1:任意给一个供应商号,求供应商名。(1)系统具有分段透明性Read(terminal,$SNUM);selectNAMEinto$NAMEfromSUPPLIERwhereSNUM=$SNUM;Write(terminal,$NAME);站点1DDBMS站点2站点3(a)分段透明性(级别1)查询Q1:任意给一个供应商号,求供应商名。(2)系统具有位置透明性:DDBNSSUPPLIER1SUPPLIER2SUPPLIER24Read(terminal,$SNUM);selectNAMEinto$NAMEfromSUPPLIER1whereSNUM=$SNUM;ifnot#FOUNDthenselectNAMEinto$NAMEfromSUPPLIER2whereSNUM=$SNUM;Write(terminal,$NAME);站点1DDBMS站点2或站点3(b)位置透明性(级别2)(3)系统具有本地映射透明性:(加站点)Read(terminal,$SNUM);selectNAMEinto$NAMEfromSUPPLIER1ATSITE1whereSNUM=$SNUM;ifnot#FOUNDthenselectNAMEinto$NAMEfromSUPPLIER2ATSITE3whereSNUM=$SNUM;Write(terminal,$NAME);站点1DDBMS站点2站点3(c)本地映射透明性(级别3)图4.1分布透明性不同级别下的只读应用SUPINQUIRY(4)无透明性DDBNSSUPPLIER1SUPPLIER2SUPPLIER2DDBNSSUPPLIER1SUPPLIER2SUPPLIER25(2)较复杂的读应用(多表读)查询Q2:任意给一个零件号,求供应商名。设分配模式为:SUPPLIER1为站点1SUPPLY1为站点3SUPPLIER2为站点2SUPPLY2为站点4(1)系统具有分段透明性Read(terminal,$PNUM);selectNAMEinto$NAMEfromSUPPLIER,SUPPLYwhereSUPPLIER.SNUM=SUPPLY.SNUMandSUPPLY.PNUM=$PNUM;Write(terminal,$NAME);(a)分段透明性(级别1)查询Q2:任意给一个零件号,求供应商名。设分配模式为:SUPPLIER1为站点1SUPPLY1为站点3SUPPLIER2为站点2SUPPLY2为站点4(2)系统具有位置透明性Read(terminal,$PNUM);selectNAMEinto$NAMEfromSUPPLIER1,SUPPLY1whereSUPPLIER1.SNUM=SUPPLY1.SNUM;andSUPPLY1.PNUM=$PNUM;ifnot#FOUNDthenselectNAMEinto$NAMEfromSUPPLIER2,SUPPLY2whereSUPPLIER2.SNUM=SUPPLY2.SNUM;andSUPPLY2.PNUM=$PNUM;Write(terminal,$NAME);6(b)位置透明性(级别2)思考:SUPPLIER与SUPPLY都有更多的段?SUPPLIER1与SUPPLY2或SUPPLIER1与SUPPLY2的结合不为空呢?查询Q2:任意给一个零件号,求供应商名。并设分配模式为:SUPPLIER1为站点1SUPPLY1为站点3SUPPLIER2为站点2SUPPLY2为站点4(3)系统具有本地映射透明性Read(terminal,$PNUM);selectSNUMinto$SNUMfromSUPPLY1atsite3wherePNUM=$PNUM;if#FOUNDthenbeginsend$SNUMfromsite3tosite1;selectNAMEinto$NAMEfromSUPPLIER1atsite1(程序员很聪明)whereSNUM=$SNUMendelsebeginselectSNUMinto$SNUMfromSUPPLIER2atsite4wherePNUM=$PNUM;send$SNUMfromsite4tosite2;selectNAMEinto$NAMEfromSUPPLIER2atsite27whereSNUM=$SNUMendWrite(terminal,$NAME);(d)本地映射透明性(级别3)图4.2分布透明性不同级别下的只读应用SUPOFPART4.4更新应用的分布透明性设有全局数据模型:S(学号,姓名,年令,性别,系号,奖学金,民族)C(课号,课名,学时,任课教师)SC(学号,课号,成绩)D(系号,系名,系主任)分段与分配模式为:S1=SL系号=’2’S站点1S2=SL系号=’5’S站点2S3=SL系号’2’AND系号’5’S站点3SC1=SCNSJS1站点1SC2=SCNSJS2站点2SC3=SCNSJS3站点3模式C与D不分段,且重复地存放在2个站点上。请分别在分段透明、位置透明、本地映射透明下完成:(1)把100号学生的奖学金增加50元。(2)把6号与2号系学生的奖学金都加50元。(3)学号为100的学生由2号系调入5号系的程序。的程序。分段透明:UPDATESSET奖学金=奖学金+50WHERE学号=’100’;位置透明:SELECT*FROMS1WHERE学号=’100’;IF#FOUNDTHEN8UPDATES1SET奖学金=奖学金+50WHERE学号=’100’;ELSEBEGINSELECT*FROMS2WHERE学号=’100’;IF#FOUNDTHENUPDATES2SET奖学金=奖学金+50WHERE学号=’100’;ELSEUPDATES3SET奖学金=奖学金+50WHERE学号=’100’;END;本地映射透明:SELECT*FROMS1ATSITE1WHERE学号=’100’;IF#FOUNDTHENUPDATES1ATSITE1SET奖学金=奖学金+50WHERE学号=’100’;ELSEBEGINSELECT*FROMS2ATSITE2WHERE学号=’100’;IF#FOUNDTHENUPDATES2ATSITE2SET奖学金=奖学金+50WHERE学号=‘100‘;ELSEUPDATES3ATSITE39SET奖学金=奖学金+50WHERE学号=‘100‘;END;(2)把6号与2号系学生的奖学金都加50元。分段透明:UPDATESSET奖学金=奖学金+50WHERE系号=‘2‘OR系号=‘6‘;位置透明:UPDATES2SET奖学金=奖学金+50;UPDATES3SET奖学金=奖学金+50WHERE系号=‘6‘;本地映射透明:UPDATES2ATSITE2SET奖学金=奖学金+50;UPDATES3ATSITE3SET奖学金=奖学金+50WHERE系号=‘6‘;(3)学号为100的学生由2号系调入5号系的程序。分段透明:UPDATESSET系号=’5’WHERE学号=’100’;位置透明:SELECT姓名,年令,性别,奖学金,班长学号,民族INTO$姓名,$年令,$性别,$奖学金,$民族FROMS1WHERE学号=’100’;SELECT学号,课号,成绩INTO$SC(学号,课号,成绩)FROMSC110WHERE学号=’100’;DELETESC1WHERE学号=’100’;(先删SC1,因为学号在该表中为外键)DELETES1WHERE学号=’100’;(再删S1)INSERTINTOS2(‘100‘,$姓名,$年令,$性别,$奖学金,$民族)INSERTINTOSC2ASSELECT*FROM$SC本地映射透明:SELECT姓名,年令,性别,奖学金,班长学号,民族INTO$姓名,$年令,$性别,$奖学金,$民族FROMS1ATSITE1WHERE学号=’100’;SELECT学号,课号,成绩INTO$SC(学号,课号,成绩)FROMSC1ATSITE1WHERE学号=’100’;DELETESC1ATSITE1WHERE学号=’100’;DELETES1ATSITE1WHERE学号=’100’;INSERTINTOS2ATSITE2(‘100‘,$姓名,$年令,$性别,$奖学金,$民族)INSERTINTOSC2ATSITE2ASSELECT*FROM$SC设EMP有如下分段:EMP1=PJEMPNUM,NAME,SAL,TAXSLDEPTNUM=10(EMP)EMP2=PJEMPNUM,MGRNUM,
本文标题:第四章分布透明性
链接地址:https://www.777doc.com/doc-2168328 .html