Ngân hàng bài tập ràng buộc toàn vẹn có lời giải | Trường Đại học Quốc tế KENT

Ngân hàng bài tập ràng buộc toàn vẹn có lời giải | Trường Đại học Quốc tế KENT. Tài liệu gồm 21 trang, giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

9/20/2015
1
Chương 4
Ràng Buộc Dữ
Liệu
Nội dung
Giới thiệu
Phân loại
Qui tắc chung
User-defined Constraint
4
1
2
3
9/20/2015
2
Mục tiêu
Thực thể
Miền giá trị
Tham chiếu
RB tự định
nghĩa
RB nghiệp vụ mà
3 loại trên không
kiểm tra được
RB về kích thước,
định dạng, miền giá trị
RB tham chiếu
giá trị
Mỗi thể hiện của
thực thể là duy nhất
Mục tiêu
Chuyển trách nhiệm kiểm tra RBDL cho SQL
Server làm một cách tự động mỗi khi thay đổi
trên DL (Con người không cần kiểm tra thủ công)
9/20/2015
3
Nội dung
Giới thiệu
Phân loại
Qui tắc chung
User-defined Constraint
4
1
2
3
Phân loại
1. Primary 2. Foreign 3. Check 4. Unique
5. Default
6. Rule
1. Trigger
9/20/2015
4
Rule
CREATE RULE rule_name
AS <expression>
sp_bindRule <rule_name>, <table_name.column_name>
sp_unbindRule <table_name.column_name>
DROP RULE rule_name
Biến thay thế trong rule phải tương thích cột được bind
Không bind rule cho các cột kiểu dữ liệu lớn:
o text, ntext
o varchar(max), nvarchar(max), vabinary(max)
o xml,
Ví dụ Rule
ur_LuongDuong
NHANVIEN
MaNV
Luong
NV1
10000
NV2
30
CREATE RULE ur_LuongDuong
AS @Luong>0
sp_bindRule ‘ur_LuongDuong’,’NhanVien.Luong’
sp_bindRule
NV3
-40
sp_unbindRule ‘NhanVien.Luong’
sp_unbindRule
9/20/2015
5
Ví dụ Rule
CREATE RULE ur_GioiTinh
AS @gt IN (‘Nam’, N‘Nữ’)
sp_bindRule ‘ur_GioiTinh’,’NhanVien.GioiTinh’
CREATE RULE ur_DienThoaiBan
AS @dt LIKE ‘3_ _ _ - _ _ - _ _’
sp_bindRule ‘ur_DienThoai’,’NhanVien.SoDT1’
Nội dung
Giới thiệu
Phân loại
Qui tắc chung
User-defined Constraint
4
1
2
3
9/20/2015
6
Qui tắc chung
SQL constraints có 3 cách tạo
Tạo trong tạo bảng
Ràng buộc trên thuộc tính
Ràng buộc trên bảng
Tạo ngoài bảng
Ví dụ : tạo ràng buộc Unique
RB trên thuộc tính
CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address
varchar(255),
City varchar(255)
)
Chỉ áp dụng
cho RB trên
một thuộc tính
9/20/2015
7
RB trên bảng
CREATE TABLE Persons3
(
P_Id
int NOT NULL,
LastName
varchar(255) NOT NULL,
FirstName
varchar(255),
Address
varchar(255),
City
varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
Cho phép đặt
tên ràng buộc
Áp dụng cho
các RB có trên
2 thuộc tính
RB bên ngoài bảng
ALTER TABLE Persons
ADD CONSTRAINT Uc_Person
UNIQUE (P_id, LastName)
Cho phép đặt
tên ràng buộc
Áp dụng cho
các RB có trên
2 thuộc tính
9/20/2015
8
Qui tắc chung
hiệu hóa { Check | Foreign } constraint
đang hiệu lực
Alter table <Tab_name> Nocheck constraint
{ALL | constraint_name [,n]}
dụ :
ALTER TABLE SINHVIEN
NOCHECK CONSTRAINT
C_Phai, chk_Nam
Lưu ý: Primary, Unique, Default luôn trạng
thái hoạt động
Qui tắc chung
Hiệu lực hóa { Check | Foreign } constraint đã
mất hiệu lực
Alter table <Tab_name> Check constraint
{ALL | constraint_name [,n]}
dụ :
ALTER TABLE SINHVIEN
CHECK CONSTRAINT
C_Phai, chk_Nam
9/20/2015
9
Nội dung
Giới thiệu
Phân loại
Qui tắc chung
User-defined Constraint
4
1
2
3
User-defined Constraint
Đặc điểm
Mục tiêu
Hoạt động
Cài đặt RBTV phức tạp
Các qui tắc nghiệp vụ
một thủ tục đặc biệt
Không tham số
Thuộc duy nhất một bảng
Được kích hoạt tự động thông qua các thao tác
(
Insert, Update, Delete)
Dựa trên bảng tạm:
Inserted, Deleted
9/20/2015
10
User-defined Constraint
Inserted : Khi thay đổi trên DL, thể sẽ một
hoặc một số dòng được thêm vào bảng X. Các dòng
này sẽ được đưa vào bảng inserted (có cấu trúc giống
X).
Deleted : Khi thay đổi trên DL, thể sẽ một
hoặc một số dòng bị xóa đi. Các dòng này sẽ được đưa
vào bảng deleted (cấu trúc giống X).
User-defined Constraint
Các bước xây dựng trigger
Bước 1: xác định bảng tầm ảnh hưởng.
Bước 2: với mỗi quan hệ trong bảng tầm ảnh hưởng
xác định xử trên các thao tác khi vi phạm RBTV.
Bước 3: các thao c cùng xử sẽ được viết
trong cùng một trigger.
9/20/2015
11
User-defined Constraint
pháp
Create trigger tên_trigger
On {tên_bảng|tên_view}
{
For| After| Instead of } { [delete] [,] [insert] [,]
[update] }
As
Begin
{ các lệnh T-sql }
End
Go
Quan hệ bị ảnh
hưởng
Thao tác bị ảnh
hưởng
Xữ lí khi có vi
phạm RBTV
User-defined Constraint
Nếu thao tác insert/ delete/ update thực hiện
trên nhiều dòng, trigger cũng chỉ được gọi một
lần
Bảng inserted/ deleted thể chứa nhiều dòng
9/20/2015
12
User-defined Constraint
For | After:
Trigger được gọi thực hiện sau khi thao tác delete/
insert/ update tương ứng đã được thực hiện thành
công
Các dòng mới được thêm chứa đồng thời trong bảng
dữ liệu bảng inserted
Các dòng bị x ch nằm trong bảng deleted (đã bị xoá
khỏi bảng dữ liệu)
thể xử quay lui thao tác đã thực hiện bằng
lệnh
rollback transaction
User-defined Constraint
Instead of:
Trigger được gọi thực hiện thay cho thao tác
delete/ insert/ update tương ứng
Các dòng mới được thêm chỉ chứa trong bảng inserted
Các dòng bị chỉ định xoá nằm đồng thời trong bảng
deleted bảng dữ liệu (dữ liệu không bị xoá).
Trigger Instead of thường được dùng để xử cập
nhật trên khung nhìn (view).
9/20/2015
13
User-defined Constraint
Lưu ý:
Trên một bảng thể định nghĩa nhiều trigger
for/after cho mỗi thao tác
Trong thân trigger, thể sử dụng hàm
Update(tên_cột) để kiểm tra xem việc cập nhật/
insert được thực hiện trên cột nào.
Update(tên_cột) = true : thực hiện cập nhật trên cột
tên_cột
User-defined Constraint
Ví d:
Cho CSDL 2 table
DonHang (MaDH
,,NgayDatHang)
PhieuGH (MaPG
, MaDH,,NgayGiaoHang)
RBTV : Ngày giao hàng phải sau ngày đặt
hàng không trễ quá 1 tháng kể từ ngày đặt
hàng.
9/20/2015
14
User-defined Constraint
insert delete update
DonHang
PhieuGH
(NgayDatHang)
(MaDH,NgayGiaoHang)
Bảng tầm ảnh hưởng
User-defined Constraint
Create trigger trg_DH_PGH On DonHang
For update
As
Begin
If exists
(select * from Insreted I, PhieuGH P
Where P.MaDH=I.MaDH And
(P.NgayGiaoHang < I.NgayDatHang Or
Datediff(MM, I.NgayDatHang, P.NgayGiaoHang) > 1))
Begin
Raiserror
(‘Ngay dat hang khong hop le’,16,1)
Rollback transaction
End
End
Vi phạm RBTV nên phải hủy bỏ mọi
thay đổi, trở về trạng thái ban đầu
9/20/2015
15
DONHANG
MaDH
NgayDatHang
DH1
1/4/2002
DH2
1/4/2001
PhieuGH
MaPG
MaDH
NgayGiaoHang
PG1
15/4/2002
PG2
10/4/2001
PG1 DH1
15/4/2002
DH1
18/5/2002DH1
18/5/2002DH1
1/4/2002
User-defined Constraint
INSERTED
MaDH
NgayDatHang
DELETED
MaDH
NgayDatHang
Update DONHANG
Set NgayDatHang = ’18/5/2002’
Where MaDH = ‘DH1’
Vi phạm
RBTV
DELETED
MaDH
NgayDatHang
DONHANG
MaDH
NgayDatHang
DH1
1/4/2002
DH2
1/2/2001
User-defined Constraint
INSERTED
MaDH
NgayDatHang
DH1
18/5/2002
PhieuGH
MaPG
MaDH
NgayGiaoHang
PG1 DH1
15/4/2002
PG2
10/4/2004
Update DONHANG
Se NgayDatHang = ’18/5/2002’
Where MaDH = ‘DH1’
DH1
1/4/2002
9/20/2015
16
User-defined Constraint
insert delete update
DonHang
PhieuGH
(NgayDatHang)
(MaDH,NgayGiaoHang)
Bảng tầm ảnh hưởng
Viết gp
Viết riêng
Viết gộp
Viết riêng
User-defined Constraint
Create trigger trg_PGH On PhieuGH
For update, Insert
As
Begin
If exists
(select * from Insreted I, PhieuGH P
Where P.MaDH=I.MaDH And
(P.NgayGiaoHang < I.NgayDatHang Or
Datediff(MM, I.NgayDatHang, P.NgayGiaoHang) > 1))
Begin
Raiserror
(‘Ngay dat hang khong hop le’,0,1)
Rollback transaction
End
End
Vi phạm RBTV nên phải hủy bỏ mọi
thay đổi, trở về trạng thái ban đầu
9/20/2015
17
User-defined Constraint
Thay đổi nội dung trigger:
Thay từ khóa create trong các lệnh tạo trigger bằng
từ khóa alter
User-defined Constraint
Alter trigger trg_DH_PGH On DonHang
For update, Insert
As
Begin
If exists
(select * from Insreted I, PhieuGH P
Where P.MaDH=I.MaDH And
(P.NgayGiaoHang < I.NgayDatHang Or
Datediff(MM, I.NgayDatHang, P.NgayGiaoHang) > 1))
Begin
Raiserror
(‘Thao tac da bi huy’,16,1)
Rollback transaction
End
End
9/20/2015
18
User-defined Constraint
Xóa trigger
Drop trigger tên_trigger_cần _xóa [,n]
Ví d:
Drop trigger trg_DH_PGH
Nested trigger
Định nghĩa
Nested trigger(recursive trigger) khi một trigger
được kích hoạt làm các trigger khác kích hoạt.
Hệ quản trị hỗ trợ tối đa 32 mức.
pháp:
SP_CONFIGURE ‘Nested_Triggers',0
GO
RECONFIGURE
9/20/2015
19
Lược đồ CSDL
SinhVien (MaSV, HoTen, DiemTB, MaLop, NamSinh,
NamBD, NamKT, TinhTrang)
LopHoc (MaLop
, MaKhoa, SiSo)
Khoa (MaKhoa
, TenKhoa, NamThanhLap)
MonHoc (MaMH
, TenMonHoc, SoChi, MaKhoa)
KetQua (MaSV, MaMH, LanThi
, Diem)
Lược đồ CSDL
9/20/2015
20
Bài tập
1. Sinh viên chỉ được học c môn của khoa mình mở.
2. Sinh viên chỉ được thi lại nếu điểm của lần thi sau
cùng < 5 số lần thi < 3.
3. Số lượng sinh viên (nếu ) bằng số sinh viên của
lớp đó.
4. Xóa một sinh viên phải xóa tất cả các tham chiếu
đến sinh viên đó.
5. Điểm trung bình (nếu ) phải bằng tổng điểm /
tổng tín chỉ.
Bài tập
6. Sinh viên chỉ được nhập học từ 18 đến 22 tuổi.
7. Năm bắt đầu học của sinh viên phải nhỏ hơn năm
kết thúc lớn hơn năm thành lập của khoa đó.
8. Tình trạng của sinh viên Đã tốt nghiệp’ nếu
điểm trung bình >=5.0 năm kết thúc < năm hiện
hành.
Tình trạng ‘Đang học nếu’ năm kết thúc >= năm
hiện hành.
Tình trạng Bị thôi học’ nếu điểm trung bình
<5.0 năm kết thúc > m hiện hành.
| 1/21

Preview text:

9/20/2015 Chương 4 Ràng Buộc Dữ Liệu Nội dung 1 Giới thiệu 2 Phân loại 3 Qui tắc chung 4 User-defined Constraint 1 9/20/2015 Mục tiêu
Mỗi thể hiện của
RB về kích thước,
thực thể là duy nhất
định dạng, miền giá trị Thực thể Miền giá trị RB tự định Tham chiếu nghĩa RB nghiệp vụ mà RB tham chiếu 3 loại trên không giá trị kiểm tra được Mục tiêu
Chuyển trách nhiệm kiểm tra RBDL cho SQL
Server làm một cách tự động mỗi khi có thay đổi
trên DL (Con người không cần kiểm tra thủ công) 2 9/20/2015 Nội dung 1 Giới thiệu 2 Phân loại 3 Qui tắc chung 4 User-defined Constraint Phân loại 1. Primary 2. Foreign 3. Check 4. Unique 5. Default 6. Rule 1. Trigger 3 9/20/2015 Rule CREATE RULE rule_name AS DROP RULE rule_name sp_bindRule , sp_unbindRule
฀ Biến thay thế trong rule phải tương thích cột được bind
฀ Không bind rule cho các cột có kiểu dữ liệu lớn: o text, ntext
o varchar(max), nvarchar(max), vabinary(max) o xml, … Ví dụ Rule CREATE RULE ur_LuongDuong AS @Luong>0 ur_LuongDuong sp_bindRule NHANVIEN sp_unbindRule MaNV … Luong NV1 … 10000 NV2 … 30 NV3 -40
sp_bindRule ‘ur_LuongDuong’,’NhanVien.Luong’
sp_unbindRule ‘NhanVien.Luong’ 4 9/20/2015 Ví dụ Rule CREATE RULE ur_GioiTinh
AS @gt IN (‘Nam’, N‘Nữ’)
sp_bindRule ‘ur_GioiTinh’,’NhanVien.GioiTinh’ CREATE RULE ur_DienThoaiBan
AS @dt LIKE ‘3_ _ _ - _ _ - _ _’
sp_bindRule ‘ur_DienThoai’,’NhanVien.SoDT1’ Nội dung 1 Giới thiệu 2 Phân loại 3 Qui tắc chung 4 User-defined Constraint 5 9/20/2015 Qui tắc chung
SQL constraints có 3 cách tạo ฀ Tạo trong tạo bảng
฀ Ràng buộc trên thuộc tính ฀ Ràng buộc trên bảng ฀ Tạo ngoài bảng
Ví dụ : tạo ràng buộc Unique RB trên thuộc tính Chỉ áp dụng CREATE TABLE Persons cho RB trên ( một thuộc tính P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ) 6 9/20/2015 RB trên bảng CREATE TABLE Persons3 ( P_Id int NOT NULL,
LastName varchar(255) NOT NULL, FirstName varchar(255), Áp dụng cho các RB có trên Address varchar(255), Cho phép đặt 2 thuộc tính City varchar(255), tên ràng buộc
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) ) RB bên ngoài bảng ALTER TABLE Persons Cho phép đặt tên ràng buộc ADD CONSTRAINT Uc_Person UNIQUE (P_id, LastName) Áp dụng cho các RB có trên 2 thuộc tính 7 9/20/2015 Qui tắc chung
Vô hiệu hóa { Check | Foreign } constraint đang có hiệu lực Alter table Nocheck constraint
{ALL | constraint_name [,…n]} ฀ Ví dụ : ALTER TABLE SINHVIEN NOCHECK CONSTRAINT C_Phai, chk_Nam
Lưu ý: Primary, Unique, Default luôn ở trạng thái hoạt động Qui tắc chung
Hiệu lực hóa { Check | Foreign } constraint đã mất hiệu lực Alter table Check constraint
{ALL | constraint_name [,…n]} ฀ Ví dụ : ALTER TABLE SINHVIEN CHECK CONSTRAINT C_Phai, chk_Nam 8 9/20/2015 Nội dung 1 Giới thiệu 2 Phân loại 3 Qui tắc chung 4 User-defined Constraint User-defined Constraint Mục tiêu
฀ Cài đặt RBTV phức tạp
฀ Các qui tắc nghiệp vụ Đặc điểm
฀ Là một thủ tục đặc biệt ฀ Không có tham số
฀ Thuộc duy nhất một bảng Hoạt động
฀ Được kích hoạt tự động thông qua các thao tác
(Insert, Update, Delete)
฀ Dựa trên bảng tạm: Inserted, Deleted 9 9/20/2015 User-defined Constraint
Inserted : Khi có thay đổi trên DL, có thể sẽ có một
hoặc một số dòng được thêm vào bảng X. Các dòng
này sẽ được đưa vào bảng inserted (có cấu trúc giống X).
Deleted : Khi có thay đổi trên DL, có thể sẽ có một
hoặc một số dòng bị xóa đi. Các dòng này sẽ được đưa
vào bảng deleted (cấu trúc giống X). User-defined Constraint
Các bước xây dựng trigger
Bước 1: xác định bảng tầm ảnh hưởng.
Bước 2: với mỗi quan hệ trong bảng tầm ảnh hưởng
xác định xử lí trên các thao tác khi vi phạm RBTV.
Bước 3: các thao tác có cùng xử lí sẽ được viết trong cùng một trigger. 10 9/20/2015 User-defined ConstraintCú pháp Quan hệ bị ảnh hưởng
Create trigger tên_trigger
On {tên_bảng|tên_view}
{For| After| Instead of } { [delete] [,] [insert] [,] [update] } As Thao tác bị ảnh hưởng Begin { các lệnh T-sql } Xữ lí khi có vi End phạm RBTV Go User-defined Constraint
Nếu thao tác insert/ delete/ update thực hiện
trên nhiều dòng, trigger cũng chỉ được gọi một lần
฀Bảng inserted/ deleted có thể chứa nhiều dòng 11 9/20/2015 User-defined ConstraintFor | After:
฀ Trigger được gọi thực hiện sau khi thao tác delete/
insert/ update tương ứng đã được thực hiện thành công
• Các dòng mới được thêm chứa đồng thời trong bảng
dữ liệu bảng inserted
• Các dòng bị xoá chỉ nằm trong bảng deleted (đã bị xoá khỏi bảng dữ liệu)
฀ Có thể xử lý quay lui thao tác đã thực hiện bằng
lệnh rollback transaction User-defined ConstraintInstead of:
฀ Trigger được gọi thực hiện thay cho thao tác
delete/ insert/ update tương ứng
• Các dòng mới được thêm chỉ chứa trong bảng inserted
• Các dòng bị chỉ định xoá nằm đồng thời trong bảng
deleted và bảng dữ liệu (dữ liệu không bị xoá).
฀ Trigger Instead of thường được dùng để xử lý cập
nhật trên khung nhìn (view). 12 9/20/2015 User-defined ConstraintLưu ý:
฀ Trên một bảng có thể định nghĩa nhiều trigger
for/after cho mỗi thao tác…
฀ Trong thân trigger, có thể sử dụng hàm
Update(tên_cột) để kiểm tra xem việc cập nhật/
insert được thực hiện trên cột nào.
• Update(tên_cột) = true : có thực hiện cập nhật trên cột tên_cột User-defined ConstraintVí dụ: Cho CSDL có 2 table
DonHang (MaDH,…,NgayDatHang)
PhieuGH (MaPG, MaDH,…,NgayGiaoHang)
RBTV : Ngày giao hàng phải sau ngày đặt
hàng và không trễ quá 1 tháng kể từ ngày đặt hàng. 13 9/20/2015 User-defined Constraint
Bảng tầm ảnh hưởng insert delete update DonHang (NgayDatHang) PhieuGH
(MaDH,NgayGiaoHang) User-defined Constraint
Create trigger trg_DH_PGH On DonHang For update As Begin
If exists(select * from Insreted I, PhieuGH P Where P.MaDH=I.MaDH And
(P.NgayGiaoHang < I.NgayDatHang Or
Datediff(MM, I.NgayDatHang, P.NgayGiaoHang) > 1)) Begin
Raiserror(‘Ngay dat hang khong hop le’,16,1) Rollback transaction End
Vi phạm RBTV nên phải hủy bỏ mọi End
thay đổi, trở về trạng thái ban đầu 14 9/20/2015 User-defined Constraint Update DONHANG
Set NgayDatHang = ’18/5/2002’ INSERTED Where MaDH = ‘DH1’ MaDH … NgayDatHang DONHANG MaDH … NgayDatHang Vi phạm DH1 DH1 … 1/4/2002 18/5/2002 1/4/2002 DH2 … 1/4/2001 RBTV DELETED MaDH … NgayDatHang PhieuGH MaPG MaDH … NgayGiaoHang PG1 PG1 DH1 … 15/4/2002 15/4/2002 PG2 … 10/4/2001 User-defined Constraint Update DONHANG
Se NgayDatHang = ’18/5/2002’ INSERTED Where MaDH = ‘DH1’ MaDH … NgayDatHang DONHANG DH1 … 18/5/2002 MaDH … NgayDatHang DH1 … 1/4/2002 DH2 … 1/2/2001 DELETED MaDH … NgayDatHang PhieuGH DH1 1/4/2002 MaPG MaDH … NgayGiaoHang PG1 DH1 … 15/4/2002 PG2 … 10/4/2004 15 9/20/2015 User-defined Constraint
Bảng tầm ảnh hưởng insert delete update DonHang (NgayDatHang) PhieuGH
(MaDH,NgayGiaoHang) Viế Vi t ế g t ộ g p ộ Viết riêng User-defined Constraint
Create trigger trg_PGH On PhieuGH For update, Insert As Begin
If exists(select * from Insreted I, PhieuGH P Where P.MaDH=I.MaDH And
(P.NgayGiaoHang < I.NgayDatHang Or
Datediff(MM, I.NgayDatHang, P.NgayGiaoHang) > 1)) Begin
Raiserror(‘Ngay dat hang khong hop le’,0,1) Rollback transaction End
Vi phạm RBTV nên phải hủy bỏ mọi End
thay đổi, trở về trạng thái ban đầu 16 9/20/2015 User-defined Constraint
Thay đổi nội dung trigger:
Thay từ khóa create trong các lệnh tạo trigger bằng từ khóa alter User-defined Constraint
Alter trigger trg_DH_PGH On DonHang For update, Insert As Begin
If exists(select * from Insreted I, PhieuGH P Where P.MaDH=I.MaDH And
(P.NgayGiaoHang < I.NgayDatHang Or
Datediff(MM, I.NgayDatHang, P.NgayGiaoHang) > 1)) Begin
Raiserror(‘Thao tac da bi huy’,16,1) Rollback transaction End End 17 9/20/2015 User-defined ConstraintXóa trigger
Drop trigger tên_trigger_cần _xóa [,…n] Ví dụ: Drop trigger trg_DH_PGH Nested triggerĐịnh nghĩa
฀ Nested trigger(recursive trigger) là khi một trigger
được kích hoạt làm các trigger khác kích hoạt.
฀ Hệ quản trị hỗ trợ tối đa 32 mức. Cú pháp:
SP_CONFIGURE ‘Nested_Triggers',0 GO RECONFIGURE 18 9/20/2015 Lược đồ CSDL
SinhVien (MaSV, HoTen, DiemTB, MaLop, NamSinh, NamBD, NamKT, TinhTrang)
LopHoc (MaLop, MaKhoa, SiSo)
Khoa (MaKhoa, TenKhoa, NamThanhLap)
MonHoc (MaMH, TenMonHoc, SoChi, MaKhoa)
KetQua (MaSV, MaMH, LanThi, Diem) Lược đồ CSDL 19 9/20/2015 Bài tập
1. Sinh viên chỉ được học các môn của khoa mình mở.
2. Sinh viên chỉ được thi lại nếu điểm của lần thi sau

cùng < 5 và số lần thi < 3.
3. Số lượng sinh viên (nếu có) bằng số sinh viên của lớp đó.
4. Xóa một sinh viên phải xóa tất cả các tham chiếu đến sinh viên đó.
5. Điểm trung bình (nếu có) phải bằng tổng điểm / tổng tín chỉ. Bài tập
6. Sinh viên chỉ được nhập học từ 18 đến 22 tuổi.
7. Năm bắt đầu học của sinh viên phải nhỏ hơn năm

kết thúc và lớn hơn năm thành lập của khoa đó.
8. Tình trạng của sinh viên là ‘Đã tốt nghiệp’ nếu
điểm trung bình >=5.0 và năm kết thúc < năm hiện hành.
Tình trạng là ‘Đang học nếu’ năm kết thúc >= năm hiện hành.
Tình trạng là ‘Bị thôi học’ nếu điểm trung bình
<5.0 và năm kết thúc > năm hiện hành.
20