第一篇:數(shù)據(jù)庫實(shí)驗(yàn)報(bào)告
數(shù)據(jù)庫系統(tǒng)原理課程設(shè)計(jì)
總結(jié)報(bào)告
學(xué)院: 軟件學(xué)院 專業(yè): 軟件工程 年級: 2009 學(xué)號: 20092647 姓名: 李野
1、開發(fā)環(huán)境
Windows7系統(tǒng)
2、DBMS系統(tǒng)架構(gòu)
采用向量的存儲結(jié)構(gòu)存儲數(shù)據(jù)字典信息;屬性信息,表結(jié)構(gòu),索引結(jié)構(gòu),用戶授權(quán)機(jī)制都用相應(yīng)的類表示;將表實(shí)體(表中內(nèi)容)存儲在文件中,方便查閱;每當(dāng)執(zhí)行相應(yīng)的SQL語句時(shí)只需查閱數(shù)據(jù)字典及修改數(shù)據(jù)文件。
3、DBMS主要功能模塊
(1)DDL功能模擬(2)DML功能模擬
(3)關(guān)系數(shù)據(jù)庫系統(tǒng)的查詢優(yōu)化(4)DCL功能模擬
3.1 SQL語言的詞法和語法分析(1)功能介紹
判斷輸入的SQL語句是否符合詞法以及語法規(guī)則
(2)相關(guān)理論
將輸入的文本當(dāng)成一個(gè)字符串來處理,通過匹配該字符串中的關(guān)鍵字來確定要做什么功能,若都不能匹配,則說明出現(xiàn)詞法或語法錯(cuò)誤。
(3)算法描述
將輸入的文本保存在字符串s1中,將s1用換行符“n”分割,保存在array[]中,掃描字符串?dāng)?shù)組中的每個(gè)成員。
a.若以“create table”開頭,查找information文件是否含有“create table”后的表的信息,如果有,則返回true,表示數(shù)據(jù)字典中已有該表,若返回false,表示數(shù)據(jù)字典中沒有該表信息,則把相應(yīng)的屬性名及其類型寫進(jìn)數(shù)據(jù)字典,并標(biāo)明是否有主外鍵。b.若以“drop table”開頭,則調(diào)用“drop”函數(shù)
表示刪除表。
c.若以“alter table”開頭,判斷其后是否有“add”或“drop”,“add”表示添加屬性,“drop”表示刪除屬性。
d.若以“insert”開頭,調(diào)用“insert()”函數(shù),表示插入元組。e.若以“delete”開頭,調(diào)用“delete()”函數(shù),表示刪除元組。f.若以“update”開頭,判斷其后是否有“where”條件,若有,則調(diào)用“update()”函數(shù),否則調(diào)用“update0()”函數(shù),表示修改相應(yīng)的元組。g.若以“select”開頭,判斷其后是否有“*”,若有,則調(diào)用“selectall()”函數(shù),否則調(diào)用“select()”函數(shù),表示查詢。
h.若以“create unique index”開頭,則調(diào)用“index()”函數(shù),表示創(chuàng)建索引。
i.若以“drop index”開頭,則調(diào)用“dropindex()”函數(shù),表示刪除索引。
(4)程序流程圖
開始將文本框中內(nèi)容保存在字符串中Create table開頭Drop table開頭alter table開頭insert開頭delete開頭Create unique index開頭Drop index開頭刪除該表信息,并修改數(shù)據(jù)字典數(shù)據(jù)字典中是否有該表信息否是寫回?cái)?shù)據(jù)字典Drop添加屬性判斷其后為“add”或“drop”add插入元組刪除元組創(chuàng)建索引刪除索引標(biāo)記該表已存在刪除屬性
表3.1-1
3.2創(chuàng)建數(shù)據(jù)庫及數(shù)據(jù)操作功能(1)功能介紹
1、實(shí)現(xiàn)建立數(shù)據(jù)庫表結(jié)構(gòu)的功能。
a.支持整型、符點(diǎn)型、字符型數(shù)據(jù)。b.以文件形式保存基本表。c.建立相應(yīng)的數(shù)據(jù)字典。
2、實(shí)現(xiàn)輸入數(shù)據(jù)庫記錄的功能。
3、實(shí)現(xiàn)刪除數(shù)據(jù)庫記錄的功能。
4、實(shí)現(xiàn)修改數(shù)據(jù)庫記錄的功能。
5、實(shí)現(xiàn)顯示數(shù)據(jù)庫結(jié)構(gòu)和內(nèi)容(以表格形式顯示)。
6、實(shí)現(xiàn)在已有的關(guān)系中添加屬性的功能;
7、實(shí)現(xiàn)從已有的關(guān)系中刪除屬性的功能;
8、實(shí)現(xiàn)刪除表的功能。
(2)相關(guān)理論
通過編寫一系列的SQL語句,實(shí)現(xiàn)創(chuàng)建表,刪除表,插入屬性,刪除屬性,插入元組,刪除元組,修改元組,查找元組等一系列操作。
(3)算法描述
a.創(chuàng)建表
首先判斷該表是否存在,若不存在則將create table 后的語句保存,即將屬性名及類型存儲到數(shù)據(jù)字典中,否則輸出“該表已存在”。b.刪除表
首先在數(shù)據(jù)字典中將該表信息找到,并將其刪除,再找到該數(shù)據(jù)文件,也將其刪除,若該表有索引文件,也將該索引文件刪除。c.添加屬性
在數(shù)據(jù)字典中找到該表位置,將要添加的屬性名及類型追加到末尾。d.刪除屬性
在數(shù)據(jù)字典中找到該表并找到該屬性,將該屬性刪除,找到該表的數(shù)據(jù)文件,刪除此文件中該屬性域。e.插入元組
讀數(shù)據(jù)字典,找到該文件,并記錄該表屬性的名字及類型與要插入的數(shù)據(jù)進(jìn)行匹配,此時(shí)注意類型為“Int”“float”型的輸入是否正確,還要注意“char()”類型是否超界。若判斷完畢,將這些數(shù)據(jù)寫到數(shù)據(jù)文件末尾,若該表有索引文件,還要基于插入新元組后的表建立新索引。f.刪除元組
查找數(shù)據(jù)文件,找到與“where”后的條件相符的元組,并刪除。g.修改元組
首先查看是否有“where”條件,若沒有,則將數(shù)據(jù)文件全部讀出,并將數(shù)據(jù)文件改成“set”后的條件;否則查找數(shù)據(jù)文件并全部讀出,找到與“where”后的條件相符的元組,根據(jù)“set”后的條件進(jìn)行修改,并寫回文件中。
(4)程序流程圖
a.創(chuàng)建表程序流程圖
開始文本中以create table開頭查找數(shù)據(jù)字典是否有該表信息?否是將屬性名及類型寫進(jìn)數(shù)據(jù)字典
表3.2-1
提示該表已尋在
b.刪除表程序流程圖
開始文本以“drop table”開始查找數(shù)據(jù)字典是否存在該表?是在數(shù)據(jù)字典中將該表信息刪除否提示不存在該表找到相應(yīng)數(shù)據(jù)文件并將其刪除結(jié)束
表3.3-2
c.添加/刪除屬性程序流程圖
開始文本以“alter table”開始其后為“add”或“drop”add drop在數(shù)據(jù)字典中加入該屬性信息(名字及類型)在數(shù)據(jù)字典中刪除該屬性信息找到數(shù)據(jù)文件,刪除該屬性信息結(jié)束 表3.2-3
d.插入元組程序流程圖
開始文本以“insert”開始查數(shù)據(jù)字典,記錄屬性名及類型掃描待插入的每個(gè)屬性與數(shù)據(jù)字典中的屬性比較char()int或float是否匹配或越界是否匹配不匹配或越界都匹配提示屬性類型輸入錯(cuò)誤寫入數(shù)據(jù)文件尾是否有索引文件有無重寫索引文件結(jié)束 表3.2-4
e.刪除元組程序流程圖
開始文本以“delete”開始查找數(shù)據(jù)字典是否存在該表?是否讀數(shù)據(jù)文件提示不存在該表找到與“where”后相匹配的數(shù)據(jù)文件并將其刪除結(jié)束
表3.3-5
f.修改元組程序流程圖
開始文本以“update”開始其后為是否有“where”條件無有將數(shù)據(jù)文件中相應(yīng)的內(nèi)容全部改為“set”后的條件找到數(shù)據(jù)文件中符合“where”后條件的元組將該元組相應(yīng)條件改為“set”后信息是否有相應(yīng)的索引文件有無重寫索引文件結(jié)束 表3.2-6
(5)測試用例與實(shí)驗(yàn)結(jié)果
a.創(chuàng)建表 測試用例: create table s(s# char(9)sname char(8)age int sex char(2)primary key s#)
create table c(c# char(5)cname char(20)teacher char(8)primary key c#)
create table sc(s# char(9)c# char(5)grade float primary out key s# from s primary out key c# from c)實(shí)驗(yàn)結(jié)果: b.刪除表 測試用例: drop table sc 實(shí)驗(yàn)結(jié)果:
C:插入元組 測試用例:
insert into s values('s1','lou',21,'F')insert into s values('s2','lu',20,'F')insert into s values('s3','ha',22,'M')insert into s values('s4','zhang',21,'F')insert into s values('s5','qian',20,'M')
insert into s values('s6','sun',18,'F')insert into s values('s7','lisan',21,'F')insert into s values('s8','qian',20,'M')insert into s values('s9','wugozi',18,'F')insert into c values('c1','math','zhao')insert into c values('c2','chinese','qian')insert into c values('c3','english','sun')insert into c values('c4','cs','li')insert into c values('c5','java','zhou')insert into c values('c6','c++','wu')insert into c values('c7','jsp','zheng')insert into c values('c8','j2ee','wang')insert into c values('c9','asp','sima')insert into sc values('s1','c1',67)insert into sc values('s2','c2',80)insert into sc values('s3','c3',100)insert into sc values('s4','c4',99)insert into sc values('s5','c5',87)insert into sc values('s6','c6',78)insert into sc values('s7','c7',90)insert into sc values('s8','c8',87)insert into sc values('s9','c9',78)實(shí)驗(yàn)結(jié)果:
d:刪除元組 測試用例:
delete from sc where(sc.s#='s6')實(shí)驗(yàn)結(jié)果:
e:修改元組 測試用例:
update sc set score=120 where s#='s5' 實(shí)驗(yàn)結(jié)果:
f:添加屬性 測試用例:
Alter table s add school char(20)實(shí)驗(yàn)結(jié)果:
g:刪除屬性 測試用例:
Alter table drop school
3.3索引的創(chuàng)建及刪除(1)功能介紹
a.為某關(guān)系的主屬性建立索引
b.利用索引屬性完成選擇操作,記錄完成操作花費(fèi)的時(shí)間,在建立索引前的關(guān)系上執(zhí)行同樣的選擇操作并進(jìn)行時(shí)間代價(jià)的比較。
c.利用索引屬性完成連接操作,記錄完成操作花費(fèi)的時(shí)間,在建立索引前的關(guān)系上執(zhí)行同樣的選擇操作并進(jìn)行時(shí)間代價(jià)的比較。
d.刪除索引
(2)相關(guān)理論
默認(rèn)每個(gè)塊有50個(gè)字節(jié),數(shù)據(jù)文件中的每個(gè)元組有自己的首指針(指向元組首部的文件指針),索引文件中存儲的是屬性域值及其塊號(塊號通過其首指針/50得到)。
(3)算法描述
a.創(chuàng)建索引
針對表的主鍵建立索引文件,找到數(shù)據(jù)文件中要建立索引的屬性域值,并記錄該元組的首指針,將其保存在索引文件中。
b.利用索引屬性完成選擇操作
在索引文件中找到“select”語句中“where”后的條件涉及的屬性(因?yàn)槭腔谥麈I建立的索引,所以只能通過主鍵的索引文件來查找相應(yīng)的信息),記錄索引域后的塊號,將塊號*50就能得到相應(yīng)的文件指針,通過文件指針讀數(shù)據(jù)文件,就能找到相應(yīng)的元組。
c.利用索引屬性完成連接操作 d.刪除索引
找到相應(yīng)的索引文件將其永久刪除
(4)程序流程圖
a.創(chuàng)建索引文件
開始數(shù)據(jù)字典有該屬性?是找到數(shù)據(jù)文件中要建立索引的屬性域記錄該元組的文件否指針并/50得到塊號一并寫入索引文件結(jié)束 表3.3-1
b.利用索引屬性完成選擇操作
開始查找索引文件中與“where”后條件相符的屬性域值找到?記錄該屬性域值得塊號否塊號*50得到文件指針查找數(shù)據(jù)文件找到該元組,輸出結(jié)束 表3.3-2
是c.刪除索引文件
開始找到該索引文件?是否將該索引文件徹底刪除結(jié)束 表3.3-4
(5)測試用例與實(shí)驗(yàn)結(jié)果
a:創(chuàng)建索引文件 測試用例:
create index index on s 實(shí)驗(yàn)結(jié)果:
b:利用索引選擇
3.4查詢功能(1)功能介紹
a.實(shí)現(xiàn)全關(guān)系選擇操作 b.實(shí)現(xiàn)單關(guān)系投影操作
c.實(shí)現(xiàn)單關(guān)系選擇操作(允許多條件)d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)e.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的連接操作 f.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇和連接操作 g.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇、投影和連接操作
(2)相關(guān)理論(3)算法描述
a.全關(guān)系的選擇操作
掃描數(shù)據(jù)字典,判斷是否有該表,如果有,則掃描數(shù)據(jù)文件,將數(shù)據(jù)文件中內(nèi)容全部輸出。
b.實(shí)現(xiàn)單關(guān)系的投影操作
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,記錄要投影的屬性是第幾個(gè),掃描數(shù)據(jù)文件,將每個(gè)元組中要查詢的屬性輸出。
c.實(shí)現(xiàn)單關(guān)系的選擇操作(允許多條件)
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,掃描數(shù)據(jù)文件,利用循環(huán)將滿足“where”后條件的元組選出。
d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,則記錄需要投影的屬性是第幾個(gè),查找數(shù)據(jù)文件,利用循環(huán)將滿足“where”條件的元組找出并屬性相應(yīng)的屬性值。
e.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的連接操作
掃描數(shù)據(jù)字典,判斷是否有這兩個(gè)表,若有,則查找相關(guān)屬性,將兩個(gè)表中的相關(guān)屬性依據(jù)條件進(jìn)行匹配,若匹配成功,則表示連接成功,輸出連接結(jié)果。
f.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇和連接操作 在以上的連接結(jié)果中挑選符合條件的元組輸出。g.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇、投影和連接操作 在以上的結(jié)果中選擇要投影的屬性,輸出。
(4)程序流程圖
a.全關(guān)系的選擇操作
開始掃描數(shù)據(jù)字典是否有該表?掃描數(shù)據(jù)文件并全部輸出結(jié)束 表3.4-1 b.實(shí)現(xiàn)單關(guān)系的投影操作
開始掃描數(shù)據(jù)字典是否有該表?是否有要投影的屬性否記錄要投影的屬性是第幾個(gè)掃描數(shù)據(jù)文件將該屬性值域輸出結(jié)束
表3.4-2 c.實(shí)現(xiàn)單關(guān)系的選擇操作(允許多條件)
是是否
開始掃描數(shù)據(jù)字典是否有該表?是記錄“where”條件并掃描是否掃描數(shù)據(jù)文件有與之匹配的元組?否輸出提示沒有符合條件的元組結(jié)束 表3,4-3 d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)
開始掃描數(shù)據(jù)字典是否有該表?是記錄要投影的屬性是第幾個(gè)否記錄“where”條件并掃描掃描數(shù)據(jù)文件有與之匹配的元組?否是選擇要投影的屬性值域提示沒有符合條件的元組提示沒有符合條件的元組輸出結(jié)束 表3.4-4(5)測試用例與實(shí)驗(yàn)結(jié)果
測試用例:
select s#,sname,age,sex from s where s.sname='qian'ands.age>19 實(shí)驗(yàn)結(jié)果:
測試用例:
select sname,age,sex from s where s.s#='s6'ands.age=18ors.sname='li' 實(shí)驗(yàn)結(jié)果:
測試用例: link s,sc base sc 實(shí)驗(yàn)結(jié)果:
測試用例: link s,c,sc base sc 實(shí)驗(yàn)結(jié)果:
3.5查詢優(yōu)化
(1)功能介紹
在做兩個(gè)表連接時(shí),先將需要用到的元組找到,并不做笛卡爾積,這在一定程度上減少了全部選擇的時(shí)間。
(2)相關(guān)理論
在做兩個(gè)表連接時(shí),需要名字及類型相同的屬性用一定的條件進(jìn)行匹配,如果在做笛卡爾積之前就用這些條件把要用到的元組選出來,既省空間又省時(shí)間。
(3)算法描述
首先查看表是否存在,若存在查找涉及到的屬性,記錄“where”后的條件,將兩個(gè)表中符合條件的元組都取出,將這些元組做連接。
(4)程序流程圖
開始是否存在該表?是是否有涉及到的屬性?是否記錄“where”后的條件否將符合條件的元組先選出連接結(jié)束
表3.5-1 3.6數(shù)據(jù)庫保護(hù)功能(1)功能介紹
此DBMS系統(tǒng)有兩種用戶:管理員,普通用戶。
(2)相關(guān)理論
a.插入元組、修改元組時(shí),匹配每個(gè)屬性的類型,如果類型及長度輸入有誤,則提示輸入錯(cuò)誤不寫入數(shù)據(jù)源文件,若符合條件,則查看基于每個(gè)屬性是否有索引文件,如果有,則重寫索引文件。
b.修改元組時(shí)也要判斷類型及長度是否匹配,也要重寫相應(yīng)的索引文件。c.每次做相應(yīng)操作前先考慮數(shù)據(jù)字典中是否有該表,是否有要查詢的屬性。
(3)算法描述
例如在做插入元組時(shí),首先查找數(shù)據(jù)字典有沒有待插入的表,如果有,則記錄每個(gè)屬性類型及長度,將待插入數(shù)據(jù)與屬性進(jìn)行一一比對,一旦有一個(gè)記錄不符合要求,也無法插入表中。
(4)程序流程圖
開始文本以“insert”開始查數(shù)據(jù)字典,記錄屬性名及類型掃描待插入的每個(gè)屬性與數(shù)據(jù)字典中的屬性比較char()int或float是否匹配或越界是否匹配不匹配或越界都匹配提示屬性類型輸入錯(cuò)誤寫入數(shù)據(jù)文件尾是否有索引文件有無重寫索引文件結(jié)束 表3.6-1
4、總結(jié)
通過對于DBMS系統(tǒng)的模擬,使我對于數(shù)據(jù)庫系統(tǒng)有了更深刻的理解,了解了每個(gè)表信息的存儲結(jié)構(gòu),以及數(shù)據(jù)字典的相關(guān)說明,也了解了主外鍵的意義與作用,也知道了插入元組的時(shí)候?qū)傩云ヅ鋯栴},以及對表的屬性域的修改等。通過編寫程序,讓我對表連接有了更加系統(tǒng)的認(rèn)識,也知道了在連接時(shí)先選出要查詢的元組更省時(shí)間,省空間。了解了怎樣存儲表信息才能既省空間又能保存表信息,沒有冗余情況。通過做實(shí)驗(yàn),我將理論與實(shí)踐有了更好的結(jié)合,不但提高了對理論的理解,更讓我對編程能力有了很好的鍛煉。
5、參考文獻(xiàn)
《數(shù)據(jù)庫系統(tǒng)原理》 李建中 王珊編著 電子工業(yè)出版社 《Java技術(shù)及其應(yīng)用》 王克宏 編著 高等教育出版社
第二篇:數(shù)據(jù)庫實(shí)驗(yàn)報(bào)告
數(shù)據(jù)庫實(shí)驗(yàn)報(bào)告
一、題目要求
某銀行準(zhǔn)備開發(fā)一個(gè)銀行業(yè)務(wù)管理系統(tǒng),通過調(diào)查,得到以下的主要需求:
銀行有多個(gè)支行。各個(gè)支行位于某個(gè)城市,每個(gè)支行有唯一的名字。銀行要監(jiān)控每個(gè)支行的資產(chǎn)。銀行的客戶通過其身份證號來標(biāo)識。銀行存儲每個(gè)客戶的姓名及其居住的街道和城市??蛻艨梢杂袔?,并且可以貸款??蛻艨赡芎湍硞€(gè)銀行員工發(fā)生聯(lián)系,該員工是此客戶的貸款負(fù)責(zé)人或銀行帳戶負(fù)責(zé)人。銀行員工也通過身份證號來標(biāo)識。員工分為部門經(jīng)理和普通員工,每個(gè)部門經(jīng)理都負(fù)責(zé)領(lǐng)導(dǎo)其所在部門的員工,并且每個(gè)員工只允許在一個(gè)部門內(nèi)工作。每個(gè)支行的管理機(jī)構(gòu)存儲每個(gè)員工的姓名、電話號碼、家庭地址及其經(jīng)理的身份證號。銀行還需知道每個(gè)員工開始工作的日期,由此日期可以推知員工的雇傭期。銀行提供兩類帳戶——儲蓄帳戶和支票帳戶。帳戶可以由2個(gè)或2個(gè)以上客戶所共有,一個(gè)客戶也可有兩個(gè)或兩個(gè)以上的帳戶。每個(gè)帳戶被賦以唯一的帳戶號。銀行記錄每個(gè)帳戶的余額、開戶的支行以及每個(gè)帳戶所有者訪問該帳戶的最近日期。另外,每個(gè)儲蓄帳戶有其利率,且每個(gè)支票帳戶有其透支額。每筆貸款由某個(gè)分支機(jī)構(gòu)發(fā)放,能被一個(gè)或多個(gè)客戶所共有。每筆貸款用唯一的貸款號標(biāo)識。銀行需要知道每筆貸款所貸金額以及逐次支付的情況(銀行將貸款分幾次付給客戶)。雖然貸款號不能唯一標(biāo)識銀行所有為貸款所付的款項(xiàng),但可以唯一標(biāo)識為某貸款所付的款項(xiàng)。對每次的付款需要記錄日期和金額。
二、需求分析
這一部分主要是根據(jù)實(shí)驗(yàn)需求對銀行系統(tǒng)需求中的實(shí)體、實(shí)體屬性以及實(shí)體之間的關(guān)聯(lián)進(jìn)行確認(rèn),以便畫出正確的概念模型。
2.1 實(shí)體確認(rèn)
根據(jù)需求分析確認(rèn)實(shí)體:銀行員工、銀行支行、客戶、賬戶(其中:儲蓄賬戶、支票賬戶是繼承實(shí)體賬戶而來)、貸款、支付(弱實(shí)體)。
2.2 實(shí)體屬性確認(rèn)
銀行員工:身份證號(pi)、姓名、電話號碼、家庭地址、開始工作日期 銀行支行:支行名、資產(chǎn)、城市
客戶:身份證號、姓名、街道、所在城市 賬戶:賬戶號、余額、最近訪問日期 支票賬戶:透支額 儲蓄賬戶:利率 2.3 實(shí)體關(guān)系確認(rèn)
賬戶和支行:N:1定義關(guān)系為Relationship_accout_bank 客戶和貸款:M:N定義關(guān)系為Relationship_client_loan 客戶和員工:M:1 定義關(guān)系為 Relation_client_staff 貸款和支行:1:N 定義關(guān)系為 Relationship_loan_bank 客戶和賬戶:M:N 定義關(guān)系為 client__accout 貸款發(fā)放信息和貸款:N:1 定義關(guān)系為 Relationship_loan_pay 支行和員工:1:N 定義關(guān)系為Relationship_staff_bank
員工和員工:1:N 定義關(guān)系為 Relationship_lead
三、概念模型(CDM)
根據(jù)sybase power designer畫出概念模型(CDM),如下圖所示:
四、物理模型(PDM)
根據(jù)概念模型轉(zhuǎn)化成物理模型(PDM),如下圖所示:
第三篇:數(shù)據(jù)庫實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)4SQL高級應(yīng)用
【實(shí)驗(yàn)?zāi)康摹?/p>
1、掌握在SQL SERVER 2005下進(jìn)行數(shù)據(jù)還原的方法。
2、掌握SQL語句的查詢統(tǒng)計(jì)功能和數(shù)據(jù)更改功能。
【實(shí)驗(yàn)內(nèi)容】
1.還原factory數(shù)據(jù)庫。
2.在factory數(shù)據(jù)庫上,完成如下各題。
(1)刪除factory數(shù)據(jù)庫上各個(gè)表之間建立的關(guān)系。(2)*顯示各職工的工資記錄和相應(yīng)的工資小計(jì)。
(3)*按性別和部門名的所有組合方式列出相應(yīng)的平均工資。
(4)在worker表中使用以下語句插入一個(gè)職工記錄。職工號:20;姓名:陳立;性別:女;出生日期:55/03/08;黨員否: 1;參加工作:75/10/10;部門號:4。
在depart表中使用以下語句插入一個(gè)部門記錄。部門號:5;部門名:設(shè)備處。對worker和depart表進(jìn)行全外連接顯示職工的職工號、姓名和部門名,然后刪除這兩個(gè)插入的記錄。
(5)顯示最高工資的職工的職工號、姓名、部門名、工資發(fā)放日期和工資。(6)顯示最高工資的職工所在的部門名。
(7)顯示所有平均工資低于全部職工平均工資的職工的職工號和姓名。(8)*采用游標(biāo)方式實(shí)現(xiàn)(6)小題的功能。(9)*采用游標(biāo)方式實(shí)現(xiàn)(7)小題的功能。
(10)*先顯示worker表中的職工人數(shù),開始一個(gè)事務(wù),插入一個(gè)職工記錄,再顯示worker表中的職工人數(shù),回滾該事務(wù),最后顯示worker表中的職工人數(shù)。
【實(shí)驗(yàn)報(bào)告要求】
1.第(1)寫出操作步驟。
2.其他各題寫出實(shí)現(xiàn)要求的命令/程序,并列出執(zhí)行結(jié)果。
【操作步驟】
1.還原factory數(shù)據(jù)庫。
2.在factory基礎(chǔ)上,有
(1)刪除factory數(shù)據(jù)庫上各個(gè)表之間建立的關(guān)系。
(2)*顯示各職工的工資記錄和相應(yīng)的工資小計(jì)。
Select 職工號,姓名,工資from salary Order by 職工號
Compute sum(工資)by 職工號
(3)*按性別和部門名的所有組合方式列出相應(yīng)的平均工資。
select worker.職工號,worker.性別,depart.部門名,avg(工資)as'平均工資' from worker inner join depart on worker.部門號=depart.部門號 inner join salary on worker.職工號=salary.職工號
group by worker.職工號,worker.性別,depart.部門名
order by worker.職工號
(4)在worker表中使用以下語句插入一個(gè)職工記錄。職工號:20;姓名:陳立;性別:女;出生日期:55/03/08;黨員否: 1;參加工作:75/10/10;部門號:4。
insert into worker values('20','陳立','女','1955-03-08','1','1975-10-10',4)
在depart表中使用以下語句插入一個(gè)部門記錄。部門號:5;部門名:設(shè)備處。
Insert into depart Values('5','設(shè)備處')對worker和depart表進(jìn)行全外連接顯示職工的職工號、姓名和部門名,然后刪除這兩個(gè)插入的記錄。
use factory Select b.部門號,c.姓名
from salary a,departb,worker c delete from worker where 職工號=20 delete from depart where 部門號=5(5)顯示最高工資的職工的職工號、姓名、部門名、工資發(fā)放日期和工資。
Use factory Select b.部門名,c.職工號,c.姓名,b.部門名,a.日期,a.工資 from salary a,departb,worker c Where 工資in(select max(a.工資)from salary a)and a.職工號=c.職工號and b.部門號=c.部門號(6)顯示最高工資的職工所在的部門名。
Use factory Select b.部門名from salary a,departb,worker c Where 工資in(select max(a.工資)from salary a)and c.部門號=b.部門號and a.職工號=c.職工號
(7)顯示所有平均工資低于全部職工平均工資的職工的職工號和姓名。
Use factory Select a.職工號,a.姓名,avg(b.工資)as平均工資from worker a,salary b where a.職工號=b.職工號 group by a.職工號,a.姓名
having avg(工資)<(select avg(工資)from salary)
第四篇:數(shù)據(jù)庫實(shí)驗(yàn)報(bào)告
南華大學(xué)
計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
實(shí)驗(yàn)報(bào)告
(2013 ~2014 學(xué)
第二學(xué)期)
課程名稱 實(shí)驗(yàn)名稱
數(shù)據(jù)庫原理與技術(shù)
姓名 張濤 學(xué)號 20124350230
專業(yè) 軟件工程
班級 02班
地點(diǎn)
教師 劉征海 實(shí)驗(yàn)1 認(rèn)識DBMS 一.實(shí)驗(yàn)題目
認(rèn)識DBMS 二.實(shí)驗(yàn)要求
1.利用管理工具創(chuàng)建數(shù)據(jù)庫、表和表間關(guān)系。
實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng) 基本操作,進(jìn)一步理解數(shù) 據(jù)庫、表、表間關(guān)系的概念。
注意事項(xiàng):創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表時(shí)應(yīng)認(rèn)真,如果出現(xiàn)錯(cuò)誤,應(yīng)相應(yīng)地修改結(jié)構(gòu)或刪除。三.實(shí)驗(yàn)代碼(內(nèi)容)
(1)利用SQL Server Management Studio 創(chuàng)建數(shù)據(jù)庫,名稱為【學(xué)生選課
YYXXXX】。其中YY為專業(yè)代號,計(jì)算機(jī)為JS,軟件工程為RJ,網(wǎng)絡(luò)為WL,數(shù)媒為
SM;XXXX為各位同學(xué)的學(xué)號中的最后四位 實(shí)驗(yàn)?zāi)康模菏煜QL Server Management Studio
(2)在【學(xué)生選課YYXXXX】中建立數(shù)據(jù)表,表的定義如下所示。
學(xué)生YYXXXX(學(xué)號,姓名,性別,出生日期,院系名稱,備注);
課程YYXXXX(課程號,課程名,先行課,學(xué)分); 選修YYXXXX(學(xué)號,課程號,分?jǐn)?shù))。
要求定義每張表的主碼,為屬性選擇合適的數(shù)據(jù)類型,決定是否允許為空,為【性別】和【學(xué)分】屬性定義默認(rèn)值。
(3)定義表之間的關(guān)系。
(4)分別為表錄入幾行數(shù)據(jù)記錄,同時(shí)練習(xí)數(shù)據(jù)的修改和刪除操作
2.利用SQL 語句創(chuàng)建數(shù)據(jù)庫、表和表間關(guān)系 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模菏煜?chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表的SQL 語句。
注意事項(xiàng):輸入SQL 語句時(shí)應(yīng)注意,語句中均使用西文操作符號。
實(shí)驗(yàn)內(nèi)容
在SQL Server Management Studio 中新建查詢,實(shí)現(xiàn)以下操作。(1)用SQL 語句創(chuàng)建數(shù)據(jù)庫,名稱為“StudentCourseYYXXXX”。其中YYXXXX 為各位同學(xué)的學(xué)號中的最后四位。
(2)用SQL 語句創(chuàng)建StudentCourseYYXXXX 中的3 張表,同時(shí)指定主碼、外 碼、默認(rèn)值等。
(3)直接在表數(shù)據(jù)窗口中錄入表數(shù)據(jù)記錄。
實(shí)驗(yàn) 2 交互式 SQL(1)
一、數(shù)據(jù)庫單表查詢 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模赫莆諉伪聿樵僑ELECT、FROM、WHERE 的用法,特別要掌握比較運(yùn) 算符、邏輯運(yùn)算符的使用。注意事項(xiàng):子句WHERE<條件>表示元組篩選條件;子句HAVING<條件>表示元
組選擇條件;子句HAVING<條件>必須和GROUP BY 子句配合使用;注意輸入SQL語句時(shí)均應(yīng)使用西文操作符號。實(shí)驗(yàn)內(nèi)容
(1)創(chuàng)建查詢窗口,設(shè)置查詢環(huán)境。(2)單表查詢 實(shí)驗(yàn)步驟
(1)選擇要查詢的數(shù)據(jù)庫,右擊【新建查詢】,或者選擇系統(tǒng)菜單中的【文
件】|【新建】|【使用當(dāng)前連接查詢】命令,或者單擊標(biāo)準(zhǔn)工具欄中的【新建查
詢】按鈕,即可新建一個(gè)查詢窗口。如果查詢數(shù)據(jù)庫不是StudentCourseYYXXXX,則可在可用數(shù)據(jù)庫下拉列表中進(jìn)行選擇,或用USE 語句調(diào)用。
(2)在查詢窗口中輸入SELECT 查詢語句,對StudentCourseYYXXXX 數(shù)據(jù)庫 進(jìn)行查詢操作。
① 查詢計(jì)算機(jī)系全體學(xué)生的信息
② 查詢姓“李”的學(xué)生的學(xué)號和姓名。
③ 查詢課程表中先行課為空的課程名。
④ 查詢考試成績有不及格的學(xué)生的學(xué)號。
⑤ 求選修了C1 課程或C2 課程的學(xué)生的學(xué)號及成績。
⑥ 查詢?nèi)w計(jì)算機(jī)系學(xué)生的姓名及其年齡。
⑦ 查詢計(jì)算機(jī)系在1986-1987 年之間出生的學(xué)生的姓名。
⑧ 查詢姓“李”的前兩個(gè)學(xué)生的學(xué)號和姓名。
⑨ 查詢選修了兩門以上課程的學(xué)生學(xué)號與課程數(shù)。
⑩ 查詢選修課程數(shù)大于等于2 的學(xué)生的學(xué)號、平均成績和選課門數(shù),并按平均成績降序排列。
二、數(shù)據(jù)庫多表連接查詢 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模豪斫舛啾聿樵兊母拍?;掌握多表查詢的SELECT、FROM、WHERE、JOIN子句的用法,特別要求比較內(nèi)連接、外連接的結(jié)果。
注意事項(xiàng):內(nèi)連接、左外連接和右外連接的含義及表達(dá)方法;注意輸入SQL 語 句時(shí)均應(yīng)使用西文操作符號。實(shí)驗(yàn)內(nèi)容
(1)創(chuàng)建查詢窗口,設(shè)置查詢環(huán)境。(2)多表復(fù)雜查詢。實(shí)驗(yàn)步驟
新建查詢窗口,選擇StudentCourseYYXXXX 為當(dāng)前數(shù)據(jù)庫,輸入如下SELECT 查詢語句并執(zhí)行,對數(shù)據(jù)庫進(jìn)行多表連接查詢操作。(1)查詢選修了【數(shù)據(jù)庫原理】的計(jì)算機(jī)系的學(xué)生學(xué)號和姓名。
(2)查詢每一門課的間接先行課(即先行課的先行課)。
(3)查詢學(xué)生的學(xué)號、姓名、選修課程的名稱和成績。
(4)查詢選修了課程的學(xué)生姓名。
(5)查詢所有學(xué)生的信息和所選修的課程。
(6)查詢已被選修的課程的情況和所有課程的名字。
(7)列出學(xué)生所有可能的選修情況。
(8)查找計(jì)算機(jī)系的學(xué)生選修課程數(shù)大于2 的學(xué)生的姓名、平均成績和選課 門數(shù),并按平均成績降序排列。
實(shí)驗(yàn) 3 交互式 SQL(2)數(shù)據(jù)庫嵌套查詢和組合查詢 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模赫莆詹樵冎星短撞樵兒徒M合查詢的操作方法,進(jìn)一步加深對 SELECT 語句的理解。
注意事項(xiàng):子句的使用;注意語句的層次嵌套關(guān)系和括號的配對使用問題;
注意輸入SQL 語句時(shí)均應(yīng)使用西文操作符號。實(shí)驗(yàn)內(nèi)容(1)創(chuàng)建查詢窗口,設(shè)置查詢環(huán)境。(2)分組查詢。(3)統(tǒng)計(jì)查詢。(4)嵌套查詢。實(shí)驗(yàn)步驟
新建查詢窗口,選擇StudentCourseYYXXXX 為當(dāng)前數(shù)據(jù)庫,輸入如下SELECT 查詢語句并執(zhí)行,對數(shù)據(jù)庫進(jìn)行嵌套查詢和組合查詢操作。
(1)統(tǒng)計(jì)選修了【數(shù)據(jù)庫原理】課程的學(xué)生人數(shù)。
(2)查詢沒有選修【數(shù)據(jù)庫原理】課程的學(xué)生信息。
(3)查詢其他系中比計(jì)算機(jī)系學(xué)生年齡都小的學(xué)生。
(4)查詢被0602001 學(xué)生或0602002 學(xué)生所選修的課程的課程號(用UNION 組合查詢與IN 條件查詢兩種方法實(shí)現(xiàn))。
(5)查詢0602001 學(xué)生和0602002 學(xué)生同時(shí)選修的課程的課程號(用
INTERSECT 組合查詢與EXISTS 嵌套子查詢兩種方法實(shí)現(xiàn))。
(6)查詢被0602001 學(xué)生選修,但沒有被0602002 學(xué)生所選修的課程的課程
號(用EXCEPT 組合查詢與NOT EXISTS 嵌套子查詢兩種方法實(shí)現(xiàn))。
實(shí)驗(yàn) 4 交互式 SQL(3)數(shù)據(jù)的更新 實(shí)驗(yàn)?zāi)康暮妥⒁馐马?xiàng)
實(shí)驗(yàn)?zāi)康模菏煜げ迦?、修改和刪除SQL 語句的用法。注意事項(xiàng):對于INSERT 語句,要求理解默認(rèn)值約束、空值約束在插入時(shí)所 起的作用。實(shí)驗(yàn)內(nèi)容
(1)使用INSERT 語句在數(shù)據(jù)庫的表中插入幾行記錄。(2)使用UPDATA 語句修改某個(gè)數(shù)據(jù)。(3)使用DELETE 語句刪除某行記錄。實(shí)驗(yàn)步驟
(1)新建查詢窗口,選擇StudentCourseYYXXXX 為當(dāng)前數(shù)據(jù)庫。
(2)在已建立StudentCourseYYXXXX 數(shù)據(jù)庫和StudentsYYXXXX、CoursesYYXXXX、SCYYXXXX 3 個(gè)表的基礎(chǔ)上,向StudentCourseYYXXXX數(shù)據(jù)庫中 的表更新數(shù)據(jù)。
① 向表StudentsYYXXXX 中插入(0601001,趙林, 男,1985-09-08,計(jì)算機(jī))的記錄。
② 向SCYYXXXX 表中添加一個(gè)學(xué)生的選課記錄,學(xué)號為0601001,所選的課
程號為C2。SC表中有Sno、Cno、Grade 這3 個(gè)列。這里只知道學(xué)號和課程號,不知道成績值。
③ 向表StudentsYYXXXX 中插入(0601002,張修雨,default)記錄,該記錄 的數(shù)據(jù)中default 表示默認(rèn)值‘男’,其他數(shù)據(jù)表示空值。
④ 用CREATE 語句建立表StudentBAK1YYXXXX,包含(與Students 的Sno、Sname、Sdept 相同)3 個(gè)字段,然后用INSERT SELECT 語句實(shí)現(xiàn)向
StudentBAK1YYXXXX 添加StudentsYYXXXX 表中的計(jì)算機(jī)系學(xué)生的學(xué)號、姓名、所在系的信息。
⑤ 用 SELECT...INTO 語句實(shí)現(xiàn)把StudentsYYXXXX 表中1986 年后(包含
1986 年)出生的學(xué)生的學(xué)號、姓名存儲到一個(gè)新表StudentBAK2YYXXXX。
⑥ 將姓名為【趙林】的同學(xué)的所在系改為【機(jī)電系】,愛好改為【足球】。
⑦ 將選修了課程名為【數(shù)據(jù)庫原理】的學(xué)生成績加5 分。⑧ 將StudentCourseYYXXXX
數(shù)據(jù)庫的StudentBAK1YYXXXX 表中所有姓趙的 同學(xué)刪除。
⑨ 刪除計(jì)算機(jī)系選修成績不及格的學(xué)生選修記錄。⑩ 將除。StudentCourseYYXXXX
數(shù)據(jù)庫的StudentBAK2YYXXXX 表中的所有行刪
四.實(shí)驗(yàn)總結(jié)
實(shí)驗(yàn)一要注意創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表時(shí)應(yīng)認(rèn)真,如果出現(xiàn)錯(cuò)誤,應(yīng)相應(yīng)地修改結(jié)構(gòu)或刪除。輸入SQL 語句時(shí)應(yīng)注意,語句中均使用西文操作符號;實(shí)驗(yàn)二應(yīng)注意注意group和having以及where的搭配使用的情況;實(shí)驗(yàn)三注意注意輸入SQL 語句時(shí)均應(yīng)使用西文操作符號,子句的使用,注意語句的層次嵌套關(guān)系和括號的配對使用問題;實(shí)驗(yàn)四注意輸入SQL 語句時(shí)均應(yīng)使用西文操作符號,對于INSERT 語句,要求理解默認(rèn)值約束、空值約束在插入時(shí)所起的作用。注意插入,修改,新建表,刪除語句的寫法,并且掌握把原表中的數(shù)據(jù)轉(zhuǎn)存到新表中的語句寫法。
第五篇:數(shù)據(jù)庫實(shí)驗(yàn)報(bào)告
10包三 李雅 100910306
實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)題目:
數(shù)據(jù)庫基本操作實(shí)驗(yàn)
二、實(shí)驗(yàn)?zāi)康模?/p>
掌握數(shù)據(jù)庫的建立、表的設(shè)計(jì)基本方法,通過實(shí)際操作熟練掌握數(shù)據(jù)庫的基本操作——數(shù)據(jù)的輸入與導(dǎo)入,表的設(shè)計(jì)。
三、實(shí)驗(yàn)內(nèi)容:
建立課程管理數(shù)據(jù)庫,要求:
1.輸入老師、開設(shè)課程、選課表、學(xué)生基本數(shù)據(jù)等,并輸入一些學(xué)生不同課程的考試成績。
2.建立查詢表,分別是成績查詢、學(xué)分查詢、不及格學(xué)生查詢。
3.建立窗體,分別顯示不及格學(xué)生的姓名、課程名稱、成績和班級ID。在成績查詢中顯示學(xué)生姓名及各科成績。在教師基本信息中顯示編號、職稱、工資、院系、等。同時(shí)建立開設(shè)課程表和學(xué)生基本信息的窗體查詢。提供用戶一個(gè)簡單的應(yīng)用程序界面,方便用戶操作使用。
4.制作報(bào)表。包括教師的授課報(bào)表,課程名稱及課程類別。學(xué)生的總成績報(bào)表,包括課程名稱、成績和學(xué)分。
注:課程及考試成績可以任意輸入。選課按照班級確定。
四、實(shí)驗(yàn)過程:
1、數(shù)據(jù)庫表設(shè)計(jì)
在表格內(nèi)填入教師基本信息、開始課程、課程基本信息、選課表、學(xué)生基本信息。
教師基本信息:
開設(shè)課程:
/ 7
10包三 李雅 100910306
課程基本信息:
選課表:
/ 7
10包三 李雅 100910306
學(xué)生基本信息:
2、查詢表: 成績查詢:
/ 7
10包三 李雅 100910306
學(xué)分查詢:
不及格學(xué)生查詢:
/ 7
10包三 李雅 100910306
3、窗體設(shè)計(jì): 不及格學(xué)生信息查詢:
成績查詢:
教師基本信息查詢:
開設(shè)課程信息查詢:
/ 7
10包三 李雅 100910306
學(xué)生基本信息查詢:
4、報(bào)表: 教師的授課報(bào)表:
/ 7
10包三 李雅 100910306
學(xué)生的總成績:
/ 7