Ràng buc toàn vn 1
Ràng buc toàn vn
(Integrity Constraint)
Chng 6
Ni dung trình bày
̇ Gii thiu
̇ Các yu t ca RBTV
̇ Phân loi RBTV
̇ Cài đt RBTV
Ràng buc toàn vn 2
Gii thiu
̇ RBTV
•Các điu kin mi trng thái ca quan h đu phi tha bt k thi đim
nào.
•Xut phát t các qui tc qun lý đc áp đt lên các đi tng trong th
gii thc.
̇ Mc đích ca RBTV
• m bo tính nht quán ca d liu.
-Ngi giám sát phi là mt nhân viên trong công ty.
-D án phi đc điu phi bi mt phòng trong công ty.
• m bo ng ngha thc t ca CSDL.
- Ngày nhn chc > Ngày sinh.
-Lng nhân viên < Lng trng phòng.
̇ RBTV có 3 yu t
•Ni dung.
•Bi cnh.
•Bng tm nh hng.
Ni dung ca RBTV
̇ c phát biu bng
• Ngôn ng t nhiên.
- n gin, d hiu.
• Ngôn ng hình thc
- i s quan h, phép tính quan h, mã gi (pseudo
code).
-Cós toán hc, đôi lúc khó hiu.
Ràng buc toàn vn 3
Ví d
̇ RB-1
•Mi nhân viên có mt mã s riêng bit dùng đ phân bit vi các
nhân viên khác.
• ∀t
1
, t
2
∈ NHANVIEN (t
1
≠ t
2
⇒ t
1
.MaNV ≠ t
2
.MaNV)
̇ RB-2
•Mi nhân viên phi làm vic trong mt phòng ban.
• NHANVIEN[MaPhong] ⊆ PHONGBAN[MaPB]
̇ RB-3
•Mi nhân viên ch đc phép tham gia không quá 3 d án.
• ∀s ∈ THAMGIA (card({t | t ∈ THAMGIA ∧ t.MaNV = s.MaNV}) ≤ 3)
̇ RB-4
•Mi phòng ban phi có ít nht mt nhân viên
• ∀s ∈ PHONGBAN (∃t ∈ NHANVIEN (t.MaPhong = s.MaPB))
Bi cnh ca RBTV
̇ Là nhng quan h mà RBTV có hiu lc.
̇ Bi cnh có th là mt quan h hoc nhiu quan
h.
̇ Ví d
•RB-1
có bi cnh là NHANVIEN.
•RB-2, RB-4
có bi cnh là NHANVIEN, PHONGBAN.
•RB-3
có bi cnh là THAMGIA.
Ràng buc toàn vn 4
Bng tm nh hng ca RBTV (1)
̇ RBTV có th b vi phm khi thc hin các thao tác cp nht
trên bi cnh
• Thêm
•Xóa
•Sa
̇ Bng tm nh hng dùng đ xác đnh thi đim cn kim
tra RBTV.
+Quan h k
-++Quan h 1
SaXóaThêmTên RBTV
+ : cn phi kim tra RBTV
- : không cn kim tra RBTV
Các quan h
bi cnh
Ví d
+NHANVIEN
SaXóaThêmRB-1
-+-PHONGBAN
+-+NHANVIEN
SaXóaThêmRB-2
+THAMGIA
SaXóaThêmRB-3
+PHONGBAN
+ NHANVIEN
SaXóaThêmRB-4
Ràng buc toàn vn 5
Bng tm nh hng ca RBTV (2)
̇ Bng tm nh hng tng hp
•Xây dng trên c s bng tm nh hng ca các RBTV.
• xác đnh thi đim kim tra RBTV khi mt thao tác cp nht trên
mt quan h nào đó đc thc hin.
+
T
Tên RBTV r
-
X
+
+
SSXT
-+Quan h n
+Quan h 1
Tên RBTV 1
Ví d
+
-
T
RB-4
-
-
X
-
+
S
+THAMGIA
-+-PHONGBAN
+-+ +NHANVIEN
SXTSXTSXT
RB-3RB-2RB-1
Ràng buc toàn vn 6
Phân loi RBTV
̇ Phân loi theo bi cnh
•Bi cnh là mt quan h.
•Bi cnh là nhiu quan h.
̇ Mc đích
• Giúp ngi thit k phát hin các RBTV ca mt CSDL.
̇ RBTV có bi cnh là mt quan h
• RBTV min giá tr.
• RBTV liên thuc tính.
• RBTV liên b.
̇ RBTV có bi cnh là nhiu quan h
• RBTV tham chiu.
• RBTV liên thuc tính - liên quan h
• RBTV liên b - liên quan h.
• RBTV thuc tính tng hp.
RBTV min giá tr (1)
̇ RB-5
•Lng ca nhân viên không thp hn 10.000.
• ∀t ∈ NHANVIEN (t.Luong ≥ 10.000)
+-+NHANVIEN
SaXóaThêmRB-5
Ràng buc toàn vn 7
RBTV min giá tr (2)
̇ RB-6
•Gi s quan h NHANVIEN có thêm thuc tính ngày xp
lng. Khi mc lng thay đi, thì giá tr ca ngày xp
lng phi luôn tng.
• τ : NHANVIEN → NHANVIEN
∀t ∈ NHANVIEN (t.NgXepLuong < τ(t).NgXepLuong)
+ NHANVIEN
SaXóaThêmRB-6
RBTV liên thuc tính
̇ RB-7
• Ngày xp lng phi ln hn ngày sinh ca nhân viên.
• ∀t ∈ NHANVIEN (t.NgSinh < t.NgXepLuong)
̇ RB-8
•Mt nhân viên không đc giám sát chính mình.
• ∀t ∈ NHANVIEN (t.MaGSat ≠ t.MaNV)
+-+NHANVIEN
SaXóaThêmRB-7
+-+NHANVIEN
SaXóaThêmRB-8
Ràng buc toàn vn 8
RBTV liên b
̇ S tn ti ca b này ph thuc vào b
khác.
•Trng hp đc bit là ràng buc khóa chính.
̇ RB-1
và RB-3.
RBTV tham chiu (1)
̇ RB-9
•Ch có nhân viên ca công ty mi đc tham gia vào d
án ca công ty.
-S tn ti ca mt b t ∈ THAMGIA ph thuc vào s tn ti ca
mt b u ∈ NHANVIEN và mt b v ∈ DUAN.
• ∀t ∈ THAMGIA (∃u ∈ NHANVIEN, ∃v ∈ DUAN (u.MaNV
= t.MaNV ∧ v.MaDA = t.MaDA))
-+-DUAN
-+-NHANVIEN
+THAMGIA
SaXóaThêmRB-9
Ràng buc toàn vn 9
RBTV tham chiu (2)
̇ RB-10
•Mi thân nhân phi có mi quan h h hàng vi nhân
viên ca công ty.
-S tn ti ca b mt t ∈ THANNHAN ph thuc vào s tn ti
ca mt b u ∈ NHANVIEN.
• ∀t ∈ THANNHAN (∃u ∈ NHANVIEN (u.MaNV = t.MaNV))
+THANNHAN
-+-NHANVIEN
SaXóaThêmRB-10
RBTV tham chiu (3)
̇ RB-11
•Ngi giám sát trc tip (nu có) phi là mt nhân viên
trong công ty.
-S tn ti ca b mt t ∈ NHANVIEN ph thuc vào s tn ti
ca mt b u ∈ NHANVIEN.
• ∀t ∈ NHANVIEN (t ≠ null ∧∃u ∈ NHANVIEN (u.MaNV =
t.MaGS))
̇ Nhn xét
• RBTV tham chiu có th có bi cnh là mt quan h.
+++NHANVIEN
SaXóaThêmRB-11
Ràng buc toàn vn 10
RBTV liên thuc tính - liên quan h
̇ Mi liên h gia các thuc tính trong nhiu lc đ
quan h.
̇ RB-12
•Ngày nhn chc ca trng phòng phi ln hn ngày
sinh.
• ∀t ∈ PHONGBAN (∃u ∈ NHANVIEN (u.MaNV =
t.TrPhong ∧ u.NgSinh < t.NgNhanChuc))
+-+PHONGBAN
+ NHANVIEN
SaXóaThêmRB-12
RBTV liên b - liên quan h
̇ Mi liên h gia các b trên nhiu lc đ quan
h.
̇ RB-4
.
̇ RB-13
•Lng ca nhân viên không đc cao hn lng trng
phòng.
• ∀t ∈ NHANVIEN (∃u ∈ PHONGBAN (∃v ∈ NHANVIEN
(v.MaNV = u.TrPhong ∧ u.MaPB = t.MaPhong ∧ v.Luong
> t.Luong)))
+-+PHONGBAN
+-+NHANVIEN
SaXóaThêmRB-13
Ràng buc toàn vn 11
RBTV thuc tính tng hp
̇ Thuc tính ca lc đ này đc tính toán t các
thuc tính hoc các b ca các lc đ khác.
̇ RB-14
•Gi s PHONGBAN có thêm thuc tính lu s nhân viên
ca phòng. Khi đós nhân viên ca phòng phi bng
tng s nhân viên thuc phòng đó.
• ∀t ∈PHONGBAN (t.SoNV = card({u | u ∈ NHANVIEN ∧
u.MaPhong = t.MaPB}))
+-+PHONGBAN
+++NHANVIEN
SaXóaThêmRB-14
Cài đt RBTV vi Assertion (1)
̇ create assertion <Tên assertion> check <điu kin>
̇ drop assertion <Tên assertion>
̇ RB-12
• create assertion RB_12
check (not exists (
select *
from PHONGBAN, NHANVIEN
where TrPhong = MaNV and
NgSinh > NgNhanChuc));
Ràng buc toàn vn 12
Cài đt RBTV vi Assertion (2)
̇ RB-3
• create assertion (
check (not exists (
select MaNV
from THAMGIA
group by MaNV
having count(*) > 3));
Cài đt RBTV vi Check (1)
̇ create table <Tên bng> (
<khai báo thuc tính> check <điu kin>,
,
check <điu kin>
);
̇ RB-5
• create table NHANVIEN (
,
Luong int check (Luong >= 10000),
,
)
Ràng buc toàn vn 13
Cài đt RBTV vi Check (2)
̇ RB-7
• create table NHANVIEN (
,
NgSinh date,
NgXepLuong date,
,
check (NgSinh < NgXepLuong)
);
Cài đt RBTV vi Trigger (1)
̇ Tp hp các lnh t đng thc hin khi xy ra các
s kin nào đó.
̇ Mô hình ECA (S kin - iu kin - Hành đng)
S KIN HÀNH NGIU KIN
úng
-Thêm
-Xóa
-Sa
Tp hp các lnhXác đnh trên
các b c và mi
Ràng buc toàn vn 14
Cài đt RBTV vi Trigger (2)
̇ create trigger <Tên trigger>
<after | before> <insert | delete | update> on <Tên
bng>
[for each row | for each statement]
[when <điu kin>]
<Các lnh SQL>;
̇ drop trigger <Tên trigger>
Cài đt RBTV vi Trigger (3)
̇ RB-13
• create trigger RB_13
before insert or update of Luong on NHANVIEN
for each row
when (
new.Luong > (select Luong
from NHANVIEN
where MaNV = new.MaGSat))
ERROR(“Luong moi cao hon luong giam sat”);
Ràng buc toàn vn 15
Cài đt RBTV trên SQL Server
̇ SQL Server 2000
• Không h tr Assertion.
•H tr Check và Trigger.
̇ Trigger trên SQL 2000
• Xem Help Book Online
- Transact SQL → CREATE TRIGGER.