實驗五 資料庫完整性

2021-08-22 20:04:49 字數 4327 閱讀 9826

實驗五 資料庫完整性

【實驗目的】

1、掌握實體完整性約束、參照完整性約束

2、靈活應用自定義完整性約束

3、了解觸發器在自定義完整性中的應用

【實驗內容】

一、定義乙個教師表teacher(tno,tname,t***,tage,tsal,tjob,tdept)

要求:

1、性別只能是『男』或『女』

2、tno為主碼,名字不能為空,且不能重複。

3、年齡在18在60歲之間

4、教授工資最低為5000(觸發器完成)

5、所在系tdept,為外碼,參照於dept表(注:dept表需要預先定義,當dept表刪除元組時,相對應teacher元組拒絕刪除;修改時,相對應teacher元組同時修改)。

二、定義記錄表record(rno,tno,roldsal,rnewsal,ruser,rtime)

要求:

1、rno從1開始,每次加1為。主碼

2、tno為外碼,參照teacher表。

第一題和第二題參考:

use sc --開啟sc資料庫 go /*-------------建立 係表-----------------------------*/ create table dept (tdept char(10) primary key); go /*-------------建立 教師表---------------------------*/ create table teacher (tno char(10) primary key, tname char(10) not null, t*** char(2)check(t*** in('男','女')), tage smallint check(tage>=18 and tage<=60), tsal numeric(7,2), tjob varchar(10), tdept char(10), foreign key (tdept) references dept(tdept)on delete no action on update cascade); go /*-------------建立 記錄表---------------------------*/ create table record (rno int identity (1,1) primary key, tno char(10) references teacher(tno), roldsal numeric(7,2), rnewsal numeric(7,2),ruser char(10), rtime datetime); go /*-----定義觸發器 教授工資不低於5000-------------------*/ create trigger teacher_jiaoshou_minsal on teacher for insert,update as set nocount off /*---------定義變數----------------------------------*/ declare @tno char(10), @newsal numeric(7,2), @tjob char(10) begin /*---------獲得變數值--------------------------------*/ select @tno=tno, @newsal=tsal, @tjob=tjob from inserted /*---------判斷是否是教授,且工資小於5000---------------*/ if (((@newsal-5000)<0) and (@tjob='教授')) begin /*---------修改該員工(教授tno)表-------------------*/ update teacher set tsal=5000 where tno=@tno end end go

三、定義觸發器與觸發器的執行

1、定義觸發器insert_teacher,當插入teacher一行元組時,會將該元組資訊如:教師編號tno,工資等資訊,自動插入到表record中(roldsal為0)。

/*-----插入teacher觸發器-----------------*/ create trigger insert_teacher on teacher for insert as set nocount off /*---------定義變數----------------------*/ declare @tno char(10), @rnewsal numeric(7,2) begin /*---------獲得變數值----------------------*/ select @tno=tno, @rnewsal=tsal from inserted /*---------插入要記錄的資料到record表----------------------*/ insert into record(tno,roldsal,rnewsal,ruser,rtime) values(@tno,0,@rnewsal,current_user,current_timestamp) end

測試資料

insert into dept values('資訊工程系') insert into teacher values ('2008001','wang','男',34,2000,'講師','資訊工程系') select * from teacher

2、定義觸發器update_teacher,每當修改teacher資料,且工資發生變動時,會自動記錄工資變動情況到record表。

/*-----更新teacher觸發器-----------------*/ create trigger update_teacher on teacher for update as set nocount off /*---------定義變數----------------------*/ declare @tno char(10), @roldsal numeric(7,2), @rnewsal numeric(7,2) begin /*---------獲得變數值----------------------*/ select @tno=tno, @roldsal=tsal from deleted select @tno=tno, @rnewsal=tsal from inserted /*---------插入要記錄的資料到record表----------------------*/ insert into record(tno,roldsal,rnewsal,ruser,rtime) values(@tno,@roldsal,@rnewsal,current_user,current_timestamp) end

測試**:

update teacher set tsal=3000 where tno='2008001' select * from record

3、定義觸發器delete_teacher,當刪除teacher資料時,會自動記錄刪除資料情況到delete_teacher表。即記錄教師所有資訊和使用者及刪除時間。(自己完成)

4、完成以上觸發器的測試。

說明:1)能夠觸發insert_teacher觸發器的,有對teacher表進行insert操作和update操作。

2)能夠觸發delete_teacher觸發器的,有對teacher表進行delete操作和update操作。

3)能夠觸發update_teacher觸發器的,只有有對teacher表進行update操作。

【課外實驗】

一、建立如下關係表

工程表(工程號,工程名,開工日期,竣工日期,狀態,城市,專案經理號)

職工表(職工號,姓名,年齡,籍貫,職稱,基本工資)

崗位表(崗位號,崗位名)

工資表(序號,職工號,月份,績效工資,獎金)

要求:1、籍貫只記城市。

2、正確確定四個表的主碼

3、通過外碼,正確把握關係間的聯絡

4、工程與職工具有多對多的聯絡,建立乙個工程_職工表(工程號,職工號,崗位號,入職時間,狀態)

5、工程表的狀態有兩種狀態(0:未完工,1:已完工)

工程_職工表的狀態有兩種(0:在職,2:已離職)

6、工資表的月份只能取1-12,獎金只能取100的倍數

7、職工表的年齡取值範圍是18-60;職稱取值為:初級、中級、高階;要求所有人員基本工資不低於800,高階人員的基本工資不低於4500.

二、建立檢視工資檢視(序號,職工號,月份,基本工資,績效工資,獎金,五險一金,應發,個人所得稅,實發)

三、是否能刪除工程表的工程

資料庫實驗五 完整性

一 實驗目的 1 掌握資料庫約束的概念 2 熟悉 sql server 的完整性約束技術。3 了解 sql server 的違反完整性處理措施。二 實驗環境 windows下的sql 三 實驗內容 1.在前幾次實驗所使用的資料庫中新建乙個教師資訊表,表名為 teacher 字段包括 tno 教師編號...

資料庫五(資料庫完整性)

一 實體完整性 實體完整性規則 主屬性不能取空值 關係模型中 primary key 單屬性碼可以定義為列級約束條件或者表級約束條件 多屬性碼則只能定義為表級約束條件 實體完整性檢查和違約處理 檢查主碼是否唯一,不唯一則拒絕插入或者修改 檢查主碼各屬性是否為空,只要有乙個為空就拒絕插入 修改 二 參...

資料庫完整性

完整性約束條件 實體完整性給出了主鍵的取值的最低約束條件 規則是 主鍵的各個屬性都不能為空。參照完整性給出了在關係之間建立正確的聯絡的約束條件 規則是 外來鍵或者取空值 此時要求外來鍵的各個屬性均為空值 或者等於被參照關係中的主鍵的某個值。使用者自定義完整性 關係數控應用系統中的關係往往還應該滿足一...