CHƯƠNG II : CÁC RÀNG BUỘC VÀ CÁC TRIGGER
2.1 KHểA VÀ KHểA NGOÀI
2.1.5 Duy trỡ toàn vẹn tham chiếu
Chỳng ta đó nhỡn thấy làm thế nào để mụ tả một khoỏ ngoài và chỳng ta cũng biết rằng mụ tả đú kộo theo việc một tập giỏ trị (khỏc NULL) đối với cỏc thuộc tớnh khoỏ ngoài cũng phải xuất hiện trong cỏc thuộc tớnh của quan hệ được tham chiếu. Ràng buộc này sẽ được duy trỡ thế nào khi cú xảy ra việc cập nhật cơ sở dữ liệu? Cú ba cỏch sau đõy:
SQL cú một chớnh sỏch ngầm định là mọi cập nhật vi phạm ràng buộc toàn vẹn tham chiếu sẽ bị hệ thống loại ra. Vớ dụ, xột vớ dụ 2.3, trong đú đũi hỏi rằng một giỏ trị của MósốĐV trong quan hệ DỰÁN cũng là một giỏ trị của MósốĐV trong ĐƠNVỊ. Cỏc hành động sau đõy sẽ bị hệ thống loại bỏ:
ư Chỳng ta cố gắng chốn vào quan hệ DỰÁN một bộ giỏ trị mới mà giỏ trị của thuộc tớnh MósốĐV của nú là khỏc NULL và khụng là giỏ trị của thuộc tớnh MósốĐV của bất kỳ một bộ giỏ trị nào của quan hệ ĐƠNVỊ. Phộp chốn bị hệ thống loại bỏ và bộ giỏ trị đú sẽ khụng bao giờ được chốn vào quan hệ ư Chỳng ta cố gắng cập nhật một bộ của quan hệ DỰÁN để thay đổi thành phần MósốĐV thành một giỏ trị khỏc NULL mà khụng là thành phần của bất kỳ bộ giỏ trị nào của quan hệ ĐƠNVỊ. Phộp cập nhật bị loại bỏ và bộ khụng được thay đổi.
ư Chỳng ta cố gắng loại bỏ một bộ giỏ trị của quan hệ ĐƠNVỊ mà giỏ trị của thuộc tớnh MósốĐV của nú xuất hiện như một giỏ trị của thuộc tớnh MósốĐV của một hay nhiều bộ giỏ trị của quan hệ DỰÁN. Phộp xoỏ bị loại bỏ và bộ vẫn cũn trong ĐƠNVỊ.
ư Chỳng ta cố gắng cập nhật một bộ của quan hệ ĐƠNVỊ theo cỏch làm thay đổi giỏ trị của thuộc tớnh MósốĐV và giỏ trị cũ của MósốĐV là giỏ trị của thuộc tớnh MósốĐV trong một bộ của quan hệ DỰÁN. Hệ thống loại bỏ sự thay đổi và ĐƠNVỊ vẫn như cũ.
b) Chớnh sỏch Cascade
Cú một cỏch khỏc để điều khiển việc xoỏ và cập nhật đối với một quan hệ được tham chiếu gọi là chớnh sỏch cascade. Một cỏch trực quan, cỏc thay đổi đối với cỏc thuộc tớnh được tham chiếu được bắt chước ở khoỏ ngoài.
Dưới chớnh sỏch cascade, khi chỳng ta loại bỏ một bộ giỏ trị của quan hệ được tham chiếu, để duy trỡ toàn vẹn tham chiếu, hệ thống sẽ bỏ cỏc bộ giỏ trị tương ứng của quan hệ tham chiếu. Cỏc cập nhật cũng được thực hiện một cỏch tương tự. Nếu chỳng ta thay đổi giỏ trị của khoỏ chớnh trong một bộ của quan hệ được tham chiếu, thỡ cỏc giỏ trị của cỏc thuộc tớnh tương ứng (khoỏ ngoài) trong cỏc bộ giỏ trị của quan hệ tham chiếu cũng được thay đổi
c) Chớnh sỏch SetưNull
Một cỏch tiếp cận khỏc để giải quyết vấn đề là thay đổi giỏ trị của khoỏ ngoài của cỏc bộ bị loại bỏ hoặc bị cập nhật thành NULL. Cỏch này gọi là chớnh sỏch SetưNull.
Cỏc tuỳ chọn cú thể được chọn đối với cỏc phộp cập nhật và xoỏ một cỏch độc lập và chỳng được liệt kờ ra cựng với khai bỏo của khoỏ ngoài. Chỳng ta khai bỏo chỳng bằng ON DELETE hoặc ON UPDATE theo sau là SET NULL hoặc CASCADE.
Vớ dụ 2.4 Chỳng ta hóy sửa đổi khai bỏo của quan hệ DỰÁN(TờnDA, MósốDA, ĐịađiểmDA, MósốĐV)
trong vớ dụ 2.3 để chỉ rừ điều khiển xoỏ và cập nhật trong quan hệ ĐƠNVỊ. Ta cú khai bỏo như sau
1) CREATE TABLE DỰÁN 2) (TờnDA VARCHAR(15),
3) MósốDA INT PRIMARY KEY, 4) ĐịađiểmDA VARCHAR(15),
5) MósốĐV INT REFERENCES ĐƠNVỊ(MósốDA)), 6) ON DELETE SET NULL
7) ON UPDATE CASCADE );
Khai bỏo trờn cú nghĩa là mỗi khi ta xoỏ một bộ giỏ trị của quan hệ ĐƠNVỊ ta sẽ làm cho giỏ trị của thuộc tớnh MósốĐVcủa quan hệ DỰÁN tham chiếu đến nú trở thành NULL. Mỗi khi ta cập nhật giỏ trị MósốĐV của một bộ giỏ trị của quan hệ ĐƠNVỊ, ta sẽ làm thay đổi của MósốĐV trong bộ giỏ trị của quan hệ DỰÁN tham chiếu đến nú. Giỏ trị đó được cập nhật của MósốĐV trong quan hệ ĐƠNVỊ là giỏ trị mới của MósốĐV trong DỰÁN.