Cỏc ràng buộc kiểm tra (CHECK)dựa trờn thuộc tớnh

Một phần của tài liệu Giao_trinh_SQL_server pptx (Trang 77 - 79)

Cỏc ràng buộc phức tạp hơn cú thể gắn với một mụ tả thuộc tớnh bằng từ khoỏ CHECK sau đú là một điều kiện phải thoả món đối với mọi giỏ trị của thuộc tớnh này. Điều kiện được đặt trong dấu ngoặc. Trờn thực tế, một ràng buộc CHECK dựa trờn thuộc tớnh giống như một hạn chế đơn giản trờn cỏc giỏ trị, như là việc liệt kờ cỏc giỏ trị hợp thức hoặc là một bất phương trỡnh số học. Tuy nhiờn, về nguyờn tắc, điều kiện cú thể là bất kỳ cỏi gỡ cú thể đi sau WHERE trong một truy vấn SQL. Điều kiện này cú thể tham chiếu đến thuộc tớnh bị ràng buộc bằng cỏch sử dụng tờn của thuộc tớnh đú trong biểu thức của nú. Tuy nhiờn, nếu điều kiện tham chiếu đến cỏc quan hệ khỏc hoặc cỏc thuộc tớnh khỏc của quan hệ thỡ quan hệ phải được đưa vào trong mệnh đề FROM của một truy vấn con (ngay cả nếu quan hệ được tham chiếu đến là một quan hệ chứa thuộc tớnh bị kiểm tra).

Một ràng buộc CHECK dựa trờn thuộc tớnh được kiểm tra khi một bộ nào đấy nhận một giỏ trị mới cho thuộc tớnh này. Giỏ trị mới cú thể được đưa vào bằng một sửa đổi đối với bộ hoặc cú thể là một phần của bộ được thờm vào. Nếu giỏ trị mới vi phạm ràng buộc thỡ phộp sửa đổi bị loại bỏ. Chỳng ta sẽ thấy trong vớ dụ 2.7, ràng buộc CHECK dựa trờn thuộc tớnh sẽ khụng được kiểm tra nếu một sửa đổi cơ sở dữ liệu khụng làm thay đổi giỏ trị của thuộc tớnh gắn với ràng buộc. Hạn chế đú cú thể dẫn đến ràng buộc trở nờn bị vi phạm. Trước tiờn ta hóy xột một vớ dụ đơn giản về kiểm tra dựa trờn thuộc tớnh.

Vớ dụ 2.7 Giả sử chỳng ta muốn đũi hỏi rằng cỏc Mó sốĐV chỉ gồm cú một chữ số. Ta cú thể sửa đổi dũng 5) của vớ dụ 2.4, một mụ tả của lược đồ đối với quan hệ DỰÁN như sau:

4) MósốDA INT REFERENCES ĐƠNVỊ(MósốDA)

Việc đề cập đến cỏc thuộc tớnh khỏc của quan hệ hoặc cỏc quan hệ khỏc trong điều kiện là được phộp. Để làm điều đú, trong điều kiện phải cú truy vấn con. Như chỳng ta đó núi, điều kiện cú thể là bất kỳ cỏi gỡ cú thể đi sau WHERE trong một lệnh select-from-where của SQL. Tuy nhiờn, chỳng ta cần nhận thấy rằng việc kiểm tra ràng buộc chỉ được kết hợp với thuộc tớnh cần kiểm tra chứ khụng phải với mỗi quan hệ hoặc thuộc tớnh kể ra trong ràng buộc. Kết quả là một điều kiện phức tạp cú thể trở thành sai nếu một phần tử nào đú khỏc với thuộc tớnh cần kiểm tra thay đổi…

Vớ dụ 2.8 Chỳng ta cú thể giả thiết rằng ta cú thể thay thế một ràng buộc toàn vẹn tham chiếu bằng một ràng buộc CHECK dựa trờn thuộc tớnh đũi hỏi sự tồn tại của giỏ trị được tham chiếu. Sau đõy là một sự cố gắng sai lầm nhằm thay thế đũi hỏi rằng giỏ trị của MósốDA trong một bộ (TờnDA, MósốDA, ĐịađiểmDA, MósốĐV) của quan hệ DỰÁN phải xuất hiện trong thành phần MósốĐV của một bộ nào đấy của quan hệ ĐƠNVỊ. Giả sử dũng 5) của vớ dụ 2.4 được thay thế bằng:

4) MósốĐV INT CHECK (MósốĐV IN(SELECT MósốĐV FROM ĐƠNVỊ)

Lệnh này là một ràng buộc CHECK dựa trờn thuộc tớnh hợp lệ nhưng ta hóy xem xột hiệu quả của nú.

• Nếu ta cố gắng chốn một bộ mới vào DỰÁN và bộ đú cú giỏ trị của MósốĐV khụng là mó số của một đơn vị nào cả, khi đú phộp chốn bị loại bỏ.

• Nếu ta cố gắng cập nhật thành phần MósốĐV của một bộ DỰÁN, và giỏ trị mới khụng phải là một giỏ trị của thuộc tớnh MósốĐV trong một bộ nào cả của ĐƠNVỊ, phộp cập nhật bị loại bỏ.

• Tuy nhiờn, nếu chỳng ta thay đổi quan hệ ĐƠNVỊ bằng cỏch loại bỏ một bộ giỏ trị, thay đổi đú là khụng nhỡn thấy đối với ràng buộc CHECK ở trờn. Như vậy, phộp loại bỏ được chấp nhận mặc dự ràng buộc CHECK dựa vào thuộc tớnh trờn MósốĐV bõy giờ bị vi phạm.

Một phần của tài liệu Giao_trinh_SQL_server pptx (Trang 77 - 79)

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

(177 trang)
w