Phân lo i ràng bu c tính toàn v n CSDL

Một phần của tài liệu Giáo trình hệ quản trị cơ sở dữ liệu nguyễn trần quốc vinh (Trang 50 - 54)

II. 2.3.5.3 Bi n @@trancount trong HQT CSDL SQL Server

II.2.5 Phân lo i ràng bu c tính toàn v n CSDL

Các ràng bu c tính toàn v n có th phân lo i b ng nhi u cách.

Ràng bu c b phá hu Thông báo cho

ng i dùng Các ràng bu c

không b phá hu Ki m tra các

ràng bu c

Thao tác đ c th c

hi n Thao tác đ c

th c hi n, th c thi b sung các thao

tác đi u hoà Thao tác b

t ch i

Ng i dùng ho c trình ng d ng Th nghi m th c hi n thao tác

(INSERT, UPDATE, DELETE)

Hình II.3 Ki m tra các ràng bu c

HQT CSDL

H QU N TR C S D LI U – B n Nháp 30-08-08

http://elearning.due.edu.vn/course/view.php?id=7 Nguy n Tr n Qu c Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn} 42 II.2.5.1 B ng các cách tri n khai (realization)

M i h th ng s h u các công c c a mình đ h tr các ràng bu c tính toàn v n.

Phân bi t hai ph ng pháp tri n khai:

- H tr ràng bu c toàn v n theo ki u khai báo;

- H tr ràng bu c toàn v n theo ki u th t c.

nh ngh a 4. H tr ràng bu c toàn v n theo ki u khai báo đ c bao hàm trong s xác đ nh các ràng bu c b ng các công c c a ngôn ng đ nh ngh a d li u (DDL – Data Definition Language). Thông th ng các công c h tr tính toàn v n theo ki u khai báo (n u chúng có trong HQT CSDL) đ nh ngh a các ràng bu c trên các giá tr c a các mi n giá tr và các thu c tính, tính toàn v n c a các th c th (các khoá ti m n ng c a các qua h ) và tính toàn v n các liên k t (tính toàn v n c a các khoá ngo i foreign keys). Các ràng bu c theo ki u khai báo có th ng d ng trong quá trình t o d ng ho c s a đ i các b ng b ng các công c ngôn ng DDL ho c d i d ng các đi u ch nh (ASSERTION) riêng l .

Ví d , l nh sau s t o ra b ng NHANVIEN và đ nh ngh a cho nó vài ràng bu c tính toàn v n d li u:

CREATE TABLE NHANVIEN (nv_id INTEGER PRIMARY KEY, Nv_hoten VARCHAR(50) NOT NULL,

bp_id REFERENCES BOPHAN(bp_id) ON UPDATE CASCADE ON DELETE CASCADE);

Sau khi th c hi n l n b ng NHANVIEN s đ c t o ra cùng v i các ràng bu c tính toàn v n sau:

- tr ng nv_id s là khoá ng viên (chính) c a quan h ; - tr ng nv_hoten không th ch a các giá tr NULL;

- tr ng bp_id là đ ng ch d n ngo i đ n b ng g c (cha) BOPHAN, ngoài ra khi b n ghi trong b ng BOPHAN đ c thay đ i ho c xoá đi thì m t cách t đ ng t ng ng (cascade) các thay đ i t ng ng trong b ng con NHANVIEN ph i đ c đ a vào.

Các công c h tr tính toàn v n theo ki u khai báo đ c miêu t chi ti t trong chu n SQL và đ c nghiên c u k trong môn h c CSDL.

nh ngh a 5. H tr ràng bu c tính toàn v n theo th t c đ c bao hàm trong vi c s d ng các b y s ki n (trigger) và các th t c (stored procedure).

H QU N TR C S D LI U – B n Nháp 30-08-08

http://elearning.due.edu.vn/course/view.php?id=7 Nguy n Tr n Qu c Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn} 43 Không ph i b t k ràng bu c toàn v n nào c ng có th tri n khai b ng cách khai báo. Ràng bu c “bp_soluong ph i ch a giá tr là s l ng nhân viên th c t làm vi c trong m t b ph n” trong ví d 1 là m t ví d . th c thi ràng bu c đó c n ph i xây d ng m t b y s ki n t đ ng th c thi khi thêm m t b n ghi m i, s a đ i b n ghi ho c xoá m t b n ghi t quan h NHANVIEN, và nó s thay đ i giá tr c a tr ng bp_soluong m t cách chính xác. Ví d , khi thêm m t b n ghi m i vào b ng NHANVIEN, b y s ki n s t ng giá tr tr ng bp_soluong trong b ng BOPHAN lên m t đ n v , còn khi xoá m t b n ghi – nó s gi m b t m t đ n v . C n chú ý r ng, khi thay đ i b n ghi trong b ng NHANVIEN thì có th c n đ n các hành đ ng ph c t p h n, b i vì s a đ i b n ghi trong b ng NHANVIEN có th là chuy n m t nhân viên t b ph n này sang b ph n khác b ng cách thay đ i giá tr tr ng bp_id. Trong tr ng h p này c n ph i t ng m t đ n v cho tr ng bp_soluong c a b ph n m i và gi m m t đ n v đ i v i b ph n c .

Ngoài ra c n ph i b o v tr c các thay đ i không đúng đ n b n ghi c a b ng BOPHAN. Ví d , ng i dùng có th s a đ i thông tin v m t b ph n nh ng nh p vào tr ng bp_soluong m t giá tr không đúng. đ phòng các tr ng h p t ng t c n ph i t o ra m t b y s ki n t đ ng th c thi khi thêm vào ho c s a đ i trong b ng BOPHAN.

B y s ki n cho tr ng h p xoá b n ghi t b ng BOPHAN không c n vì đã có ràng bu c tính toàn v n liên k t t đ ng cascade xoá t t c các b n ghi liên quan t b ng NHANVIEN khi xoá b n ghi t b ng BOPHAN.

Th c t , s hi n di n c a các ràng bu c tính toàn v n (theo ki u khai báo hay theo ki u th t c) luôn luôn d n đ n vi c t o ra ho c s d ng m t mã ch ng trình nào đó d th c thi ràng bu c đó. S khác nhau gi a hai ki u là ch mã ch ng trình đó đ c l u tr đâu và đ c t o ra nh th nào.

N u ràng bu c tính toàn v n đ c tri n khai d i d ng các b y s ki n thì mã ch ng trình đó chính là thân c a b y s ki n. N u s d ng ràng bu c tính toàn v n theo ki u khai báo thì có th theo hai cách:

1. Khi khai báo ràng bu c mã ngu n c a ràng bu c l u gi d i d ng m t đ i t ng c a HQT CSDL, còn đ tri n khai ràng bu c các hàm bên trong (đã có s n) HQT CSDL s đ c d d ng, và khi đó mã đó s là m t hàm bên trong (n i hàm?) nhân HQT CSDL.

2. Khi khai báo ràng bu c HQT CSDL t đ ng t o ra các b y s ki n và chúng s th c hi n các hành đ ng c th đ ki m tra các ràng bu c.

H QU N TR C S D LI U – B n Nháp 30-08-08

http://elearning.due.edu.vn/course/view.php?id=7 Nguy n Tr n Qu c Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn} 44 Ví d s d ng các hàm c a nhân HQT CSDL vào vi c ki m tra ràng bu c ki u khai báo có th là vi c t đ ng ki m tra tính đ c nh t c a các ch m c t ng ng v i các khoá ng viên (chính) c a quan h . M t ví d khác, có th d n ra vi c h tr tính toàn v n liên k t b ng các công c HQT CSDL Oracle. Ràng bu c tính toàn v n liên k t trong Oracle là nh ng đ i t ng CSDL l u tr đ nh th c ( ) c a ràng bu c đó. Ki m tra ràng bu c đ c th c hi n b i các ch c n ng c a nhân Oracle v i đ ng d n đ n các đ i t ng đó. Ràng bu c tính toàn v n trong tr ng h p đó không đ c phép s a đ i khác đi, gi ng nh s d ng các toán t khai báo đ t o ra và s đ i các ràng bu c.

Ví d phát sinh ra các b y s ki n m i đ tri n khai các ràng bu c theo ki u khai báo có th là h th ng Visual FoxPro. B y s ki n t đ ng đ c phát sinh trong quá trình khai báo các ràng bu c tính toàn v n liên k t có th xem đ c và th m chí có th thay đ i chúng, đ chúng có th th c hi m thêm nh ng ho t đ ng b sung.

N u h th ng không h tr ràng bu c tính toàn v n liên k t theo ki u khai báo và c b y s ki n, thì mã ch ng trình dùng đ theo dõi tính toàn v n CSDL ph i đ c đ t trong ch ng trình c a ng i dùng. i u đó r t gây khó kh n trong vi c phát tri n ch ng trình và không b o v tr c các th nghi m c a ng i dùng nh p th ng các d li u không đúng vào CSDL. c bi t ph c t p trong tr ng h p CSDL ph c t p và s l ng các ch ng trình khác nhau làm vi c v i CSDL đó. Ch ng h n, có th nhi u nhân viên thu c các b ph n khác nhau c a phòng đào t o m t tr ng đ i h c có th truy c p và s a đ i d li u trên CSDL c a tr ng. M i ch ng trình trong s đó ph i ch a chính xác mã ngu n ch u trách nhi m duy trì tính toàn v n c a CSDL. Trong tr ng h p này, các nhà phát tri n ph n m m g p khó kh n nh t. H ph i thay đ i trong t t c các ch ng trình cùng m t mã đó cùng m t v trí, biên d ch l i t t c và sau đó l i cung c p cho t t c các ng i dùng phiên b n ph n m m m i.

II.2.5.2 Phân lo i ràng bu c tính toàn v n theo th i đi m ki m tra Theo th i đi m ki m tra có th phân làm hai lo i:

− Ràng bu c đ c ki m tra ngay l p t c

− Ràng bu c v i s ki m tra đ c trì hoãn.

nh ngh a 6. Ràng bu c đ c ki m tra ngay l p t c là nh ng ràng bu c đ c ki m tra ngay l p t c vào th i đi m th c hi n các thao tác có th phá hu ràng bu c đó.

H QU N TR C S D LI U – B n Nháp 30-08-08

http://elearning.due.edu.vn/course/view.php?id=7 Nguy n Tr n Qu c Vinh ntquocvinh@{gmail.com, yahoo.com, due.edu.vn} 45 Ví d ki m tra tính đ c nh t c a khoá ng viên (chính) đ c th c hi n vào th i đi m thêm m t b n ghi m i vào b ng. N u ràng bu c b vi ph m thì thao tác s b t ch i.

Còn giao tác có ch a thao tác v b t ch i vì phá hu tính toàn v n c a CSDL thông th ng c ng b rollback.

nh ngh a 7. Ràng bu c v i th i đi m ki m tra trì hoãn là ràng bu c đ c ki m tra vào th i đi m c đ nh giao tác b ng l nh COMMIT WORK.

Bên trong giao tác, ràng bu c có th không đ c ki m tra. N u th i đi m c đ nh giao tác phát hi n s xâm ph m ràng bu c v i th i đi m ki m tra trì hoãn, thì giao tác s b rollback. Ví d ràng bu c có th không không ki m tra ngay l p t c có th là tr ng h p ví d 1. i u đó có th x y ra vì giao tác th c hi n vi c thêm m t b n ghi vào b ng NHANVIEN bao g m ít nh t hai thao tác: thêm b n ghi v nhân viên m i vào b ng NHANVIEN và s a đ i m t b n ghi trong b n BOPHAN. Rõ rang ràng bu c có th không đúng sau khi hoàn thành thao tác đ u tiên nh ng l i tr nên đúng sau thao tác th hai.

II.2.5.3 Phân lo i ràng bu c tính toàn v n theo không gian ng d ng

Theo không gian ng d ng ràng bu c có th đ c phân ra theo các nhóm sau:

Một phần của tài liệu Giáo trình hệ quản trị cơ sở dữ liệu nguyễn trần quốc vinh (Trang 50 - 54)

Tải bản đầy đủ (PDF)

(217 trang)