在"學(xué)生-選課-課程"數(shù)據(jù)庫(kù)中有三個(gè)關(guān)系:S(S#,SNAME,SEX,AGE,SD),SC(S#,C#,GRADE),C(C#,CNAME,TEACHER)。它們的主碼分別是S#,(S#,C#),C#,并且其他屬性都允許為空值(NULL)。用下面的SQL語句創(chuàng)建了兩個(gè)視圖:
createviewCS_SasselectS#,SNAME,AGEfromS
whereSD=’計(jì)算機(jī)系’;
createviewS_G(S#,GAVG)asselectS#,avg(GRADE)
fromSCgroupbyS#;
若用下面的SQL語句對(duì)上述視圖進(jìn)行修改,它們能被成功執(zhí)行嗎?為什么?
(1)updateCS_SsetSNAME=’WANGPING’whereS#=’200301001’;
(這里假定在表S中存在學(xué)生號(hào)S#=’200301001’的行。)
(2)insertintoCS_Svalues(’200302189’,’YANGXIN’,21);
(這里假定在表S中不存在學(xué)生號(hào)S#=’200302189’的行。)
(3)updateS_GsetGAVG=85whereS#=’200301001’;
(這里假定在表SC中存在學(xué)生號(hào)S#=’200301001’的行。)
要求:
首先回答這三個(gè)SQL語句中哪個(gè)(些)能被成功執(zhí)行,哪個(gè)(些)不能被成功執(zhí)行(12分),再進(jìn)一步說明能被成功執(zhí)行或不能被成功執(zhí)行的理由(18分)。
答案:
(1).第(1)和(2)兩個(gè)SQL語句能被成功執(zhí)行;第(3)個(gè)SQL語句不能被成功執(zhí)行。
(2).因?yàn)閷?duì)視圖的修改終要轉(zhuǎn)換為對(duì)基本表的修改。
Ⅰ對(duì)于第(1)個(gè)SQL語句能被成功執(zhí)行的理由是:執(zhí)行這個(gè)SQL語句將轉(zhuǎn)換成執(zhí)行如下的SQL語句:
updateSsetSNAME=’WANGPING’
whereSD=’計(jì)算機(jī)系’andS#=’200301001’;
Ⅱ?qū)τ诘?2)個(gè)SQL語句能被成功執(zhí)行的理由是:執(zhí)行這個(gè)SQL語句將轉(zhuǎn)換成執(zhí)行如下的SQL語句:
insertintoSvalues(’200302189’,’YANGXIN’,NULL,21,’計(jì)算機(jī)系’)
或insertintoS(S#,SNAME,AGE,SD)values(’200302189’,’YANGXIN’,21,’計(jì)算機(jī)系’)
轉(zhuǎn)換后的這兩個(gè)SQL語句,在本題意的假定下是能夠被成功執(zhí)行的。所以第(1)和(2)個(gè)SQL語句能被成功執(zhí)行。
Ⅲ對(duì)于第(3)個(gè)SQL語句不能被成功執(zhí)行的理由是:由于視圖S_G中的一個(gè)行是由表SC中若干行經(jīng)過分組求平均值得到的,因此對(duì)視圖S_G的更新就無法轉(zhuǎn)換成對(duì)基本表SC的更新。所以第(3)個(gè)SQL語句不能被成功執(zhí)行。
(2004年)
設(shè)某商品-銷售數(shù)據(jù)庫(kù)中的信息有:?jiǎn)T工員、員工名、工資、銷售組名、銷售組負(fù)責(zé)人、商品號(hào)、商品價(jià)、單價(jià)、銷售日期、銷售量、供應(yīng)者號(hào)、供應(yīng)者名、供應(yīng)者地址。假定:一個(gè)員工僅在一個(gè)銷售組;一個(gè)銷售組可銷售多種商品,一種商品只能由一個(gè)組銷售;一種商品每天有一個(gè)銷售量;一個(gè)供應(yīng)者可以供應(yīng)多種商品,一種商品可以多渠道供貨。
要求完成下列各題:
(1)根據(jù)以上信息,給出E-R圖。(10分)
(2)按規(guī)范化要求設(shè)計(jì)出3NF的數(shù)據(jù)庫(kù)模式。(10分)
(3)給出數(shù)據(jù)庫(kù)模式中每個(gè)關(guān)系模式的主鍵和外鍵。(5分)
(4)在所設(shè)計(jì)的數(shù)據(jù)庫(kù)模式上,檢索累計(jì)銷售總額超過50000元的商品號(hào)、商品名、銷售總額,并按商品號(hào)排序。(5分)
答案:
(1)E-R模型(10分;每個(gè)實(shí)體1分,包括屬性;每個(gè)聯(lián)系2分,包括聯(lián)系類型.)
(2)3NF的關(guān)系模式:(10分)
R1(員工號(hào),員工名,工資,銷售組名);(2分,沒有銷售組名扣1分)
R2(銷售組名,銷售組負(fù)責(zé)人);(1分)
R3(商品號(hào),商品名,單價(jià),銷售組名);(2分,沒有銷售組名扣1分)
R4(商品號(hào),銷售日期,銷售量);(2分)
R5(供應(yīng)者號(hào),供應(yīng)者名,供應(yīng)者地址);(1分)
R6(商品號(hào),供應(yīng)者號(hào)).(2分)
注:若R1,R3分為二個(gè)模式,也要扣1分.
(3)主鍵(3分)外鍵(2分)
R1員工號(hào)
R2銷售組名
R3商品號(hào)銷售組名
R4商品號(hào),銷售日期商品號(hào)
R5供應(yīng)者號(hào)
R6商品號(hào),供應(yīng)者號(hào)商品號(hào),供應(yīng)者號(hào)
(4)(5分)
SelectR3.商品號(hào),商品名,sum(銷售量)*單價(jià)(1分)
FromR3,R4whereR3.商品名=R4.商品名(1分)
GroupbyR3.商品名havingsum(銷售量)*單價(jià)>50000(2分)
OrderbyR3.商品名(1分)
createviewCS_SasselectS#,SNAME,AGEfromS
whereSD=’計(jì)算機(jī)系’;
createviewS_G(S#,GAVG)asselectS#,avg(GRADE)
fromSCgroupbyS#;
若用下面的SQL語句對(duì)上述視圖進(jìn)行修改,它們能被成功執(zhí)行嗎?為什么?
(1)updateCS_SsetSNAME=’WANGPING’whereS#=’200301001’;
(這里假定在表S中存在學(xué)生號(hào)S#=’200301001’的行。)
(2)insertintoCS_Svalues(’200302189’,’YANGXIN’,21);
(這里假定在表S中不存在學(xué)生號(hào)S#=’200302189’的行。)
(3)updateS_GsetGAVG=85whereS#=’200301001’;
(這里假定在表SC中存在學(xué)生號(hào)S#=’200301001’的行。)
要求:
首先回答這三個(gè)SQL語句中哪個(gè)(些)能被成功執(zhí)行,哪個(gè)(些)不能被成功執(zhí)行(12分),再進(jìn)一步說明能被成功執(zhí)行或不能被成功執(zhí)行的理由(18分)。
答案:
(1).第(1)和(2)兩個(gè)SQL語句能被成功執(zhí)行;第(3)個(gè)SQL語句不能被成功執(zhí)行。
(2).因?yàn)閷?duì)視圖的修改終要轉(zhuǎn)換為對(duì)基本表的修改。
Ⅰ對(duì)于第(1)個(gè)SQL語句能被成功執(zhí)行的理由是:執(zhí)行這個(gè)SQL語句將轉(zhuǎn)換成執(zhí)行如下的SQL語句:
updateSsetSNAME=’WANGPING’
whereSD=’計(jì)算機(jī)系’andS#=’200301001’;
Ⅱ?qū)τ诘?2)個(gè)SQL語句能被成功執(zhí)行的理由是:執(zhí)行這個(gè)SQL語句將轉(zhuǎn)換成執(zhí)行如下的SQL語句:
insertintoSvalues(’200302189’,’YANGXIN’,NULL,21,’計(jì)算機(jī)系’)
或insertintoS(S#,SNAME,AGE,SD)values(’200302189’,’YANGXIN’,21,’計(jì)算機(jī)系’)
轉(zhuǎn)換后的這兩個(gè)SQL語句,在本題意的假定下是能夠被成功執(zhí)行的。所以第(1)和(2)個(gè)SQL語句能被成功執(zhí)行。
Ⅲ對(duì)于第(3)個(gè)SQL語句不能被成功執(zhí)行的理由是:由于視圖S_G中的一個(gè)行是由表SC中若干行經(jīng)過分組求平均值得到的,因此對(duì)視圖S_G的更新就無法轉(zhuǎn)換成對(duì)基本表SC的更新。所以第(3)個(gè)SQL語句不能被成功執(zhí)行。
(2004年)
設(shè)某商品-銷售數(shù)據(jù)庫(kù)中的信息有:?jiǎn)T工員、員工名、工資、銷售組名、銷售組負(fù)責(zé)人、商品號(hào)、商品價(jià)、單價(jià)、銷售日期、銷售量、供應(yīng)者號(hào)、供應(yīng)者名、供應(yīng)者地址。假定:一個(gè)員工僅在一個(gè)銷售組;一個(gè)銷售組可銷售多種商品,一種商品只能由一個(gè)組銷售;一種商品每天有一個(gè)銷售量;一個(gè)供應(yīng)者可以供應(yīng)多種商品,一種商品可以多渠道供貨。
要求完成下列各題:
(1)根據(jù)以上信息,給出E-R圖。(10分)
(2)按規(guī)范化要求設(shè)計(jì)出3NF的數(shù)據(jù)庫(kù)模式。(10分)
(3)給出數(shù)據(jù)庫(kù)模式中每個(gè)關(guān)系模式的主鍵和外鍵。(5分)
(4)在所設(shè)計(jì)的數(shù)據(jù)庫(kù)模式上,檢索累計(jì)銷售總額超過50000元的商品號(hào)、商品名、銷售總額,并按商品號(hào)排序。(5分)
答案:
(1)E-R模型(10分;每個(gè)實(shí)體1分,包括屬性;每個(gè)聯(lián)系2分,包括聯(lián)系類型.)
(2)3NF的關(guān)系模式:(10分)
R1(員工號(hào),員工名,工資,銷售組名);(2分,沒有銷售組名扣1分)
R2(銷售組名,銷售組負(fù)責(zé)人);(1分)
R3(商品號(hào),商品名,單價(jià),銷售組名);(2分,沒有銷售組名扣1分)
R4(商品號(hào),銷售日期,銷售量);(2分)
R5(供應(yīng)者號(hào),供應(yīng)者名,供應(yīng)者地址);(1分)
R6(商品號(hào),供應(yīng)者號(hào)).(2分)
注:若R1,R3分為二個(gè)模式,也要扣1分.
(3)主鍵(3分)外鍵(2分)
R1員工號(hào)
R2銷售組名
R3商品號(hào)銷售組名
R4商品號(hào),銷售日期商品號(hào)
R5供應(yīng)者號(hào)
R6商品號(hào),供應(yīng)者號(hào)商品號(hào),供應(yīng)者號(hào)
(4)(5分)
SelectR3.商品號(hào),商品名,sum(銷售量)*單價(jià)(1分)
FromR3,R4whereR3.商品名=R4.商品名(1分)
GroupbyR3.商品名havingsum(銷售量)*單價(jià)>50000(2分)
OrderbyR3.商品名(1分)