資料庫原理測試(二)
任務
一、資料庫完整性
1、使用ms sql server2005 建立資料庫school,包含表學生表students和班級表classes,其中學生與班級之間有如下聯絡,乙個學生屬於乙個班級,乙個班級有多個學生。學生與學生之間有乙個班長的聯絡,每個學生都有自己的班長,乙個班長與多個學生有聯絡。
2、建立班級表classes
屬性有班級號(整數,從1開始自動編號),班級名(變長字串50位,不能為空,不能重複),班級人數(整數)。
3、建立學生表students
屬性有 學號(整數,從1開始自動編號),姓名(變長字串,20位),性別(只能是男或女),年齡(16-25的整數),班級(外碼,參照班級表的主碼。要求刪除時拒絕,更新時,級聯更新)和班長(外碼,參照本表(students)的主碼。要求刪除時拒絕,更新時,拒絕更新)。
資料表關係與設計後的屬性、約束如下圖所示。
任務
二、觸發器設定
1、先向班級表內插入一行元組,如:1,2011軟體工程1班,0
2、編寫觸發器,當向學生表內插入一行元組,如:1,張同學,男,18,1,1
使得對應的班級人數(班級表內)加1。
create database school;
gouse school
gocreate table classes
( cid int identity(1,1) primary key,
cname varchar(50) not null unique,
ctotal int
);go
create table students
( sid int identity(1,1) primary key,
sname varchar(20),
s*** varchar(2) check(s*** in ('男','女')),
sage int check(sage>=16 and sage<=25),
sclassid int,
smonitor int,
foreign key (sclassid) references classes(cid) on delete no action on update cascade,
foreign key (smonitor) references students(sid) on delete no action on update no action
);go
create trigger studentnumbersautoincrease
on students
for insert as
declare
@sclassid int
begin
select @sclassid = sclassid
from inserted
update classes
set ctotal = ctotal + 1
where cid = @sclassid
end
測試**:
insert into classes(cname,ctotal)
values('2011軟體工程1班',0)
insert into students(sname,s***,sage,sclassid,smonitor)
values('張同學','男',18,1,1)
select * from students;
select * from classes;
結果圖:
任務三、思考題
1、假設刪除乙個學生,如何使得班級表內對應班級人數減1?
2、假設修改乙個學生的所在班級(就是「轉班級」),如何使得班級表的對應班級人數合理變化**出的班級人數減1,轉入的班級人數加1)?
資料庫查詢測試 二
有員工表結構如下 員工表 員工編號,員工姓名 1 查詢姓名為4個字的員工 員工表 語句為 2 取出所有員工的姓 3 若員工編號為 1,2,3 要顯示為 001,002,003 則查詢員工編號和員工姓名的sql為 4 表a id number 5 中,各記錄分別為 1,2,3,4,5,4,1。sele...
資料庫原理 關聯式資料庫理論 二
關係模式中各屬性之間的相互依賴 相互制約的聯絡稱為資料依賴,資料依賴又分為函式依賴和多值依賴,其中函式依賴最為重要。函式依賴 function dependency,fd 是關係模式中屬性之間的一種邏輯關係依賴。例如在關聯式資料庫理論 一 中的scd表中,sno 和 sn age dept 之間就有...
資料庫原理
基本內容 acid與cap 資料庫事務可能引發的問題 資料庫鎖的型別 封鎖協議 兩段鎖協議 資料庫隔離級別 mvcc的實現步驟 mysql事務如何實現 資料庫鎖如何實現 xa兩段提交協議。1.acid是資料庫事務正確執行的四個基本要素 原子性 事務是資料庫併發控制的最小單位,要麼全部提交成功,要麼全...