Toàn Vẹn Dữ Liệu

Download Report

Transcript Toàn Vẹn Dữ Liệu

1


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”.

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.

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)





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ị.

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



Đị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ệ.

Thực thi trigger

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


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.

Trigger

Đả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ệ.
12

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.
13

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.
14

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
15

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.
16

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.
17

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.
18

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.
19

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
20

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.
21

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.
22

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.
23

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ý
24

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 :
25
-> gây trở ngại cho thao tác
dữ liệu
26

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
27

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
28

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ụ
29

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)
30

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ệ
31

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
32

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ở
33

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
34

Ràng buộc nghiệp vụ
◦ Lỗi nhập liệu
35

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
36

Ràng buộc nghiệp vụ
◦ Vi phạm quy tắc nghiệp vụ
37