A-A+

设在教材14.2.3节的分布式数据库系统例子中 还有全局关系SC(SNO CNO G) 它具

2022-08-12 16:23:55 问答库 阅读 196 次

问题详情

设在教材14.2.3节的分布式数据库系统例子中,还有全局关系SC(SNO,CNO,G),它具有两个导出分片SC_A,SC_B,分别存储理学院和文学院学生的选课记录。SC_A存放在场地4,SC_B存放在场地5。今有一个稍复杂的查询,从终端输入一个课程号,查找选修该课程的学生学号和姓名,并把它们显示在屏幕上。请写出具有不同层次分布透明性(类比例子中的三种情况)的应用程序。不必给出细节,只需写出算法思想。


请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:情况1 若系统具有分片透明性则Scanf(″%s″SCnumber); /*从终端读入课程号到变量SCnumber中*/EXEC SQL SELECT SnoSname INTO:SNO:NAME/*SNONAME为程序变量*/FROM SCStudent /*在全局关系SCStudent中查找*/WHERE SCCno=:SCnumber AND SC.Sno=Student.Sno;Printf(″%s%s″SNONAME); /*把SNONAME输出在屏幕上*/情况2 若系统具有位置透明性但不具有分片透明性则Scanf(″%s″SCnumber);EXEC SQL SELECT SnoSname INTO:SNO:NAMEFROM SC_AS_AWHERE SC_A.Cno=:SCnumber AND SC_A.Sno=S_A.Sno;If(!FOUND)∣EXEC SQL SELECT SnoSname INTO:SNO:NAMEFROM SC_BS_BWHERE SC_B.Cno=:SCnumber AND SC_B.Sno=S_B.Sno;∣Printf(″%s%s″SNONAME);情况3 若系统只具有局部数据模型透明性不具有位置透明性(当然也就不具有分片透明性)则Scanf(″%s″SCnumber);EXEC SQL SELECT SnoSname INTO:SNO:NAMEFROM SC_A AT Site4S_A AT Sitel/*先在场地4的片段SC_A和场地1的片段S_A中查找*/WHERE SC_A.Cno=:SCnumber AND SC_A.Sno:S_A.Sno;If(!FOUND)∣EXEC SQL SELECT SnoSname INTO:SNO:NAMEFROM SC_B AT Site5S_B AT Site2/*再在场地5的片段SC_B和场地2的片段S_B中查找*//*也可以在场地5的片段SC_B和场地3的片段S_B中查找*/WHERE SC_B.Cno=:SCnumber AND SC_B.Sno=S_B.Sno;∣Printf(″%s%s″SNONAME);
情况1若系统具有分片透明性,则Scanf(″%s″,SCnumber);/*从终端读入课程号到变量SCnumber中*/EXECSQLSELECTSno,SnameINTO:SNO,:NAME/*SNO,NAME为程序变量*/FROMSC,Student/*在全局关系SC,Student中查找*/WHERESC,Cno=:SCnumberANDSC.Sno=Student.Sno;Printf(″%s,%s″,SNO,NAME);/*把SNO,NAME输出在屏幕上*/情况2若系统具有位置透明性,但不具有分片透明性,则Scanf(″%s″,SCnumber);EXECSQLSELECTSno,SnameINTO:SNO,:NAMEFROMSC_A,S_AWHERESC_A.Cno=:SCnumberANDSC_A.Sno=S_A.Sno;If(!FOUND)∣EXECSQLSELECTSno,SnameINTO:SNO,:NAMEFROMSC_B,S_BWHERESC_B.Cno=:SCnumberANDSC_B.Sno=S_B.Sno;∣Printf(″%s,%s″,SNO,NAME);情况3若系统只具有局部数据模型透明性,不具有位置透明性(当然也就不具有分片透明性),则Scanf(″%s″,SCnumber);EXECSQLSELECTSno,SnameINTO:SNO,:NAMEFROMSC_AATSite4,S_AATSitel/*先在场地4的片段SC_A和场地1的片段S_A中查找*/WHERESC_A.Cno=:SCnumberANDSC_A.Sno:S_A.Sno;If(!FOUND)∣EXECSQLSELECTSno,SnameINTO:SNO,:NAMEFROMSC_BATSite5,S_BATSite2/*再在场地5的片段SC_B和场地2的片段S_B中查找*//*也可以在场地5的片段SC_B和场地3的片段S_B中查找*/WHERESC_B.Cno=:SCnumberANDSC_B.Sno=S_B.Sno;∣Printf(″%s,%s″,SNO,NAME);

考点:分布式,全局