Tải bản đầy đủ (.pdf) (15 trang)

Ràng buộc toàn vẹn cơ sở dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (168.6 KB, 15 trang )

Ràng buc toàn vn 1
Ràng buc toàn vn
(Integrity Constraint)
Chng 6
Ni dung trình bày
̇ Gii thiu
̇ Các yu t ca RBTV
̇ Phân loi RBTV
̇ Cài đt RBTV
Ràng buc toàn vn 2
Gii thiu
̇ RBTV
•Các điu kin mi trng thái ca quan h đu phi tha  bt k thi đim
nào.
•Xut phát t các qui tc qun lý đc áp đt lên các đi tng trong th
gii thc.
̇ Mc đích ca RBTV
• m bo tính nht quán ca d liu.
-Ngi giám sát phi là mt nhân viên trong công ty.
-D án phi đc điu phi bi mt phòng trong công ty.
• m bo ng ngha thc t ca CSDL.
- Ngày nhn chc > Ngày sinh.
-Lng nhân viên < Lng trng phòng.
̇ RBTV có 3 yu t
•Ni dung.
•Bi cnh.
•Bng tm nh hng.
Ni dung ca RBTV
̇ c phát biu bng
• Ngôn ng t nhiên.
- n gin, d hiu.


• Ngôn ng hình thc
- i s quan h, phép tính quan h, mã gi (pseudo
code).
-Cós toán hc, đôi lúc khó hiu.
Ràng buc toàn vn 3
Ví d
̇ RB-1
•Mi nhân viên có mt mã s riêng bit dùng đ phân bit vi 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
•Mi nhân viên phi làm vic trong mt phòng ban.
• NHANVIEN[MaPhong] ⊆ PHONGBAN[MaPB]
̇ RB-3
•Mi 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
•Mi phòng ban phi có ít nht mt nhân viên

• ∀s ∈ PHONGBAN (∃t ∈ NHANVIEN (t.MaPhong = s.MaPB))
Bi cnh ca RBTV
̇ Là nhng quan h mà RBTV có hiu lc.
̇ Bi cnh có th là mt quan h hoc nhiu quan
h.
̇ Ví d
•RB-1
có bi cnh là NHANVIEN.
•RB-2, RB-4
có bi cnh là NHANVIEN, PHONGBAN.
•RB-3
có bi cnh là THAMGIA.
Ràng buc toàn vn 4
Bng tm nh hng ca RBTV (1)
̇ RBTV có th b vi phm khi thc hin các thao tác cp nht
trên bi cnh
• Thêm
•Xóa
•Sa
̇ Bng tm nh hng dùng đ xác đnh thi đim cn kim
tra RBTV.
+Quan h k

-++Quan h 1
SaXóaThêmTên RBTV
+ : cn phi kim tra RBTV
- : không cn kim tra RBTV
Các quan h
bi cnh
Ví d

+NHANVIEN
SaXóaThêmRB-1
-+-PHONGBAN
+-+NHANVIEN
SaXóaThêmRB-2
+THAMGIA
SaXóaThêmRB-3
+PHONGBAN
+ NHANVIEN
SaXóaThêmRB-4
Ràng buc toàn vn 5
Bng tm nh hng ca RBTV (2)
̇ Bng tm nh hng tng hp
•Xây dng trên c s bng tm nh hng ca các RBTV.
•  xác đnh thi đim kim tra RBTV khi mt thao tác cp nht trên
mt quan h nào đó đc thc hin.





+
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 buc toàn vn 6
Phân loi RBTV
̇ Phân loi theo bi cnh
•Bi cnh là mt quan h.
•Bi cnh là nhiu quan h.
̇ Mc đích
• Giúp ngi thit k phát hin các RBTV ca mt CSDL.
̇ RBTV có bi cnh là mt quan h

• RBTV min giá tr.
• RBTV liên thuc tính.
• RBTV liên b.
̇ RBTV có bi cnh là nhiu quan h
• RBTV tham chiu.
• RBTV liên thuc tính - liên quan h
• RBTV liên b - liên quan h.
• RBTV thuc tính tng hp.
RBTV min giá tr (1)
̇ RB-5
•Lng ca nhân viên không thp hn 10.000.
• ∀t ∈ NHANVIEN (t.Luong ≥ 10.000)
+-+NHANVIEN
SaXóaThêmRB-5
Ràng buc toàn vn 7
RBTV min giá tr (2)
̇ RB-6
•Gi s quan h NHANVIEN có thêm thuc tính ngày xp
lng. Khi mc lng thay đi, thì giá tr ca ngày xp
lng phi luôn tng.
• τ : NHANVIEN → NHANVIEN
∀t ∈ NHANVIEN (t.NgXepLuong < τ(t).NgXepLuong)
+ NHANVIEN
SaXóaThêmRB-6
RBTV liên thuc tính
̇ RB-7
• Ngày xp lng phi ln hn ngày sinh ca nhân viên.
• ∀t ∈ NHANVIEN (t.NgSinh < t.NgXepLuong)
̇ RB-8
•Mt nhân viên không đc giám sát chính mình.

• ∀t ∈ NHANVIEN (t.MaGSat ≠ t.MaNV)
+-+NHANVIEN
SaXóaThêmRB-7
+-+NHANVIEN
SaXóaThêmRB-8
Ràng buc toàn vn 8
RBTV liên b
̇ S tn ti ca b này ph thuc vào b
khác.
•Trng hp đc bit là ràng buc khóa chính.
̇ RB-1
và RB-3.
RBTV tham chiu (1)
̇ RB-9
•Ch có nhân viên ca công ty mi đc tham gia vào d
án ca công ty.
-S tn ti ca mt b t ∈ THAMGIA ph thuc vào s tn ti ca
mt b u ∈ NHANVIEN và mt b v ∈ DUAN.
• ∀t ∈ THAMGIA (∃u ∈ NHANVIEN, ∃v ∈ DUAN (u.MaNV
= t.MaNV ∧ v.MaDA = t.MaDA))
-+-DUAN
-+-NHANVIEN
+THAMGIA
SaXóaThêmRB-9
Ràng buc toàn vn 9
RBTV tham chiu (2)
̇ RB-10
•Mi thân nhân phi có mi quan h h hàng vi nhân
viên ca công ty.
-S tn ti ca b mt t ∈ THANNHAN ph thuc vào s tn ti

ca mt b u ∈ NHANVIEN.
• ∀t ∈ THANNHAN (∃u ∈ NHANVIEN (u.MaNV = t.MaNV))
+THANNHAN
-+-NHANVIEN
SaXóaThêmRB-10
RBTV tham chiu (3)
̇ RB-11
•Ngi giám sát trc tip (nu có) phi là mt nhân viên
trong công ty.
-S tn ti ca b mt t ∈ NHANVIEN ph thuc vào s tn ti
ca mt b u ∈ NHANVIEN.
• ∀t ∈ NHANVIEN (t ≠ null ∧∃u ∈ NHANVIEN (u.MaNV =
t.MaGS))
̇ Nhn xét
• RBTV tham chiu có th có bi cnh là mt quan h.
+++NHANVIEN
SaXóaThêmRB-11
Ràng buc toàn vn 10
RBTV liên thuc tính - liên quan h
̇ Mi liên h gia các thuc tính trong nhiu lc đ
quan h.
̇ RB-12
•Ngày nhn chc ca trng phòng phi ln hn ngày
sinh.
• ∀t ∈ PHONGBAN (∃u ∈ NHANVIEN (u.MaNV =
t.TrPhong ∧ u.NgSinh < t.NgNhanChuc))
+-+PHONGBAN
+ NHANVIEN
SaXóaThêmRB-12
RBTV liên b - liên quan h

̇ Mi liên h gia các b trên nhiu lc đ quan
h.
̇ RB-4
.
̇ RB-13
•Lng ca nhân viên không đc cao hn lng trng
phòng.
• ∀t ∈ NHANVIEN (∃u ∈ PHONGBAN (∃v ∈ NHANVIEN
(v.MaNV = u.TrPhong ∧ u.MaPB = t.MaPhong ∧ v.Luong
> t.Luong)))
+-+PHONGBAN
+-+NHANVIEN
SaXóaThêmRB-13
Ràng buc toàn vn 11
RBTV thuc tính tng hp
̇ Thuc tính ca lc đ này đc tính toán t các
thuc tính hoc các b ca các lc đ khác.
̇ RB-14
•Gi s PHONGBAN có thêm thuc tính lu s nhân viên
ca phòng. Khi đós nhân viên ca phòng phi bng
tng s nhân viên thuc phòng đó.
• ∀t ∈PHONGBAN (t.SoNV = card({u | u ∈ NHANVIEN ∧
u.MaPhong = t.MaPB}))
+-+PHONGBAN
+++NHANVIEN
SaXóaThêmRB-14
Cài đt RBTV vi Assertion (1)
̇ create assertion <Tên assertion> check <điu kin>
̇ 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 buc toàn vn 12
Cài đt RBTV vi Assertion (2)
̇ RB-3
• create assertion (
check (not exists (
select MaNV
from THAMGIA
group by MaNV
having count(*) > 3));
Cài đt RBTV vi Check (1)
̇ create table <Tên bng> (
<khai báo thuc tính> check <điu kin>,
,
check <điu kin>
);
̇ RB-5
• create table NHANVIEN (
,
Luong int check (Luong >= 10000),
,
)
Ràng buc toàn vn 13
Cài đt RBTV vi Check (2)
̇ RB-7

• create table NHANVIEN (
,
NgSinh date,
NgXepLuong date,
,
check (NgSinh < NgXepLuong)
);
Cài đt RBTV vi Trigger (1)
̇ Tp hp các lnh t đng thc hin khi xy ra các
s kin nào đó.
̇ Mô hình ECA (S kin - iu kin - Hành đng)
S KIN HÀNH NGIU KIN
úng
-Thêm
-Xóa
-Sa
Tp hp các lnhXác đnh trên
các b c và mi
Ràng buc toàn vn 14
Cài đt RBTV vi Trigger (2)
̇ create trigger <Tên trigger>
<after | before> <insert | delete | update> on <Tên
bng>
[for each row | for each statement]
[when <điu kin>]
<Các lnh SQL>;
̇ drop trigger <Tên trigger>
Cài đt RBTV vi 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 buc toàn vn 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.

×