380 likes | 638 Views
Ràng buộc toàn vẹn. Toàn Vẹn Dữ Liệu. Hệ thống cơ sở dữ liệu dùng các quy tắc (rule) để đảm bảo dữ liệu thực tế được lưu trữ trong nó. Ví dụ : Hệ thống cơ sở dữ liệu chỉ đảm bảo dữ liệu “có thể đúng”. Dữ liệu cần phải được biên dịch với các “Ràng buộc toàn vẹn”. Ràng buộc toàn vẹn.
E N D
Toàn Vẹn Dữ Liệu • Hệ thống cơ sở dữ liệu dùng các quy tắc (rule) để đảm bảo dữ liệu thực tế được lưu trữ trong nó. • Ví dụ : • Hệ thống cơ sở dữ liệu chỉ đảm bảo dữ liệu “có thể đúng”. • Dữ liệu cần phải được biên dịch với các “Ràng buộc toàn vẹn”.
Ràng buộc toàn vẹn • RBTV là các quy luật đảm bảo dữ liệu chính xác và nhất quán. • Toàn vẹn dữ liệu được triển khai ở nhiều mức độ khác nhau : ràng buộc(RB) miền, RB chuyển tiếp, RB thực thể, RBTV tham chiếu, RBTV cơ sở dữ liệu, RBTV giao tác.
Triển Khai Toàn Vẹn Dữ Liệu • Thực hiện tòan vẹn dữ liệu mức vật lý. • Cơ sở dữ liệu quan hệ hỗ trợ : • Tòan vẹn khai báo (Declarative Integrity) • Toàn vẹn thủ tục (Procedural Integrity)
Ràng Buộc Miền • Miền : tập giá trị có thể có của 1 thuộc tính. • RB miền : quy tắc xác định các giá trị hợp lệ của thuộc tính. • Miền – Kiểu dữ liệu. • Giá trị “unknown” và “nonexistent”. • Xác định tập giá trị biểu diễn cho 1 miền giá trị.
Triển khai RB miền • SQL Server hỗ trợ triển khai RB miền thông qua kiểu dữ liệu do người dùng định nghĩa (user define data types = UDDTs). • UDDT được tạo ra thông qua SQL SEM, hay sp_addtype. • UDDT gồm : quy tắc và giá trị mặc định. • Sử dụng bảng tra cứu và khóa ngoại
Ràng Buộc Chuyển Tiếp • Định nghĩa các trạng thái 1 bộ duyệt qua 1 cách hợp lệ. • Trạng thái được định nghĩa thông qua 1 thuộc tính đơn. • Trạng thái được định nghĩa thông qua nhiều thuộc tính hay nhiều quan hệ.
Triển khai RB chuyển tiếp • Thực thi trigger
Ràng buộc CSDL • Là hình thức phổ biến nhất của ràng buộc tòan vẹn. • Tham chiếu đến nhiều hơn 1 quan hệ • Quy trình công việc – Ràng buộc csdl
Ràng buộc giao tác • Giao tác là nhóm các hành động thao tác cơ sở dữ liệu. • Quy trình công việc – ràng buộc giao tác.
Triển khai RB giao tác và RB CSDL • Trigger
Toànvẹnthựcthể - Entity Integrity • Đảm bảo toàn vẹn cho các thực thể được mô hình bởi hệ thống. • Ví dụ, ở mức độ đơn giản nhất, khóa chính là một Ràng buộc thực thể, đảm bảo ‘mỗi thực thể là duy nhất’ • Ràng buộc thực thể ảnh hưởng đến một thuộc tính, nhiều thuộc tính, hoặc toàn bộ quan hệ.
Toànvẹnthựcthể - Entity Integrity • Toàn vẹn cho một thuộc tính đơn: • Việc xác định thuộc tính là dựa vào một miền giá trị của nó • Thuộc tính kế thừa RBTV được xác định cho miền giá trị này • Ví dụ: • OrderDate có miền là miền của TransactionDate: tất cả những ngày trong khoảng ngày thành lập doanh nghiệp đến ngày hiện hành. • Nhưng có thể xác định thêm là: một ngày OrderDate phải nằm trong năm hiện hành. • Tuy nhiên, OrderDate không được phép chứa những ngày thuộc tương lai vì chúng không thuộc miền thuộc tính.
Toànvẹnthựcthể - Entity Integrity • Toàn vẹn đa thuộc tính: • Toàn vẹn thực thể cũng có thể ảnh hưởng đến nhiều thuộc tính. • Ví dụ: • Yêu cầu: ShippingDate >= OrderDate • Thuộc tính Status không cho phép giá trị ‘preferred’ nếu dòng dữ liệu Customer không được ghi ít nhất là 1 năm.
Thựcthitoànvẹnthựcthể • Với mỗi trường đơn: • Hầu hết RBTV là về kiểu dữ liệu. • Jet database engine và SQL server cung cấp rất nhiều kiểu dữ liệu • SQL server cũng cho phép khai báo các trường dựa trên UDDTs • SQL server cho phép giá trị null, được xác định bằng cách click chọn Null/ Not Null khi tạo một trường, Jet database engine xác định bằng trường Required • SQL server sử dụng RB CHECK để xác định chuỗi rỗng có được cho phép trong các trường text hay không, Jet database engine thì sử dụng cờ AllowZeroLength. • SQL server thiết lập thuộc tính Default khi tạo ra một trường hoặc kết nối giá trị mặc định của hệ thống với trường được mô tả theo UDDTs
Thựcthitoànvẹnthựcthể • Với mỗi trường đơn: • Jet database engine cung cấp 2 thuộc tính trường là ValidationRule và ValidationText, SQL server cho phép khai báo RB CHECK để thực hiện RB thực thể lên mỗi trường. • Có thể có nhiều RB CHECK cho một trường trong SQL server. • Nhưng một trường trong Jet database engine chỉ có 1 thuộc tính ValidationRule.
Thựcthitoànvẹnthựcthể • Với nhiều trường, và toàn bộ bảng: • Việc thực hiện RB thực thể tương tự như với một trường đơn. • Hầu hết RBTV thực thể đều yêu cầu mỗi thể hiện của thực thể là duy nhất (qui tắc toàn vẹn thực thể). Cả Jet và SQL đều cung cấp RB duy nhất thông qua index. • Có thể định nghĩa tập các trường là unique (có thể chứa giá trị Null) hoặc là khóa chính. Nhưng chỉ có 1 khóa chính cho 1 bảng, và có thể có nhiều unique. • Jet database engine cung cấp thuộc tính IgnoreNull để ngăn những dòng dữ liệu chứa giá trị Null ở cột index được insert vào. SQL không có tính năng này.
Thựcthitoànvẹnthựcthể • Với nhiều trường, và toàn bộ bảng: • Cả Jet database engine và SQL server đều không bắt buộc phải định nghĩa khóa chính cho một bảng. • SQL server cung cấp một kĩ thuật cho toàn vẹn thực thể là Trigger (được thực thi khi một thao tác nào đó xảy ra). Có thể định nghĩa nhiều trigger cho mỗi thao tác insert, delete, update. Và một trigger cũng có thể được định nghĩa cho nhiều thao tác.
Toànvẹnthamchiếu – Referential Integrity • Ràng buộc toàn vẹn tham chiếu đảm bảo cho các liên kết giữa các quan hệ • Chỉ có một RBTV tham chiếu: ‘Các khóa ngoại không được trở thành mồ côi’. • 3 trường hợp gây ra thực thể mồ côi: • Thêm vào một dòng dữ liệu ở bảng khóa ngoại với khóa không liên kết với khóa ứng viên trong bảng chính. • Khóa ứng viên trong bảng chính bị thay đổi. • Dòng dữ liệu khóa ngoại trong bảng chính bị xóa.
Toànvẹnthamchiếu – Referential Integrity • Cách giải quyết các trường hợp gây ra thực thể mồ côi: • Trường hợp 1: Ngăn cấm thêm vào dòng dữ liệu không phù hợp ở bảng khóa ngoại. Chú ý: dòng dữ liệu giá trị unknown và unexistant vẫn có thể được thêm vào mà không gây hại gì đến RB tham chiếu • Trường hợp 2: Ngăn chặn sự thay đổi ở khóa ứng viên hoặc nếu cho phép khóa ứng viên thay đổi thì phải thực hiện thay đổi ở bảng khóa ngoại, gọi là cascading update. • Trường hợp 3: tương tự trường hợp 2, cascading delete
Thựcthitoànvẹnthamchiếu • SQL server và Jet database engine cung cấp những cơ chế khác nhau cho toàn vẹn tham chiếu. • SQL server: • Khai báo RB khóa ngoại như một phần của việc định nghĩa bảng. • RB khóa ngoại thiết lập tham chiếu đến một khóa ứng viên trong bảng chính. • Ngăn cấm thao tác insert mà không có dòng dữ liệu tương ứng trong bảng chính. • Ngăn cấm thao tác delete một dòng dữ liệu đang được tham chiếu đến trong bảng chính. • Dễ dàng thực hiện cascading update và cascading delete bằng cách sử dụng trigger.
Thựcthitoànvẹnthamchiếu • Jet database engine: • Cung cấp toàn vẹn tham chiếu thông qua đối tượng Relation. • Đối tượng Relation là một thể hiện vật lý cho mối quan hệ giữa 2 bảng. • Các thuộc tính Table và ForeignTable trong đối tượng Relation định nghĩa 2 bảng tham gia vào mối quan hệ. • Thuộc tính Fields xác định các trường liên kết trong mỗi bảng.
Thựcthitoànvẹnthamchiếu • Jet database engine: • Duy trì toàn vẹn tham chiếu cho quan hệ bằng thuộc tính Attributes của mỗi quan hệ. • Trong đó, có 2 thuộc tính quan trọng là dbRelationUpdateCascade, và dbRelationDeleteCascade thực hiện việc cascading update và cascading delete.
Unknown và Nonexistent • Dùng null cho giá trị unknown và nonexistent • Các vấn đề : • Không xác định được giá trị null cụ thể được biểu diễn cho unknown hay nonexistent • Kiểu chuỗi hay text, dùng null cho unknown và chuỗi rỗng cho nonexistent. • Kiểu số học, dùng null cho unknown và 0 cho nonexistent • Vấn đề xảy ra với các kiểu dữ liệu phi text, nhưng không thường xảy ra trong thực tế -> giải pháp : cách tiếp cận giá trị quy ước. • Làm phức tạp thao tác dữ liệu • Vd : so sánh luận lý
Unknown và Nonexistent • Cách tiếp cận quy ước • Quy ước giá trị biểu diễn unknown và nonexistent • Các vấn đề : • Có thể gây nhầm lẫn • Vd : dùng 9/9/1900 biểu diễn giá trị unknown -> nhầm với ngày 9/9/1900 có thực • Tác động đến toàn vẹn tham chiếu • Vd :
Unknown và Nonexistent -> gây trở ngại cho thao tác dữ liệu
Unknown và Nonexistent • Các tiếp cận giá trị quy ước • Lợi ích : • Hiển thị dữ liệu trên báo cáo • Vd : dùng "Unknown" thay thế cho null, và "No Applicable" thay thế cho giá trị rỗng -> báo cáo đẹp => Cân nhắc cẩn thận khi quyết định dùng null hay cách tiếp cận giá trị quy ước
Phảnhồi vi phạm • Phản hồi : • Bác bỏ câu lệnh vi phạm, xuất thông báo lỗi • Sửa lỗi • Dùng giá trị mặc định hay cho giá trị rỗng • Cập nhật hoặc xóa dây chuyền để bảo đảm toàn vẹn tham chiếu
Phảnhồi vi phạm • Ràng buộc bản chất • Ràng buộc bản chất chi phối cấu trúc vật lý của dữ liệu và được dẫn xuất từ mô hình quan hệ • Ràng buộc nghiệp vụ • Ràng buộc nghiệp vụ được dẫn xuất từ không gian vấn đề - quy tắc nghiệp vụ
Phảnhồi vi phạm • Ràng buộc bản chất • Kiểu dữ liệu : • Chọn kiểu control thích hợp tương ứng với kiểu dữ liệu • Định dạng dữ liệu • Định dạng lại dữ liệu nhập của người dùng • Cung cấp dữ liệu mẫu hướng dẫn nhập liệu • Chiều dài dữ liệu • Khai báo chiều dài chuỗi tối đa (255 kí tự) • Dùng variable-length (VARCHAR) • Thống nhất quy ước rút ngắn dữ liệu (bỏ, viết tắt)
Phảnhồi vi phạm • Ràng buộc bản chất • Giá trị null • Thay thế bằng “UNKNOWN”, “NOT APPLICABLE”, “YET TO COME” • Ràng buộc phạm vi • Thay thế bằng kiểu dữ liệu có phạm vi lớn hơn trong lược đồ quan hệ
Phảnhồi vi phạm • Ràng buộc bản chất • Ràng buộc toàn vẹn thực thể và tham chiếu • Dữ liệu trùng • Xuất thông báo và cung cấp các lựa chọn
Phảnhồi vi phạm • Ràng buộc bản chất • Ràng buộc toàn vẹn thực thể và tham chiếu • Quên nhập khóa chính • Dùng AutoNumber cho khóa chính • Xuất thông báo nhắc nhở
Phảnhồi vi phạm • Ràng buộc bản chất • Ràng buộc toàn vẹn thực thể và tham chiếu • Tham chiếu đến giá trị không tồn tại • Xuất thông báo và cung cấp các lựa chọn
Phảnhồi vi phạm • Ràng buộc nghiệp vụ • Lỗi nhập liệu
Phảnhồi vi phạm • Ràng buộc nghiệp vụ • Dữ liệu thực tế không hợp với mô hình hệ thống
Phảnhồi vi phạm • Ràng buộc nghiệp vụ • Vi phạm quy tắc nghiệp vụ