Ràng buộc toàn vẹn (RBTV)

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin Nghiên cứu cơ sở dữ liệu suy diễn và ứng dụng (Trang 55 - 62)

RBTV cho phép để xác định giá trị hợp lệ cho các bộ trong các quan hệ. CSDL suy diễn cung cấp một số ràng buộc cơ bản (Theo http:// csẹunl.edu/ ~riedesel/

pub/cse413/des/doc/manualDES.pdf), xuất phát từ những ràng buộc từ trong câu truy

vấn SQL của CSDL quan hệ nhƣ: kiểu, khóa chính, khóa ngoạị Ngoài ra, CSDL suy diễn còn cung cấp cho chúng ta một ràng buộc về chức năng đƣợc xác định trƣớc.

Ngƣời sử dụng cũng có thể tạo ra những ràng buộc cho riêng mình, gọi là RBTV do ngƣời dùng tự định nghĩạ Tất cả những ràng buộc này đƣợc hệ thống giám sát và thực hiện. Tuy nhiên hệ quản trị CSDL suy diễn cho phép vô hiệu hóa việc kiểm tra các ràng buộc.

Tất cả các ràng buộc xác định ở trên đƣợc áp dụng cho các sự kiện, nhƣng ràng buộc về kiểu cũng đƣợc áp dụng cho các luật. Ngoài ra, các ràng buộc do ngƣời dùng tự định nghĩa đƣợc áp dụng cho cả sự kiện và luật.

a) Ràng buộc về kiểu (type).

Một ràng buộc kiểu xác định các giá trị trong miền của một đối số vị từ ( bảng cột trong thuật ngữ quan hệ) cho phép.

Ví dụ:

DES> :- type(p,[int,string])//Khai báo RBTV về kiểu trong Datalog.

Tƣơng đƣơng với cấu trúc sau:

DES> :- type(p(int,string))

Các kiểu cho phép trong Datalog bao gồm ( mỗi dòng trong cột đầu tiên chứa các kiểu đồng nghĩa).

Bảng 3.1. Kiểu dữ liệu trong DES.

b) Ràng buộc khóa chính (Primary key).

Ràng buộc khóa chính xác định không có hai bộ giá trị giống nhau trên cùng một cột. Xét ví dụ sau:

Ví dụ 1:

DES> :-type(p,[a:int,b:string])

DES> :-pk(p,[a]) //Khai báo RBTV về khóa ngoại trong Datalog.

DES> :-pk(p,[a]) DES> :-pk(p,[c])

Error: Unknown column c.//lỗi do quan hệ p không có cột c.

Ví dụ 2: DES> :-type(q,[a:int,b:int]) DES> /assert q(1,1) DES> /assert q(2,2) DES> /assert q(1,2) DES> :-pk(q,[a])

Error: Primary key violation q.[a]// vi phạm ràng buộc khóa chính. Offending values in database: [pk(1)]

Info: Constraint has not been asserted. varchar

string Chiều dài vô tận. char(N)

varchar(N) Chuỗi với chiều dài tối đa là N char Chuỗi với chiều dài là 1 integer

int Số nguyên

float

c) Ràng buộc khóa ngoại (foreign key).

Là ràng buộc quy định giá trị thuộc tính trong một bộ của một quan hệ (tập thuộc tính này gọi là khoá ngoại), phải phụ thuộc vào sự tồn tại của một bộ trong quan hệ khác (tập thuộc tính này là khoá chính).

Ví dụ 1:

DES> :-type(p(a:int)),type(q(b:int)),pk(q,[b]) DES> :-fk(p,[a],q,[b]) (adsbygoogle = window.adsbygoogle || []).push({});

Khi một quan hệ không tồn tại sẽ xảy ra lỗị DES> :-fk(p,[a],q,[b])

Error: Relation p has not been typed yet. DES> :-type(p,[a:int]), type(q,[b:int])

Khi tạo khóa ngoại liên quan đến một quan hệ mà quan hệ đó không có khóa chính cũng sẽ xảy ra lỗị

Ví dụ2:

DES> :-fk(p,[a],q,[b])

Error: Referenced column list q.[b] is not a primary keỵ DES> :-pk(q,[b])

DES> :-fk(p,[a],q,[b])

d) Ràng buộc do ngƣời dùng tự định nghĩa (User-defined Integrity Constraints).

Ngƣời dùng cũng có thể tự định nghĩa các RBTV, ràng buộc này là một luật không có phần đầu (head), phần thân của luật là một khẳng định ràng buộc dữ liệu theo yêu cầụ Trong quá trình thực thi nếu ràng buộc dữ liệu bị vi phạm sẽ thông báo cho ngƣời sử dụng.

Ví dụ:

Tạo ràng buộc về giá trị khi tạo một mảng trong Datalog. DES> :- type(t,[c:int])

DES> :- t(X),(X<0;X>10) Khi ta thực thi nhƣ sau sẽ bị lỗi:

DES> /assert t(0)

DES> /assert t(11) //giá trị vượt quá 10 Error: Integrity constraint violation. ic(X) :-

t(X), X < 0, X > 10.

Offending values in database: [ic(11)].

3.4. Chƣơng trình Datalog.

Một chƣơng trình Datalog là một CSDL suy diễn xác định bao gồm tập hữu hạn các mệnh đề Horn:

p  q1 ... qn (n  0) Trong đó các vị từ p, qi là các nguyên tố.

Nhƣ vậy chƣơng trình Datalog là chƣơng trình logic dƣơng không chứa ký hiệu hàm.

3.4.1. Mô hình dữ liệụ

Mô hình dữ liệu trong chƣơng trình Datalog bao gồm:

- Ký pháp toán học để mô tả hình thức dữ liệu và các quan hệ.

- Kỹ thuật để xử lý dữ liệu nhƣ trả lời các câu hỏi, kiểm tra điều kiện toàn vẹn.

Một ngôn ngữ cấp một đƣợc xây dựng trên một bộ ký tự và những công thức xây dựng trên bộ ký tự đó.

Ngôn ngữ bậc một đƣợc dùng nhƣ kí pháp toán học để mô tả dữ liệu trong mô hình CSDL suy diễn và dữ liệu đƣợc xử lý trong các mô hình nhƣ vậy nhờ việc đánh giá công thức logic. Tiếp cận của logic bậc một nhƣ nền tảng lý thuyết của các hệ thống CSDL suy diễn.

Tuy nhiên, để dễ biểu diễn hình thức các khái niệm về CSDL suy diễn, ta thƣờng dùng phép toán vị từ, tức logic vị từ bậc nhất. Logic vị từ bậc nhất là ngôn ngữ hình thức dùng để thể hiện quan hệ giữa các đối tƣợng và để suy diễn ra quan hệ mớị

3.4.2. Cú pháp.

 Kí hiệu: Các kí hiệu trong bảng chữ cáị

 Vị từ so sánh: <Tên thuộc tính>  <Giá trị> Hay <Biến> so sánh với <Giá trị> (adsbygoogle = window.adsbygoogle || []).push({});

={>, <, =, <=, >= ,< >}

Cách biểu diễn các luật (Clause - Rule) Q P1, P2,..,Pn

Dấu phẩy “ , ” tƣơng đƣơng với AND () Dấu chấm phẩy “ ; ” tƣơng đƣơng với OR (v) Dấu “” : kéo theo

Pi : là các tiên đề, giả thiết, đích con, vị từ. Q : là kết luận hay là sự kiện.

Nếu n =0 : Q  các sự kiện của CSDL cài đặt.

Nếu PP1, P2,..,Pn thì P là luật đệ quy (hay vị từ ở trong thân và đầu luật).

3.4.3. Ngữ nghĩạ

Là tập tất cả các sự kiện đƣợc suy diễn ra từ chƣơng trình Datalog.

Ví dụ:

(r1) Cha_mẹ(x,y) Bố(x,y) (r2) Cha_mẹ(x,y) Mẹ(x,y)

(r3) Ông_bà(x,y)  Cha_mẹ(x,z), Cha_mẹ(z,y)

(r4) Bố(x,y) (r7): Tổ_Tiên(x,y)  Cha_mẹ(x,z), Tổ_Tiên(z,y) (r5) Mẹ(x,y) (r6): Tổ_Tiên(x,y), Cha_mẹ(x,y)

3.4.4. Cấu trúc cơ bản.

CSDL Datalog gồm hai loại quan hệ:

 Các quan hệ cơ sở đƣợc lƣu trữ trong CSDL, có dạng nhƣ ngƣời ta thấỵ Ngƣời ta gọi cơ sở này là CSDL mở rộng EDB (Extended Database)

 Các quan hệ suy diễn không cần lƣu trong CSDL. Ch ng đƣợc dùng nhƣ quan hệ tạm thời, chứa các kết quả trung gian khi trả lời câu hỏị Các quan hệ này đƣợc gọi là CSDL theo mục đích IDB (Intentional Database)

Khác với đại số quan hệ, các thuộc tính của mỗi quan hệ trong Datalog không mang tên hiện rõ. Thay vì có tên, mỗi thuộc tính căn cứ vào giá trị của nó.

Các chƣơng trình Datalog có một tập hữu hạn các luật tác động đến các quan hệ cơ bản và quan hệ suy diễn.

Trƣớc khi đƣa ra định nghĩa hình thức, ta xét ví dụ về một luật ngân hàng nhƣ sau:

CăY,X) Gửi_Tiền(“Hà Nội”, X, Y,Z), Z > 1200

 Luật này gồm quan hệ cơ sở là “Gửi_Tiền”, quan hệ suy diễn là “Ca”. Luật này rút ra các cặp <Tên khách hàng, Tài khoản> của tất cả các khách hàng có tài khoản tại chi nhánh “Hà Nội” và có số dƣ lớn hơn 1200.

 Luật trên có thể viết đƣợc dƣới dạng biểu thức tính toán tƣơng đƣơng trên miền xác định và kết quả đƣợc bỗ sung vào quan hệ suy diễn mới “Ca”

{<X,Y>| W, Z, (W, X, Y, Z) Gửi_Tiền W = “Hà Nội”  Z >1200} Từ đó ta đi đến một số công thức sau:

(i) Các luật đƣợc xây dựng trên các Literal có dạng: P(A1, A2,...,An), trong đó P là tên của quan hệ cơ sở hay quan hệ suy diễn. Mỗi Ai (i = 1,2,...,n) là hằng số hay tên biến.

(ii) Một luật Datalog có dạng: P(X1, X2,...,Xn)Q1(X11, X12,...,X1m1), Q2(X21, X22,...,X2m2),..., Qr(Xr1, Xr2,...,Xrmr), e

Trong đó:

 P : là tên của quan hệ suy diễn;

 Mỗi Qi là tên của quan hệ cơ sở hay quan hệ suy diễn;

 e là biểu thức vị từ số học đối với các biến xuất hiện trong P và tất cả các Qi (mỗi biến xuất hiện trong P cũng xuất hiện trong Qi nào đó).

Literal P(X1, X2,...,Xn) gọi là đầu của luật, phần còn lại gọi là thân của luật. (adsbygoogle = window.adsbygoogle || []).push({});

Để hiểu chính xác cách thức diễn giải một luật trong Datalog, ngƣời ta xác định khái niệm thay thế luật và hiện trạng của luật.

Khái niệm thay thế luật (Rule Substitution).

Việc thay thế luật đƣợc áp dụng cho một luật là việc thay mỗi biến trong luật bằng một biến hay một hằng. Tức là, nếu một biến xuất hiện nhiều lần trong một luật thì phải thay nó bằng cùng một biến hay cùng một hằng số.

Ví dụ:

Thay thế đối với luật ở ví dụ trên.

CăY,X) Gửi_Tiền(“Hà Nội”, X, Y,Z), Z > 1200. Biến Z đƣợc thay bằng W và các biến kia đƣợc thay bằng hằng số nhƣ sau:

Că“ Mỗ”,123) Gửi_Tiền(“Hà Nội”, 123, “Mỗ”,W), W > 1200

Tuy nhiên, nếu thay X, W bằng hai giá trị hằng số 123 và 124 thì không đƣợc vì nó không cùng giá trị.

Hiện trạng của luật.

Hiện trạng của luật là việc thay thế hợp lệ các biến bằng các hằng số. Một thay thế đ ng cho ngƣời ta một hiện trạng của luật.

Ví dụ 1:

Că“ Mỗ”,123) Gửi_Tiền(“Hà Nội”, 123, “Mỗ”,1500), 1500 > 1200

Đối với luật cụ thể, có thể có nhiều hiện trạng hợp lệ. Để xem Datalog diễn giải luật ra sao, ngƣời ta xét một hiện trạng của luật.

P(X1, X2,...,Xn)Q1(X11, X12,...,X1m1), Q2(X21, X22,...,X2m2),..., Qr(Xr1, Xr2,...,Xrmr), e

Pđ ng nếu các biểu thức:

Q1(X11, X12,...,X1m1)Q2(X21, X22,...,X2m2) ,..., Qr(Xr1, Xr2,...,Xrmr) 

e có giá trị đ ng. Literal Qi(Xi1, Xi2,...,Ximi) là đ ng nếu n–bộ (Xi1, Xi2,...,Ximi) có mặt trong quan hệ Qị

Ví dụ 2:

Đối với luật: CăY,X) Gửi_Tiền(“Hà Nội”, X, Y,Z), Z > 1200

CăY,X) là đ ng khi có hằng số Ci thỏa mãn điều kiện: Ci >1200 và n-bộ (“Hà Nội”, 123, “Mỗ”,Ci) có trong quan hệ “Gửi _Tiền”.

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin Nghiên cứu cơ sở dữ liệu suy diễn và ứng dụng (Trang 55 - 62)