3.(2000年)設(shè)計(jì)一個用于管理會議室的數(shù)據(jù)庫。經(jīng)調(diào)查分析,得到的數(shù)據(jù)項(xiàng)列出如下:
房間號r#CHAR(4),部門號d#CHAR(3),部門名稱dnameCHAR(20),
房間容量contentINT,部門主管dmanagerCHAR(8),開會日期mdateDATE,
會議名稱cnameCHAR(20),會議主題(subject)CHAR(80),會議類型(type),
部門人數(shù)dnumINT,當(dāng)前房間狀態(tài)stateCHAR(1),
并確定以會議室(room)信息,部門(department)信息,會議(conference)信息為實(shí)體,它們通過“開會(meeting)”聯(lián)系起來。為了簡化問題做如下假定:
l 會議以部門召開,但一個部門在同一會議室不能重復(fù)召開同一個會議。
l 會議室按部門借用,且不預(yù)借。
l 當(dāng)前房間狀態(tài)取值為‘1’表示該會議室當(dāng)前正在開會,取值為‘0’表示該會議室當(dāng)前未被借用。
數(shù)據(jù)庫概念設(shè)計(jì)的只包含主鍵屬性的簡化E-R圖如下:
cname
r#
會議conference
房間room
部門department
d#
開會meeting
m
n
p
要求:
⑴數(shù)據(jù)庫的邏輯結(jié)構(gòu)設(shè)計(jì):給出相應(yīng)的表名、表的屬性名(數(shù)據(jù)類型可省)、主鍵。(14分)
⑵給出下列查詢的SQL語句:(16分,每小題4分)
a)當(dāng)前未借用的會議室(房間號)和容量:
b)2000年4月8日有哪些部門(部門名稱)在開會?他們的主管是誰?
c)2000年4月8日‘信息中心’在哪個會議室(房間號)開會?會議名稱和主題是什么?
d)當(dāng)前能夠適合‘信息中心’開會的有哪些會議室(房間號)?
答案:
(1)數(shù)據(jù)庫的邏輯結(jié)構(gòu)設(shè)計(jì)(給出相應(yīng)的表名,表結(jié)構(gòu),主鍵;(14分)
room(r#,content,state)主鍵:r#(3分)
department(d#,dname,dmanager,dnum)主鍵:d#(3分)
conference(cname,subject,type)主鍵:cname(3分)
meeting(r#,d#,cname,mdate)主鍵(r#,d#,cname)(5分)
(2)給出下列查詢的SQL語句:(16分,每小題4分)
a)當(dāng)前未借用的會議室(房間號)和容量:
selectr#,contentfromroomwherestate=’0’
b)2000年4月8日有哪些部門(部門名稱)在開會?他們的主管是誰?
Selectdname,dmanagerfromdepartmentd,meetingm
whered.d#=m.d#andmdate=’2000年4月8日’
或
Selectdname,dmanagerfromdepartmentd
whered.d#=in(selectm.d#=frommeetingmWheremdate=’2000年4月8日’)
c)2000年4月8日’信息中心’在哪個會議室(房間號)開會?會議名稱和主題是什么?
Selectr#,m.cname,subjectfromdepartmentd,meetingm,conferencec
whered.d#=m.d#andm.cname=c.cnameand
Mdate=’2000年4月8日’anddname=’信息中心’
或(注:本題中Selectr#,c.cname,......也可以是Selectr#,m.cname,......
Selectr#,c.cname,subjectfrommeetingm,conferencec
WhereMdate=’2000年4月8日’andm.cname=c.cnameand
m.d#=(selectd.d#fromdepartmentdwheredname=’信息中心’)
d)當(dāng)前能夠適合’信息中心’開會的有哪些會議室(房間號)?
Selectr#fromroomwherestate=’O’and
content>=(selectdnumfromdepartmentwheredname=’信息中心’)
4.(2001年)
(l)、為了維護(hù)數(shù)據(jù)庫的參照完整性,當(dāng)刪除被參照關(guān)系的元組時,系統(tǒng)可能采取哪些做法?(15分)
(2)、若有學(xué)生關(guān)系S(S#,SNAME,SEX,AGE),其主鍵為S#;選課關(guān)系SC(S#,C#,GRADE),其主鍵為(S#,C#),且S.S#=SC.S#。假定學(xué)生號為‘01001’的學(xué)生離開學(xué)校不再回來了,為此若刪除關(guān)系S中S#=‘01001’的元組時,如果關(guān)系SC中有4個元組的S#=‘01001’,應(yīng)該選用哪一種做法?為什么?(15分)
答案:
(1)、為了維護(hù)數(shù)據(jù)庫的參照完整性,當(dāng)刪除被參照關(guān)系的元組時,系統(tǒng)可能采取如下三種做法(每種做法得5分):
l)級聯(lián)刪除(cascades):即,當(dāng)刪除被參照關(guān)系的元組時,同時將參照關(guān)系中所有外鍵值與被參照關(guān)系中要被刪除元組的主鍵值相等(相對應(yīng))的元組一起刪除。
2)拒絕刪除(restricted):即,只當(dāng)參照關(guān)系中沒有任何元組的外鍵值與被參照關(guān)系中要被刪除的元組的主鍵值相等(相對應(yīng))時,系統(tǒng)才執(zhí)行該刪除操作,否則拒絕執(zhí)行該刪除操作。
3)置空值刪除(nullfies):即,當(dāng)刪除被參照關(guān)系的元組時,同時將參照關(guān)系中所有與被參照關(guān)系中要被刪除元組的主健值相等(相對應(yīng))的外鍵值都置為空值。
(2)、對于本題的情況,應(yīng)該選用第一種做法。即,將關(guān)系SC中S#=‘01001’的4個元組也一起刪除。(得10分)
因?yàn)楫?dāng)一個學(xué)生離開學(xué)校不再回來,他的個人信息記錄若從S關(guān)系中刪除了,那么他的選課信息記錄就沒有保存的必要,也應(yīng)隨之從SC關(guān)系中刪除。(得5分)
房間號r#CHAR(4),部門號d#CHAR(3),部門名稱dnameCHAR(20),
房間容量contentINT,部門主管dmanagerCHAR(8),開會日期mdateDATE,
會議名稱cnameCHAR(20),會議主題(subject)CHAR(80),會議類型(type),
部門人數(shù)dnumINT,當(dāng)前房間狀態(tài)stateCHAR(1),
并確定以會議室(room)信息,部門(department)信息,會議(conference)信息為實(shí)體,它們通過“開會(meeting)”聯(lián)系起來。為了簡化問題做如下假定:
l 會議以部門召開,但一個部門在同一會議室不能重復(fù)召開同一個會議。
l 會議室按部門借用,且不預(yù)借。
l 當(dāng)前房間狀態(tài)取值為‘1’表示該會議室當(dāng)前正在開會,取值為‘0’表示該會議室當(dāng)前未被借用。
數(shù)據(jù)庫概念設(shè)計(jì)的只包含主鍵屬性的簡化E-R圖如下:
cname
r#
會議conference
房間room
部門department
d#
開會meeting
m
n
p
要求:
⑴數(shù)據(jù)庫的邏輯結(jié)構(gòu)設(shè)計(jì):給出相應(yīng)的表名、表的屬性名(數(shù)據(jù)類型可省)、主鍵。(14分)
⑵給出下列查詢的SQL語句:(16分,每小題4分)
a)當(dāng)前未借用的會議室(房間號)和容量:
b)2000年4月8日有哪些部門(部門名稱)在開會?他們的主管是誰?
c)2000年4月8日‘信息中心’在哪個會議室(房間號)開會?會議名稱和主題是什么?
d)當(dāng)前能夠適合‘信息中心’開會的有哪些會議室(房間號)?
答案:
(1)數(shù)據(jù)庫的邏輯結(jié)構(gòu)設(shè)計(jì)(給出相應(yīng)的表名,表結(jié)構(gòu),主鍵;(14分)
room(r#,content,state)主鍵:r#(3分)
department(d#,dname,dmanager,dnum)主鍵:d#(3分)
conference(cname,subject,type)主鍵:cname(3分)
meeting(r#,d#,cname,mdate)主鍵(r#,d#,cname)(5分)
(2)給出下列查詢的SQL語句:(16分,每小題4分)
a)當(dāng)前未借用的會議室(房間號)和容量:
selectr#,contentfromroomwherestate=’0’
b)2000年4月8日有哪些部門(部門名稱)在開會?他們的主管是誰?
Selectdname,dmanagerfromdepartmentd,meetingm
whered.d#=m.d#andmdate=’2000年4月8日’
或
Selectdname,dmanagerfromdepartmentd
whered.d#=in(selectm.d#=frommeetingmWheremdate=’2000年4月8日’)
c)2000年4月8日’信息中心’在哪個會議室(房間號)開會?會議名稱和主題是什么?
Selectr#,m.cname,subjectfromdepartmentd,meetingm,conferencec
whered.d#=m.d#andm.cname=c.cnameand
Mdate=’2000年4月8日’anddname=’信息中心’
或(注:本題中Selectr#,c.cname,......也可以是Selectr#,m.cname,......
Selectr#,c.cname,subjectfrommeetingm,conferencec
WhereMdate=’2000年4月8日’andm.cname=c.cnameand
m.d#=(selectd.d#fromdepartmentdwheredname=’信息中心’)
d)當(dāng)前能夠適合’信息中心’開會的有哪些會議室(房間號)?
Selectr#fromroomwherestate=’O’and
content>=(selectdnumfromdepartmentwheredname=’信息中心’)
4.(2001年)
(l)、為了維護(hù)數(shù)據(jù)庫的參照完整性,當(dāng)刪除被參照關(guān)系的元組時,系統(tǒng)可能采取哪些做法?(15分)
(2)、若有學(xué)生關(guān)系S(S#,SNAME,SEX,AGE),其主鍵為S#;選課關(guān)系SC(S#,C#,GRADE),其主鍵為(S#,C#),且S.S#=SC.S#。假定學(xué)生號為‘01001’的學(xué)生離開學(xué)校不再回來了,為此若刪除關(guān)系S中S#=‘01001’的元組時,如果關(guān)系SC中有4個元組的S#=‘01001’,應(yīng)該選用哪一種做法?為什么?(15分)
答案:
(1)、為了維護(hù)數(shù)據(jù)庫的參照完整性,當(dāng)刪除被參照關(guān)系的元組時,系統(tǒng)可能采取如下三種做法(每種做法得5分):
l)級聯(lián)刪除(cascades):即,當(dāng)刪除被參照關(guān)系的元組時,同時將參照關(guān)系中所有外鍵值與被參照關(guān)系中要被刪除元組的主鍵值相等(相對應(yīng))的元組一起刪除。
2)拒絕刪除(restricted):即,只當(dāng)參照關(guān)系中沒有任何元組的外鍵值與被參照關(guān)系中要被刪除的元組的主鍵值相等(相對應(yīng))時,系統(tǒng)才執(zhí)行該刪除操作,否則拒絕執(zhí)行該刪除操作。
3)置空值刪除(nullfies):即,當(dāng)刪除被參照關(guān)系的元組時,同時將參照關(guān)系中所有與被參照關(guān)系中要被刪除元組的主健值相等(相對應(yīng))的外鍵值都置為空值。
(2)、對于本題的情況,應(yīng)該選用第一種做法。即,將關(guān)系SC中S#=‘01001’的4個元組也一起刪除。(得10分)
因?yàn)楫?dāng)一個學(xué)生離開學(xué)校不再回來,他的個人信息記錄若從S關(guān)系中刪除了,那么他的選課信息記錄就沒有保存的必要,也應(yīng)隨之從SC關(guān)系中刪除。(得5分)