You are on page 1of 7

CI T RNG BUC TON VN

1 Gii thiu
Rng buc ton vn l nhng quy tc, quy nh trn CSDL nhm m bo cho
CSDL c nht qun v ng n vi ng ngha ca thc t hay mong mun ca con
ngi.
Cc thnh phn c bn ca mt rng buc ton vn:
Pht biu RBTV bng ngn ng t nhin: l mt pht biu t nhin v rng
buc ton vn
Bi cnh: l nhng quan h lin quan n RBTV. Nhng quan h lin quan l
khi thc hin nhng thao tc cp nht d liu ln nhng quan h ny th RBTV b vi
phm.
Ni dung: l pht biu li ca RBTV bng ngn ng hnh thc th hin
c s cht ch. Mt s ngn ng hnh thc c s dng nh: php tnh quan h,
i s quan h hoc m gi.
Bng tm nh hng: L bng m t cc s nh hng n RBVT ca cc thao
tc cp nht ln cc bng d liu.
Cc loi RBTV:
RBTV min gi tr
RBTV duy nht
RBTV tham chiu
RBTV lin thuc tnh trn mt quan h
RBTV lin b trn mt quan h
RBTV lin b lin quan h
RBTV thuc tnh tng hp
2 Cc k thut ci t rng buc ton vn n gin
2.1 Cc k thut c bn
NOT NULL
PRIMARY KEY
FOREIGN KEY
CHECK
Cc trng hp s dng:
PRIMARY KEY: S dng dnh ring cho RBTV kho chnh. Mi bng trong m
hnh d liu quan h ca SQL Server c ti a mt kho chnh.

UNIQUE: S dng dnh ring cho RBTV duy nht. Cc thuc tnh c khai
bo RBTV duy nht c th xem nh cc thuc tnh ca kho ng vin. Mi bng c th
khai bo nhiu kho ng vin.
FOREIGN KEY: S dng dnh ring cho vic to RBTV tham chiu hoc kho
ngoi. Cc thuc tnh kho ngoi phi tham chiu n cc thuc tnh kho (kho
chnh hoc kho ng vin).
CHECK: S dng dnh ring cho vic to cc RBTV khc. Lc ny cc RBTV
c m t nh mt biu thc iu kin m cc d liu phi tho biu thc iu kin
.
Cch s dng cc k thut ny c trnh by trong phn xy dng cu trc C
s d liu.
2.2 RULE
RULE c thit lp nh l mt quy tc ca mt thuc tnh. Trnh t cc bc
to v s dng RULE:
To RULE:
CREATE RULE [Tn_Rule]
AS [Biu_thc_m_t_iu_kin] [ ; ]
Trong :
[Tn_Rule]: Tn do ngi lp trnh t
[Biu_thc_m_t_iu_kin]: Biu thc tng ng vi ni dung ca RULE.
Trong biu thc ny ch c s dng 1 bin (bt u bng @) m t RULE. Khi
gn RULE cho thuc tnh no th bin tng ng vi thuc tnh .
Gn RULE cho thuc tnh:
EXEC sp_bindrule [ @rulename = ] 'Tn_rule' ,
[ @objname = ] 'Tn_bng.Tn_thuc_tnh'
Ghi ch: Sinh vin tm hiu thm mt s c php s dng RULE khc: s dng
cc tham s futureonly, gn RULE cho kiu d liu
Tho b RULE cho thuc tnh:
EXEC sp_unbindrule [ @objname = ] 'Tn_bng.Tn_thuc_tnh'
Ghi ch: Khi g b RULE th g b ton b RULE m c gn vo thuc
tnh.
Xa RULE
DROP RULE [Tn_Rule]
V d 1: Ci t RBTV lng ca gio vin thuc khong ($1000, $20000) bng
cch s dng RULE.

To RULE biu din rng buc thuc 1 khong.


CREATE RULE range_rule AS
@range>= $1000 AND @range <$20000;
Gn RULE va to cho thuc tnh Luong ca bng GIAOVIEN
sp_bindrule 'range_rule' , 'GIAOVIEN.Luong'
Khi khng s dng RBTV ny na th tho b RULE khi thuc tnh lng.
sp_unbindrule 'GIAOVIEN.Luong'
2.3 K thut ci t RBTV nng cao: TRIGGER
2.3.1 Gii thiu
L mt c ch m bo rng buc ton vn s dng kh nng lp trnh ca
H qun tr c s d liu.
2.3.2 C php:
To Trigger
CREATE TRIGGER [Tn_trigger] ON [Tn_bng]
FOR [Cc_thao_tc: insert, update hoc delete] AS
IF UPDATE (Tn thuc tnh)
BEGIN
Thn_ca_trigger: M ngun kim tra hoc cp nht END
Mt s lu khi s dng trigger:
Mt trigger c gn vi 1 bng gim st s thay i d liu ca bng .
M ngun trong phn Thn_ca_trigger s c t ng gi thc hin khi xy ra
Cc_thao_tc cp nht d liu (insert, update hoc delete) ln bng Tn_bng. Do
ni dung m ngun ca Thn_ca_trigger thng s thc hin nhng cng vic nh:
kim tra d liu, thay i d liu, hu b thao tc lm cho rng buc ton vn
khng b vi phm.
Trong phn thn ca trigger d dng cho cc thao tc kim tra d liu, h
qun tr cung cp 2 bng tm cho ngi vit trigger s dng. Hai bng ny c cu trc
ging ht nh bng chnh:
o Bng inserted: cha nhng dng mi thm vo
o Bng deleted cha nhng dng va mi b xo i.
Lu : Khng c bng updated v thao tc cp nht c xem l bao gm thao
tc xo v thm mi. Khi thc hin thao tc cp nht, bng inserted cha d liu mi,
bng deleted cha d liu c.
Trong MS SQL Server, trigger c gi thc hin sau khi thao tc tng ng

(insert, update, delete) c thc hin trn bng chnh. Ngi dng nu mun khi
phc li d liu trong bng chnh th gi lnh rollback. Ngoi ra s dng hm
raiserror thng bo li khi pht hin thy s vi phm RBTV.
Xo Trigger
DROP TRIGGER [Tn_trigger]
Cp nht ni dung Trigger:
ALTER TRIGGER [Tn_trigger] ON [Tn_bng]
FOR [Cc_thao_tc: insert, update hoc delete] AS
IF UPDATE (Tn thuc tnh)
BEGIN
Thn_ca_trigger: M ngun kim tra hoc cp nht
TH1: M ngun kim tra
IF (iu kin RBTV vi phm ) BEGIN
raiserror (N'Li: XXXX ', 16, 1)
rollback END
TH2: M ngun cp nht UPDATE

END

2.3.3 Mt s v d:
V d 2: Ci t RBTV Lng ca gio vin phi >= 1000 s dng k
thut trigger.

Nhn xt: RBTV ny lin quan n bng GIAOVIEN ( ON GIAOVIEN), khi


thm mi mt dng (insert) hoc cp nht thuc tnh LUONG (update) th RBTV
ny c kh nng b vi phm. Khi xo th s khng nh hng n RBTV ny
(FOR insert, update).
T

+(LUONG)

GIAOVIEN

S dng trigger kim tra nhng d liu mi a vo, nu vi phm quy


nhbo li v khi phc li d liu.
CREATE TRIGGER trgLuong ON GIAOVIEN
FOR insert, update
AS
if update(LUONG) BEGIN
if exists (select * from inserted where LUONG < 1000)
begin
if exists (select * from inserted where LUONG < 1000)
begin
raiserror (N'Li: Lng ca gio vin phi >= 1000 ', 16, 1)
rollback
end
END
Gi s c bng CTHD (MaHD, MaSP, SoLuong, DonGia, ThanhTien)
V d 3: Ci t RBTV sau Thnh tin phi bng S Lng * n gi
Nhn xt: RBTV ny lin quan n bng CTHD, khi thm mi mt dng d
liu hoc khi cp nht cc thuc tnh nh SoLuong, DonGia th cn cp nht li
ThanhTien tng ng.

CTHD

+ (SoLuong, DonGia,
ThanhTien)

S dng trigger cp nht d liu ng vi RBTV.

CREATE TRIGGER trgCapNhatThanhTien ON CTHD


FOR insert, update AS
IF update(SoLuong, DonGia, ThanhTien) BEGIN
Update CTHD
Set ThanhTien = SoLuong * DonGia
Where EXISTS (select * from inserted I where i.MAHD=CTHD.MAHD AND
i.MASP = CTHD.MASP)
END
V d 4: Ci t RBTV sau Gio vin lm trng b mn th phi thuc b
mn
T

GIAOVIEN

+ (MABM)

BOMON

+ (TRBOMON)

Gi s c cc RBTV kho chnh, kho ngoi.


CREATE TRIGGER trgTruongBoMon_BOMON ON BOMON
FOR update
AS
IF update(TRBOMON)
BEGIN
IF exists (SELECT *
FROM INSERTED I
WHERE I.TRBOMON IS NOT NULL
AND I.TRBOMON NOT IN ( SELECT G.MAGV
FROM GIAOVIEN G
WHERE G.MABM=I.MABM ) )
BEGIN
raiserror (N'Li: Trng b mn phi l ngi trong b mn ', 16,
1)
rollback
END
END

CREATE TRIGGER trgTruongBoMon_GIAOVIEN ON GIAOVIEN


FOR update AS
IF update(MABM) BEGIN
IF exists (SELECT *
FROM BOMON B, INSERTED I
WHERE B.TRBOMON=I.MAGV AND B.MABM <> I.MABM)
BEGIN
raiserror(N'Li: Trng b mn phi l ngi trong b mn',
16,1)
rollback
END
END
3 Bi tp ti lp
Yu cu:
1. Ci t mt s RBTV min gi tr s dng k thut CHECK, RULE
a. Gii tnh ca Gio vin phi l Nam hoc N
b. Lng ca gio vin phi l mt s trn chc.
c. Tui ca gio vin phi t 18 tui n 60 tui.
2. Ci t cc rng buc ton vn R1, R3, R5, R7, , R13 s dng TRIGGER
(qun l ti).
Thi lng: 02 gi.
4 Bi tp v nh
Yu cu: Ci t cc rng buc ton vn R2, R4, R6, , R14, R15,, R19 s
dng TRIGGER (qun l ti).
Thi lng: 04 gi.

You might also like