當前位置:首頁 » 數據倉庫 » 實驗一資料庫設計
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

實驗一資料庫設計

發布時間: 2023-04-02 20:23:55

資料庫oracle實驗,隨便設計一個資料庫系統,急

這是讓我們幫你做作業嗎?

② 急!求個資料庫課程的設計!!

《資料庫原理及應用》課程設計

資料庫原理課程設計任務書
一、目的
1. 掌握計算機管理信息系統設計的一般方法,主要包括系統分析、系統設計的組織和實施。
2. 關系型資料庫管理系統的編程技術,並能獨立完成一般小系統的程序設計、調試運行等工作。
3. 培養把所學知識運用到具體對象,並能求出解決方案的能力。
二、任務(任選其一)
A.運用關系型資料庫管理系統,實現本院圖書館管理信息系統。具體要求如下:
—圖書、資料的登記、注銷和查詢。
—借書證管理,包括申請、注銷借書證,查詢借書證持有人等。
—借還圖書、資料的登記、超期處理,超期拒借等。
—圖書、資料查詢,借、還圖書和資料情況查詢。
—圖書、資料借閱情況的統計分析,拒此作為圖書館圖書、資料訂夠的依據之一。(本項不作為基本要求)
B. 運用關系型資料庫管理系統,實現服務電話管理系統
向客戶現場派技術人員的服務公司可以用服務電話管理系統跟蹤客戶、員工、工作訂單、發票、付款等等。
要求:
資料庫要存儲以下信息:
—客戶信息
—客戶工需單信息
—完成工需單所需人工
—完成工需單所需部件
—部件信息
—付款信息
—雇員信息
完成的功能:
—輸入/查看 客戶工需單信息
—輸入/查看部件、雇員等其它信息
—付款
—列印發票等
三、結果形式
1. 設計報告:含E-R圖、數據字典、關系模式、關系實例、查詢描述、關系代數、SQL實現的查詢語言及查詢結果。
2. 上機實現。
四、考核
1. 課程設計態度(20分)。
2. 遞交的書面材料(40分)。
3. 上機運行情況(40分)

目錄
1.問題描述 2
1.1背景 2
1.2數據需求 2
1.3事物需求 3
1.4關系模式 3
2.方案圖表設計 3
2.1 E-R圖 3
2.2數據流程圖 8
2.3數據字典 9
2.4關系圖: 11
3.資料庫源代碼 12
3.1資料庫建立 12
3.2數據初始化 14
4.結果數據處理 17
4.1單表查詢 17
4.2超期處理 19
4.3還書操作 20
4.4借書操作 22
4.5書籍狀態 24
4.6讀者狀態 24
5.結束語 26
5.1課程設計心得 26

1.問題描述
1.1背景
隨著圖書館規模的不斷擴大,圖書數量也相應的增加,有關圖書的各種信息量也成倍增加,面對著龐大的信息量,傳統的人工方式管理會導致圖書館管理上的混亂,人力與物力過多浪費,圖書館管理費用的增加,從而使圖書館的負擔過重,影響整個圖書館的運作和控制管理,因此,必須制定一套合理、有效,規范和實用的圖書管理系統,對圖書資料進行集中統一的管理。
另一方面,IT產業和Internet獲得了飛速發展,計算機應用已滲透到了各個領域,引起信息管理的革命,實現了信息的自動化處理,提高了處理的及時性和正確性。
提高圖書管理工作效率,作到信息的規范管理,科學統計和快速查詢,讓圖書館更好的為學校,社會服務。

1.2數據需求
圖書館管理信息系統需要完成功能主要有:
1. 讀者基本信息的輸入,包括借書證編號、讀者姓名、讀者性別。
2.讀者基本信息的查詢、修改,包括讀者借書證編號、讀者姓名、讀者性別等。
3.書籍類別標準的制定、類別信息的輸入,包括類別編號、類別名稱。
4.書籍類別信息的查詢、修改,包括類別編號、類別名稱。
5.書籍庫存信息的輸入,包括書籍編號、書籍名稱、書籍類別、作者姓名、出版社名稱、出版日期、登記日期。
6.書籍庫存信息的查詢,修改,包括書籍編號、書籍名稱、書籍類別、作者姓名、出版社名稱、出版日期登記日期等。
7.借書信息的輸入,包括讀者借書證編號、書籍編號、借書日期。
8.借書信息的查詢、修改,包括借書證編號、讀者編號、讀者姓名、書籍編號、書籍名稱、借書日期等。
9.還書信息的輸入,包括借書證編號、書籍編號、還書日期。
10.還書信息的查詢和修改,包括還書讀者借書證編號、讀者姓名、書籍編號、書籍名稱、借書日期、還書日期等。
11.超期還書罰款輸入,還書超出期限包括超出期限還書的讀者借書證號,書籍編號,罰款金額。
12.超期還書罰款查詢,刪除,包括讀者借書證編號、讀者姓名、書籍編號、書籍名稱,罰款金額等
1.3事物需求
(1)在讀者信息管理部分,要求:
a.可以查詢讀者信息。
b.可以對讀者信息進行添加及刪除的操作。
(2 )在書籍信息管理部分,要求:
a.可以瀏覽書籍信息,要求:
b.可以對書籍信息進行維護,包括添加及刪除的操作。
(3)在借閱信息管理部分,要求:。
a.可以瀏覽借閱信息。
b.可以對借閱信息進行維護操作。
(4)在歸還信息管理部分,要求:
a.可以瀏覽歸還信息
b.對歸還信息可修改維護操作
(5)在管理者信息管理部分,要求:
a.顯示當前資料庫中管理者情況。
b.對管理者信息維護操作。
(6)在罰款信息管理部分,要求:
a.可以瀏覽罰款信息
b.對罰款信息可以更新

1.4關系模式
(一) 書籍類別(種類編號,種類名稱)
(二) 讀者(借書證編號,讀者姓名,讀者性別,讀者種類,登記時期)
(三) 書籍(書籍編號,書籍名稱,書籍類別,書記作者,出版社名稱,出版日期,登記日期)
(四) 借閱(借書證編號,書籍編號,讀者借書時間)
(五) 還書(借書證編號,書籍編號,讀者還書時間)
(六) 罰款(借書證編號,讀者姓名,借書證編號,書籍編號,讀者借書時間)
以上通過關系代數方法的進行運算得到所需要的結果,在實驗結果中可以看到。

2.方案圖表設計
2.1 E-R圖
根據1)所要實現的功能設計,可能建立它們之間的關系,進而實現邏輯結構功能。
圖書管理信息系統可以劃分的實體有:書籍類別信息實體、讀者信息實體、書籍信息實體、借閱記錄信息實體,歸還記錄信息實體。用E-R圖一一描述這些實體。

2.1.1類別實體E-R圖:

圖2-1類別實體E-R圖

2.1.2讀者信息實體E-R圖:

圖2-2 讀者信息實體E-R圖

2.1.3信息實體E-R圖:

圖2-3信息實體E-R圖

2.1.4.記錄信息實體E-R圖:

圖2-4 記錄信息實體E-R圖

2.1.5記錄信息實體E-R圖:

圖2-5記錄信息實體E-R圖

2.1.6罰款信息實體E-R圖:

圖2-6罰款信息實體E-R圖

2.1.6總的信息實體E-R圖:

圖2-7總的信息實體E-R圖

2.2數據流程圖

D5

歸還信息錄入 基本信息錄入
D2
D1

基本信息錄入 基本信息錄入
D3

D4

借閱信息錄入
讀者信息返回 書籍信息返回

圖2-7系統的數據流程圖

2.3數據字典
表2-1 book_sytle 書籍類別信息表
表中列名 數據類型 可否為空 說明
bookstyleno varchar not null(主鍵) 種類編號
bookstyle Varchar not null 種類名稱

表2-2 system_readers讀者信息表格
表中列名 數據類型 可否為空 說明
readerid varchar not null(主鍵) 讀者借書證號
readername varchar not null 讀者姓名
readersex varchar not null 讀者性別
readertype varchar null 讀者種類
regdate datetime null 登記日期

表2-3 system_book書籍信息表
表中列名 數據類型 可否為空 說明
bookid Varchar Not null(主鍵) 書籍編號
bookname Varchar Not null 書籍名稱
bookstyle Varchar Not null 書籍類別
bookauthor Varchar Not null 書籍作者
bookpub Varchar Null 出版社名稱
bookpubdate Datetime Null 出版日期
bookindate Datetime Null 登記日期
isborrowed Varchar Not Null 是否被借出

表2-4 borrow_record 借閱記錄信息表
表中列名 數據類型 可否為空 說明
readerid Varchar Not null(外主鍵) 讀者借閱證編號
bookid Varchar Not null(外主鍵) 書籍編號
borrowdate Varchar Not null 讀者借書時間

表2-5 return_record 借閱記錄信息表
表中列名 數據類型 可否為空 說明
readername Varchar Not null(外主鍵) 讀者借閱證編號
readerid Varchar Not null(外主鍵) 書籍編號
returndate datetime Not null 讀者還書時間

表2-6 reader_fee 罰款記錄信息表
readerid varchar Not null 讀者借書證編號
readername varchar Not null 讀者姓名
bookid varchar Not null(外主鍵) 書籍編號
bookname varchar Not null 書籍名稱
bookfee varchar Not Null 罰款金額
borrowdate datetime Not Null 借閱時間

2.4關系圖:

圖2-8資料庫存表關系圖

3.資料庫源代碼
3.1資料庫建立

3.1.1創建資料庫
USE master
GO
CREATE DATABASE librarysystem
ON
( NAME = librarysystem,
FILENAME = 'd:\librarysystem.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'library',
FILENAME = 'd:\librarysystem.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO

3.1.2書本類別表建立
create table book_style
(
bookstyleno varchar(30) primary key,
bookstyle varchar(30)
)

3.1.3創建書庫表
create table system_books
(
bookid varchar(20) primary key,
bookname varchar(30) Not null,
bookstyleno varchar(30) Not null,
bookauthor varchar(30),
bookpub varchar(30) ,
bookpubdate datetime,
bookindate datetime ,
isborrowed varchar (2) ,
foreign key (bookstyleno) references book_style (bookstyleno),
)

3.1.4借書證表建立
create table system_readers
( readerid varchar(9)primary key,
readername varchar(9)not null ,
readersex varchar(2) not null,
readertype varchar(10),
regdate datetime
)

3.1.5借書記錄表建立
create table borrow_record
( bookid varchar(20) primary key,
readerid varchar(9),
borrowdate datetime,

foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid),
)

3.1.6還書記錄表建立
create table return_record
( bookid varchar(20) primary key,
readerid varchar(9),
returndate datetime,
foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid)
)

3.1.7罰款單表建立*/

create table reader_fee
( readerid varchar(9)not null,
readername varchar(9)not null ,
bookid varchar(20) primary key,
bookname varchar(30) Not null,
bookfee varchar(30) ,
borrowdate datetime,
foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid)

)

3.2數據初始化

3.2.1將書籍類別加入表book_style中
insert into book_style(bookstyleno,bookstyle)values('1','人文藝術類')
insert into book_style(bookstyleno,bookstyle)values('2','自然科學類')
insert into book_style(bookstyleno,bookstyle)values('3','社會科學類')
insert into book_style(bookstyleno,bookstyle)values('4','圖片藝術類')
insert into book_style(bookstyleno,bookstyle)values('5','政治經濟類')
insert into book_style(bookstyleno,bookstyle)values('6','工程技術類')
insert into book_style(bookstyleno,bookstyle)values('7','語言技能類')

3.2.2將已有的圖書加入system_books表中(定義相同的作者出版社的書本編號不一樣)
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )
values('00125415152','計算機組成原理','6','王愛英','清華大學出版社','2001-01-03','2003-11-15','1');

insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )
values('00125415153','計算機組成原理','6','王愛英','清華大學出版社','2001-01-03','2003-11-15','1');

insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('00456456','資料庫原理','6','薩師煊','高等教育出版社','2007-07-02','2007-09-15','1');

insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )
values('12215121','C程序設計','6','譚浩強','清華大學出版社','2002-04-02','2004-03-14','1');

insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('9787308020558','計算機體系結構','6','石教英','浙江大學出版社','2004-10-03','2006-11-15','1');

insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('45456141414','數據結構(C語言版)','6','吳偉民,嚴蔚敏','清華大學出版社','2002-06-28','2004-01-21','1');

insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('5455515','中華歷史5000年','1','吳強','北京大學出版社','2005-04-03','2006-05-15','1');

insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )

values('015115','古代埃及','3','趙文華','北京大學出版社','2001-02-02','2002-09-15','1');

insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )

values('1514514','日本文化','1','吳小鵬','北京大學出版社','2002-04-02','2004-03-14','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )

values('15154656','微觀經濟學','5','李小剛','北京大學出版社','2000-10-03','2001-11-15','1');
insert
into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('5658','影視文學','4','蘇慶東','北京大學出版社','1999-02-28','2000-01-21','1');

insert into
system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )
values('565800020','探索宇宙奧秘','2','蘇慶東','北京大學出版社','1999-02-28','2000-01-21','1');

3.2.3將已有圖書證的讀者加入system_readers表中*/
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620207','陳遠鵬','男','學生','2005-9-23 14:23:56')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620206','陳特','男','學生','2005-09-30 13:24:54.623')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620204','趙銘靜','女','學生','2005-09-27 11:24:54.123')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620202','潘虹','女','學生','2005-09-30 13:24:54.473')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('008415','蔣偉','男','教師','2004-04-30 09:24:54.478')
insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('001456','李葉風','女','教師','2004-04-30 09:24:54.478')

3.2.4添加已借書讀者的記錄,同時將在已借出的借閱標記置0*/
insert into borrow_record(bookid,readerid,borrowdate)
values('00125415152','X05620202','2007-09-27 11:24:54.123')
update system_books
set isborrowed=0
where bookid='00125415152'

insert into borrow_record(bookid,readerid,borrowdate)
values('00125415153','X05620206','2007-12-27 08:26:51.452')
update system_books
set isborrowed=0
where bookid='00125415153' and isborrowed='1'

insert into borrow_record(bookid,readerid,borrowdate)
values('5455515','X05620207','2007-12-27 08:26:51.452')
update system_books
set isborrowed=0
where bookid='5455515' and isborrowed='1'

insert into borrow_record(bookid,readerid,borrowdate)
values('015115','X05620204','2007-10-21 12:11:51.452')
update system_books
set isborrowed=0
where bookid='015115' and isborrowed='1'

insert into borrow_record(bookid,readerid,borrowdate)
values('15154656','001456','2007-12-28 14:11:51.312')
update system_books
set isborrowed=0
where bookid='15154656' and isborrowed='1'

insert into borrow_record(bookid,readerid,borrowdate)
values('565800020','008415','2007-08-28 15:11:31.512')
update system_books
set isborrowed=0
where bookid='565800020' and isborrowed='1'

4.結果數據處理
4.1單表查詢
4.1.1表book_style中查詢演示:

圖4-1 表book_style中內容

4.1.2表system_books中查詢演示:

圖4-2 表system_books中內容

4.1.3將已有圖書證的讀者加入system_readers表中結果查詢:

圖4-3 表system_readers中內容

4.1.4借書紀錄表borrow_record結果查詢:

圖4-4 表borrow_record中內容

4.2超期處理
4.2.1現在對已有借書證的讀者進行查詢借書是否超期(這里歸定30天):

說明:當前的getdate()以日期為2008年1月6日計算

圖4-4 選出借出超過30天的讀者

4.2.2同時也可以用語句超過天數的讀者進行罰款,加入到罰款單裡面,一天以0.3元扣除計算:

SQL語言:
insert into reader_fee(readerid,readername,bookid,bookname,bookfee,borrowdate)
select system_readers.readerid 讀者借書證編號 ,readername 讀者姓名,
system_books.bookid 書籍編號,bookname 書名,
0.3*(Datediff(day,convert(smalldatetime,borrowdate),getdate())-30) 超過時間天數,
borrowdate 借書時間
from borrow_record ,system_readers ,system_books
where system_readers.readerid=borrow_record.readerid
and system_books.bookid=borrow_record.bookid
and Datediff(day,convert(smalldatetime,borrowdate),getdate())>=30
(所影響的行數為 3 行)
select readerid 書讀者借書證編號,readername 讀者姓名,
bookid 書籍編號,bookfee 超期罰款
from reader_fee
形成各本書對應的罰款金額,按0.3元每天算

圖4-5查看罰款單

4.3還書操作
4.3.1現在對某一讀者進行還書操作:

1.首先還書要在還書紀錄中添加一條還書紀錄
2.其次刪除相應書本的借閱紀錄
3.最後在書庫中標記該本書為1,表示歸還了未借,可供其他讀者借閱
說明:學號為X05620207 姓名為陳遠鵬 借閱的565800020書籍編號進行歸還。

SQL語言:
insert into return_record(bookid,readerid,returndate)
select bookid,readerid,getdate()
from borrow_record
where bookid='565800020'
(所影響的行數為 1 行)

delete
from borrow_record
where bookid='565800020'
(所影響的行數為 1 行)

update system_books
set isborrowed=1
where bookid='565800020'
(所影響的行數為 1 行)

三個表的結果如圖:

圖4-6 增加了565800020紀錄

圖4-7 565800020這本書在借書紀錄里沒有了

圖4-8 標記設為了『1』

說明:這本書重新回到未被借出標記為1(注,相同的書其編號是不同的)

其結果為還書成功,相應的各表都有變化,對於罰款單通過借閱記錄表borrow_record中更新。

4.4借書操作
4.4.1查詢未被借出的書本:

圖4-9

4.4.2查詢已被借出的書本:

圖4-10

4.4.3申請借書證:

SQL語言:
Insert into system_readers(readerid,readername,readersex,readertype,regdate)
values('X05620211','小華','男','學生',getdate())

圖4-11

說明:查詢相應的紀錄增加了小華這樣一個讀者的借書證紀錄:

4.4.4注銷借書證:

說明:
1.在注銷之前執行所有的還書過程,就是上面寫到的所述SQL語句,然後執行
delete from system_readers where readerid=' X05620211',
2.小華借書證紀錄就被刪除了,同時要刪除和小華歸還紀錄的內容
delete from return_record where readerid=' X05620211',

4.4.5查詢所有書所對應的類別:

圖4-12
4.5書籍狀態
4.5.1查詢所有工技術類的書:

圖4-13

4.5.2查詢清華大學出版社出版的書:

圖4-14
4.6讀者狀態
4.6.1查詢什麼人借了什麼書:

SQL語言:
select readername 讀者姓名,bookname 書籍名稱
from borrow_record,system_books,system_readers
where system_readers.readerid=borrow_record.readerid
and system_books.bookid=borrow_record.bookid

圖4-15

4.6.2指定潘虹借了什麼書:

SQL語言:
select readername 讀者姓名,bookname 書籍名稱
from borrow_record,system_books,system_readers
where system_readers.readerid=borrow_record.readerid
and system_books.bookid=borrow_record.bookid
and readername='潘虹'

圖4-16

5.結束語
5.1課程設計心得
通過此次資料庫的課程設計,真正達到了學與用的結合,增強了對資料庫方面應用的理解,對自己今後參與開發資料庫系統積累了不少經驗,在實驗過程中,從建立數據開始,對靈據庫設計理念及思想上有更高的認識,從需求分析,到概念設計和邏輯設計,E-R圖的表示,數據字典的創建,懂得了不少有關資料庫開發過程中的知識,在實驗中建表,及其關系模式,關系代數的建立及理解,將SQL語的查詢語句用得淋漓盡致,增強了自己在資料庫中應用SQL語言的靈活性,其中包括,插入、刪除、修改、查詢,牽涉表和表之間的聯系,主建與外主鍵的定義,約束項的設置,使邏輯更嚴密,在學習過程中,我也能過上網查了不少資料,也看了一些別人設計的圖書館管理信息系統的設計報告,學以致用,自我創新,獨立完成了這份自己的報告,從中在學到用,從用又到學,不斷修改,系統更新。雖然不能達到完善系統,但也做到了盡善盡美,加強理論學習對完善系統會有很多幫助,不管怎麼說,對這次做的課程設計自己覺得還算滿意。

③ 資料庫程序設計1-5章實驗

姚津泓實驗作業網頁鏈接可以看看

--實驗一

create database test1

on

(name=test1,

filename='d:3116004357姚津泓 est1.mdf',

size=10,

maxsize=50,

filegrowth=5)

log on

(name=test1_log,

filename='d:3116004357姚津泓 est1.ldf',

size=5mb,

maxsize=25mb,

filegrowth=5mb)

create database test2

on

(name=test11,

filename='d:3116004357姚津泓 est11.mdf',

size=10,

maxsize=50,

filegrowth=5),

(name=test22,

filename='d:3116004357姚津泓 est22.ndf',

size=10,

maxsize=50,

filegrowth=5),

(name=test33,

filename='d:3116004357姚津泓 est33.ndf',

size=10,

maxsize=50,

filegrowth=5)

log on

(name=test11_log,

filename='d:3116004357姚津泓 est11.ldf',

size=5mb,

maxsize=25mb,

filegrowth=5mb),

(name=test22_log,

filename='d:3116004357姚津泓 est22.ldf',

size=5mb,

maxsize=25mb,

filegrowth=5mb)

create database test3

on

(name=dab1,

filename='d:3116004357姚津泓dab1.mdf',

size=10,

maxsize=50,

filegrowth=5),

filegroup fg11 --第一個文件組

(name=dab2,

filename='d:3116004357姚津泓dab2.ndf',

size=10,

maxsize=50,

filegrowth=5),

filegroup fg22 --第二個文件組

(name=dat1,

filename='d:3116004357姚津泓dat1.ndf',

size=10,

maxsize=50,

filegrowth=5),

(name=dat2,

filename='d:3116004357姚津泓dat2.ndf',

size=10,

maxsize=50,

filegrowth=5),

filegroup fg33--第三個文件組

(name=daz1,

filename='d:3116004357姚津泓daz1.ndf',

size=10,

maxsize=50,

filegrowth=5),

(name=daz2,

filename='d:3116004357姚津泓daz2.ndf',

size=10,

maxsize=50,

filegrowth=5)

alter database test1

add file

(name=te,

filename='d:3116004357姚津泓 e.ndf',

size=10,

maxsize=50,

filegrowth=5

)

alter database test2

modify file

(name=test11,

filename='d:3116004357姚津泓 est11.mdf',

maxsize=55

)

drop database test1

--實驗2--

create database 實驗

create schema yaojinhong

create table yaojinhong.倉庫

(

倉庫號char(6)primary key check (倉庫號like'[A-Z][A-Z][0-9][0-9][0-9][0-9]'),

城市char(10) unique not null,

面積 int check(面積>=50)

)

create table yaojinhong.職工

(

職工號char(8)primary key check (職工號like'[A-Z][A-Z][0-9][0-9][0-9][0-9][0-9][0-9]'),

倉庫號char(6)constraint ck foreign key references yaojinhong.倉庫(倉庫號),

工資 money check (工資>=1000 and 工資<=10000)

)

create table yaojinhong.供應商

(

供應商號 char(4)primary key check (供應商號like'[S][0-9][0-9][0-9]'),

供應商名 char(16),

地址char(30),

)

create table yaojinhong.訂購單

(職工號 char(8) not null foreign key references yaojinhong.職工.(職工號),

供應商號 char(4) null constraint supply foreign key references yaojinhong.供應商(供應商號) on delete set null,

訂購單號 char(6) primary key check(訂購單號 like 'OR[0-9][0-9][0-9][0-9]'),

訂購日期 datetime default getdate(),

金額 money default null

)

create table yaojinhong.訂購單明細

(訂購單號 char(6) not null foreign key references yaojinhong.訂購單(訂購單號),

序號 char(2),

產品名稱 char(20),

單價 money default null check(單價>0),

數量 int not null check(數量>0),

primary key(訂購單號,序號)

)

alter table yaojinhong.訂購單

add 完成日期 datetime default null

alter table yaojinhong.訂購單明細

add check(數量 between 0 and 1000)

alter table yaojinhong.訂購單明細

alter column 數量 int not null alter table yaojinhong.供應商

alter column 供應商名 varchar(30)

實驗3

insert into yaojinhong.倉庫 values('QW0001','廣州',500)

insert into yaojinhong.倉庫 values('QW0002','上海',900)

insert into yaojinhong.倉庫 values('QW0003','北京',250)

insert into yaojinhong.倉庫 values('QW0004','紐約',1000)

insert into yaojinhong.倉庫 values('QW0005','深圳',650)

insert into yaojinhong.職工 values('ZG000001','QW0005',3000)

insert into yaojinhong.職工 values('ZG000002','QW0001',5600)

insert into yaojinhong.職工 values('ZG000003','QW0004',6600)

insert into yaojinhong.職工 values('ZG000004','QW0002',3800)

insert into yaojinhong.職工 values('ZG000005','QW0005',3900)

insert into yaojinhong.職工 values('ZG000006','QW0001',4600)

insert into yaojinhong.職工 values('ZG000007','QW0003',4000)

insert into yaojinhong.職工 values('ZG000008','QW0003',5000)

insert into yaojinhong.職工 values('ZG000009','QW0002',4800)

insert into yaojinhong.職工 values('ZG000010','QW0004',6000)

insert into yaojinhong.供應商 values('S001','華廣','深圳')

insert into yaojinhong.供應商 values('S002','廣工','廣州')

insert into yaojinhong.供應商 values('S003','美的','茂名')

insert into yaojinhong.供應商 values('S004','樂視','深圳')

insert into yaojinhong.供應商 values('S005','康佳','廣州')

insert into yaojinhong.訂購單 values('ZG000007','S005','OR0001','2015-1-6',5000,'2015-2-5')

insert into yaojinhong.訂購單 values('ZG000002','S001','OR0002','2015-2-3',10000,'2015-3-4')

insert into yaojinhong.訂購單 values('ZG000003','S004','OR0003','2015-2-17',3000,'2015-5-16')

insert into yaojinhong.訂購單 values('ZG000006','S002','OR0004','2015-2-16',9000,'2015-4-18')

insert into yaojinhong.訂購單 values('ZG000010','S005','OR0005','2015-3-20',8000,'2015-6-27')

insert into yaojinhong.訂購單 values('ZG000001','S001','OR0006','2015-3-22',7500,'2015-7-29')

insert into yaojinhong.訂購單 values('ZG000006','S003','OR0021','2015-2-15',4600,'2015-10-13')

insert into yaojinhong.訂購單 values('ZG000004','S002','OR0007','2015-2-23',8500,'2015-8-29')

insert into yaojinhong.訂購單 values('ZG000003','S005','OR0008','2015-1-5',3600,'2015-11-11')

insert into yaojinhong.訂購單 values('ZG000001','S004','OR0009','2015-1-31',7600,'2015-12-14')

insert into yaojinhong.訂購單 values('ZG000007','S001','OR0010','2015-3-25',12000,'2015-7-30')

insert into yaojinhong.訂購單 values('ZG000008','S002','OR0011','2015-2-26',4600,'2015-9-27')

insert into yaojinhong.訂購單 values('ZG000010','S002','OR0012','2015-1-28',3400,'2015-11-21')

insert into yaojinhong.訂購單 values('ZG000009','S004','OR0013','2015-3-19',2300,'2015-10-24')

insert into yaojinhong.訂購單 values('ZG000007','S005','OR0014','2015-2-23',9000,'2015-9-21')

insert into yaojinhong.訂購單 values('ZG000008','S003','OR0015','2015-2-27',6400,'2015-12-23')

insert into yaojinhong.訂購單 values('ZG000002','S001','OR0016','2015-1-30',7900,'2015-6-30')

insert into yaojinhong.訂購單 values('ZG000005','S004','OR0017','2015-1-27',20000,'2015-8-18')

insert into yaojinhong.訂購單 values('ZG000009','S004','OR0018','2015-3-5',13000,'2015-7-31')

insert into yaojinhong.訂購單 values('ZG000004','S002','OR0019','2015-3-14',7000,'2015-6-17')

insert into yaojinhong.訂購單 values('ZG000006','S005','OR0020','2015-2-21',4300,'2015-5-25')

insert into yaojinhong.訂購單明細 values('OR0020','01','沐浴露',32,240)

insert into yaojinhong.訂購單明細 values('OR0001','02','洗衣粉',30,125)

insert into yaojinhong.訂購單明細 values('OR0012','03','洗衣液',39,59)

insert into yaojinhong.訂購單明細 values('OR0014','04','香皂',14,99)

insert into yaojinhong.訂購單明細 values('OR0004','05','鹽',2,169)

insert into yaojinhong.訂購單明細 values('OR0005','06','醬油',14,65)

insert into yaojinhong.訂購單明細 values('OR0011','07','化妝品',26,24)

insert into yaojinhong.訂購單明細 values('OR0019','08','洗面奶',39,68)

insert into yaojinhong.訂購單明細 values('OR0008','09','面膜',5,147)

insert into yaojinhong.訂購單明細 values('OR0003','10','花生油',36,258)

insert into yaojinhong.訂購單明細 values('OR0017','11','滑鼠',69,72)

insert into yaojinhong.訂購單明細 values('OR0015','12','滑鼠墊',18,64)

insert into yaojinhong.訂購單明細 values('OR0016','13','移動電源',58,69)

insert into yaojinhong.訂購單明細 values('OR0012','14','插座',37,169)

insert into yaojinhong.訂購單明細 values('OR0011','15','牛奶',72,111)

insert into yaojinhong.訂購單明細 values('OR0020','16','洗潔精',9,114)

insert into yaojinhong.訂購單明細 values('OR0019','17','潔廁液',6,300)

insert into yaojinhong.訂購單明細 values('OR0010','18','雞蛋',14,124)

insert into yaojinhong.訂購單明細 values('OR0009','19','牛肉',38,300)

insert into yaojinhong.訂購單明細 values('OR0016','20','內褲',59,654)

insert into yaojinhong.訂購單明細 values('OR0018','21','鞋子',299,300)

insert into yaojinhong.訂購單明細 values('OR0015','22','手錶',890,34)

insert into yaojinhong.訂購單明細 values('OR0005','23','錢包',129,124)

insert into yaojinhong.訂購單明細 values('OR0008','24','行李箱',344,64)

insert into yaojinhong.訂購單明細 values('OR0014','25','手袋',3,874)

insert into yaojinhong.訂購單明細 values('OR0018','26','籃球',360,59)

insert into yaojinhong.訂購單明細 values('OR0003','27','足球',260,36)

insert into yaojinhong.訂購單明細 values('OR0005','28','羽毛球拍',78,69)

insert into yaojinhong.訂購單明細 values('OR0007','29','乒乓球拍',89,145)

insert into yaojinhong.訂購單明細 values('OR0020','30','羽毛球',5,645)

insert into yaojinhong.訂購單明細 values('OR0013','31','乒乓球',3,542)

insert into yaojinhong.訂購單明細 values('OR0016','32','牙膏',23,200)

insert into yaojinhong.訂購單明細 values('OR0009','33','牙刷',6,456)

insert into yaojinhong.訂購單明細 values('OR0019','34','防曬霜',56,65)

insert into yaojinhong.訂購單明細 values('OR0017','35','水杯',39,1187)

insert into yaojinhong.訂購單明細 values('OR0010','36','拖把',15,187)

insert into yaojinhong.訂購單明細 values('OR0004','37','掃把',6,200)

insert into yaojinhong.訂購單明細 values('OR0005','38','垃圾桶',16,254)

insert into yaojinhong.訂購單明細 values('OR0006','39','書',46,688)

insert into yaojinhong.訂購單明細 values('OR0016','40','衛生紙',13,500)

insert into yaojinhong.訂購單明細 values('OR0020','41','相機',3698,32)

insert into yaojinhong.訂購單明細 values('OR0013','42','手機',2000,200)

insert into yaojinhong.訂購單明細 values('OR0017','43','音響',500,143)

insert into yaojinhong.訂購單明細 values('OR0001','44','吸塵器',1688,40)

insert into yaojinhong.訂購單明細 values('OR0012','45','油煙機',3500,10)

insert into yaojinhong.訂購單明細 values('OR0010','46','台式電腦',4000,25)

insert into yaojinhong.訂購單明細 values('OR0013','47','空調',50,230)

insert into yaojinhong.訂購單明細 values('OR0005','48','電視機',1300,100)

insert into yaojinhong.訂購單明細 values('OR0016','49','洗衣機',3400,15)

insert into yaojinhong.訂購單明細 values('OR0011','50','筆記本',6000,20)

insert into yaojinhong.倉庫 values('QW0001','惠州',600)

原因:違反了PRIMARY KEY 約束'PK__倉庫__530C599C7F60ED59'。不能在對象'yaojinhong.倉庫' 中插入重復鍵。語句已終止。

insert into yaojinhong.職工 values('ZG000011','QW0009',3000)

原因:倉庫號列參照倉庫表的倉庫號,此時在倉庫表中找不到倉庫號為QW0009的倉庫。INSERT 語句與FOREIGN KEY 約束"FK__職工__倉庫號__0AD2A005"沖突。該沖突發生於資料庫"實驗",表"yaojinhong.倉庫", column '倉庫號'。

insert into yaojinhong.倉庫 values('QW0006','天津',30)

原因:在定義時,面積要大於等於50,這裡面積為30,明顯違反了用戶定義完整性

delete yaojinhong.倉庫 where 城市='北京'

刪除操作失敗。因為有職工參照了干記錄

delete yaojinhong.供應商 where 供應商號='S002'

因為刪除參照完整性規則定義為set null

alter table yaojinhong.職工

drop constraint ck

alter table yaojinhong.職工

drop column 倉庫號

alter table yaojinhong.職工

add 倉庫號 char(6)constraint ck foreign key references yaojinhong.倉庫

on delete cascade

on update cascade

update yaojinhong.職工 set 倉庫號='QW0006' where 職工號='ZG000002'

更新操作失敗,因為職工表所參考的倉庫表中不存在倉庫號為QW0006的倉庫。

update yaojinhong.倉庫 set 倉庫號=null where 倉庫號='QW0001'

更新操作失敗,因為倉庫號是關鍵字,不能為空。

update yaojinhong.倉庫 set 面積=30 where 倉庫號='QW0001'

更新操作失敗,因為面積被定義約束大於或等於50,此處面積=30,顯然違反了約束。

update yaojinhong.職工 set 工資=(工資+(工資*0.1))

update yaojinhong.訂購單 set 金額=(select SUM(單價*數量) from yaojinhong.訂購單明細

where 訂購單明細.訂購單號=訂購單.訂購單號)

delete yaojinhong.職工 where 倉庫號 in (select 倉庫號 from yaojinhong.倉庫 where 城市='北京')

delete yaojinhong.訂購單 where 供應商號 in (select 供應商號 from yaojinhong.供應商 where 供應商名='廣工')

實驗4

1 select distinct 工資 from yaojinhong.職工

select all 工資 from yaojinhong.職工

2 select * from yaojinhong.倉庫

3 select 職工號 from yaojinhong.職工 where 工資>5000

4 select * from yaojinhong.倉庫 where 倉庫號 in(select 倉庫號 from yaojinhong.職工 where 工資>5000)

5 select 職工號 from yaojinhong.職工 where 倉庫號 in ('QW0005','QW0002') and 工資<5000

6 select * from yaojinhong.職工 where 工資 between 3000 and 5000

7 select * from yaojinhong.供應商 where 供應商名 like '%公司'

8 select * from yaojinhong.倉庫 where 城市!='北京

9 select * from yaojinhong.訂購單 where 供應商號 is null

10 select * from yaojinhong.訂購單 where 供應商號 is not null

11 select * from yaojinhong.職工 order by 工資 ASC

12 select * from yaojinhong.職工 order by 倉庫號 ASC,工資 DESC

13 select 職工號,城市 from yaojinhong.職工 join yaojinhong.倉庫 on 職工.倉庫號=倉庫.倉庫號 where 工資>6000

14 select 職工號,城市 from yaojinhong.職工 join yaojinhong.倉庫 on 職工.倉庫號=倉庫.倉庫號 where 面積>700

16 select * from yaojinhong.倉庫 cross join yaojinhong.職工

17 select * from yaojinhong.倉庫 cross join yaojinhong.職工

where 倉庫.倉庫號=職工.倉庫號

18 select 供應商.供應商號,供應商名,訂購單號,訂購日期 from yaojinhong.供應商 join yaojinhong.訂購單

on 供應商.供應商號=訂購單.供應商號

19 select 供應商.供應商號,供應商名,訂購單號,訂購日期 from yaojinhong.供應商 left join yaojinhong.訂購單

on 供應商.供應商號=訂購單.供應商號

20 select 供應商.供應商號,供應商名,訂購單號,訂購日期 from yaojinhong.供應商 right join yaojinhong.訂購單 on 供應商.供應商號=訂購單.供應商號

21 select 供應商.供應商號,供應商名,訂購單號,訂購日期 from yaojinhong.供應商 full join yaojinhong.訂購單 on 供應商.供應商號=訂購單.供應商號

22 select 城市 from yaojinhong.倉庫 where 倉庫號 in

(select 倉庫號 from yaojinhong.職工 where 工資=3300)

23 select * from yaojinhong.倉庫 where 倉庫號 not in

(select 倉庫號 from yaojinhong.職工 where 工資<5000)

24 select * from yaojinhong.職工 where 工資 in

(select 工資 from yaojinhong.職工 where 職工號='ZG000001')

and 職工號!='ZG000001'

25 select 城市 from yaojinhong.倉庫 where 倉庫號 in

(select 倉庫號 from yaojinhong.職工 where 職工號 in

(select 職工號 from yaojinhong.訂購單 where 供應商號 in

(select 供應商號 from yaojinhong.供應商 where 地址='廣州')))

26 select 供應商名 from yaojinhong.供應商 join yaojinhong.訂購單 on 供應商.供應商號=訂購單.供應商號 join yaojinhong.職工 on 訂購單.職工號=職工.職工號 join yaojinhong.倉庫 on 職工.倉庫號=倉庫.倉庫號 where 地址='廣州'and 城市='廣州'

select 供應商名

from yaojinhong.供應商 where 地址='廣州' and 供應商號 in

(select 供應商號 from yaojinhong.訂購單 join yaojinhong.職工 on 訂購單.職工號=職工.職工號

join yaojinhong.倉庫 on 職工.倉庫號=倉庫.倉庫號 where 城市='廣州')

27 select 倉庫號 from yaojinhong.倉庫 where 倉庫號 in

(select 倉庫號 from yaojinhong.職工 where 工資>any

(select 工資 from yaojinhong.職工 join yaojinhong.倉庫 on 職工.倉庫號=倉庫.倉庫號

where 倉庫.倉庫號='QW0001')and 倉庫號!='QW0001')

28 select 倉庫號 from yaojinhong.倉庫 where 倉庫號 in

(select 倉庫號 from yaojinhong.職工 where 工資>all

(select 工資 from yaojinhong.職工 join yaojinhong.倉庫 on 職工.倉庫號=倉庫.倉庫號

where 倉庫.倉庫號='QW0001'))

29 select * from yaojinhong.訂購單 a where 金額=

(select MAX(金額) from yaojinhong.訂購單 b where a.職工號=b.職工號)

order by 職工號 ASC

30 select * from yaojinhong.倉庫 where exists(select * from yaojinhong.職工 where 職工號 is null and 職工.倉庫號=倉庫.倉庫號)

31 select * from yaojinhong.倉庫 where not exists(select * from yaojinhong.職工 where 職工號 is null and 職工.倉庫號=倉庫.倉庫號)

32 select COUNT(distinct 城市)城市數目 from yaojinhong.倉庫 where 城市 is not null

33 select SUM(工資)需要支付職工工資總數 from yaojinhong.職工

34 select SUM(工資)北京和上海的倉庫職工的工資總和 from yaojinhong.職工 join yaojinhong.倉庫 on 職工.倉庫號=倉庫.倉庫號

where 城市='北京' or 城市='上海'

35 select AVG(面積)平均面積 from yaojinhong.倉庫 where 倉庫號 not in

(select 倉庫號 from yaojinhong.職工 where 工資<6000)

36 select max(金額)工資大於的職工所經手的訂購單最高金額 from yaojinhong.訂購單 where 職工號 in

(select 職工號 from yaojinhong.職工 where 工資>6000)

37 select 倉庫號,AVG(工資)平均工資 from yaojinhong.職工

group by 倉庫號

38 select 倉庫號,max(金額)最高金額,MIN(金額)最低金額,AVG(金額)平均金額 from yaojinhong.職工 join yaojinhong.訂購單 on 職工.職工號=訂購單.職工號 group by 倉庫號

39 select 訂購單.訂購單號,AVG(金額)平均金額 from yaojinhong.訂購單 join yaojinhong.訂購單明細 on 訂購單.訂購單號=訂購單明細.訂購單號

group by 訂購單.訂購單號 having COUNT(訂購單.訂購單號)>=5

40 select 倉庫號,職工號,工資 from yaojinhong.職工

order by 倉庫號

compute avg(工資),sum(工資)by 倉庫號

compute avg(工資),sum(工資)

41select 訂購單明細.訂購單號,序號,產品名稱,單價,數量,金額

from yaojinhong.訂購單明細 join yaojinhong.訂購單 on

訂購單.訂購單號=訂購單明細.訂購單號 order by 訂購單.訂購單號

compute avg(金額),sum(金額)by 訂購單.訂購單號

compute avg(金額),sum(金額)

42 select * from yaojinhong.訂購單

compute avg(金額),sum(金額)

實驗5

(1) 基於單個表按投影操作定義視圖。

create view yaojinhong.倉庫視圖 as select * from yaojinhong.倉庫

(2) 基於單個表按選擇操作定義視圖。

create view yaojinhong.倉庫視圖1 as select * from yaojinhong.倉庫 where 城市='廣州'

(3) 基於單個表按選擇和投影操作定義視圖。

create view yaojinhong.倉庫視圖2 as select 倉庫號,面積 from yaojinhong.倉庫 where 城市='廣州'

(4) 基於多個表根據連接操作定義視圖。

create view yaojinhong.視圖3 as select 職工號,城市,工資 from yaojinhong.職工 join yaojinhong.倉庫 on 職工.倉庫號=倉庫.倉庫號

(5) 基於多個表根據嵌套查詢定義視圖。

create view yaojinhong.視圖4 as select * from yaojinhong.倉庫 where 倉庫號 in

(select 倉庫號 from yaojinhong.職工 where 工資>4000)

(6) 定義含有虛欄位的視圖。

create view yaojinhong.虛欄位視圖(倉庫號,城市,面積) as select 倉庫號,城市,面積*2 from yaojinhong.倉庫

2、分別在定義的視圖上設計一些查詢(包括基於視圖和基本表的連接或嵌套查詢)。

select * from yaojinhong.倉庫視圖

select * from yaojinhong.倉庫視圖1 where 城市='廣州'

select 倉庫號,面積 from yaojinhong.倉庫視圖2

select 職工號,城市,工資 from yaojinhong.職工 join yaojinhong.倉庫視圖 on 職工.倉庫號=倉庫視圖. 倉庫號

select * from yaojinhong.倉庫視圖 where 倉庫號 in

(select 倉庫號 from yaojinhong.職工 where 工資>4000)

3、在不同的視圖上分別設計一些插入、更新和刪除操作,分情況討論哪些操作可以成功完成,哪些操作不能完成,並分析原因。

insert into yaojinhong.倉庫視圖(倉庫號,城市) values('QW0008','長沙')

update yaojinhong.倉庫視圖 set 面積=650 where 倉庫號='QW0008'

insert into yaojinhong.倉庫視圖 values('QW0008','長沙',500)

update yaojinhong.倉庫視圖 set 面積=700 where 倉庫號='QW0001'

delete yaojinhong.倉庫視圖 where 倉庫號='QW0008'

delete yaojinhong.倉庫視圖 where 倉庫號='QW0008'

④ 資料庫系統設計實驗:工資管理系統

工資管理比較麻煩一些,要有一些計算公式在裡面。

⑤ 資料庫表單設計實驗目的及意義

資料庫表單設計實驗目的及意義是為了配合資料庫原理及應用開發而設置的,是計算機科學與技術、網路工程、信息安全、物聯網工程、軟體工程等專業集中實踐的教學環節,是將關系資料庫喊謹理論知識轉化為解決實際問題能力的重要環節。資料庫系統課程設計目的在於加深對關系數鄭備基據庫理論知識的理解,通過使用具體的 DBMS,滾拿掌握一種實際的資料庫管理系統並掌握其操作技術,熟練掌握使用資料庫前端開發工具(如 VB、 C++、 Java、 Delphi、 PowerBuilder等),進一步提高同學們運用資料庫技術解決實際問題的能力。