Thuật toán sự chuyển đổi lồng – Nesting based Translation

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xử lý truy vấn trên cơ sở dữ liệu tích hợp XML Luận văn ThS. Công nghệ thông tin 1.01.10 (Trang 45 - 49)

Để giải quyết vấn đề tồn tại của thuật toaán FT sử dụng các kiểu phần tử khác nhau của XML. Ý tưởng chính ở đây là tìm một kiểu nội dung phần tử “Tốt nhất” sử dụng * hoặc + lợi dụng toán tử lồng (nest). Đầu tiên chúng ta định nghĩa toán tử lồng. Cho một bảng t với tập các trường C, lồng trên trường XC, X không rỗng, tập tất cả các bộ vẫn giữ nguyên các trường C-X trong một tập.

45

Đinh nghĩa 3.3: (Nest) Cho t là một bảng kích cỡ n với tập các trường C, XC và A=C-X. Với mỗi (n-1) bộ  x(t)  , định nghĩa n bộ } ] [ | { ] [      X  tX thì nestX(t){*|X(t)}

Sau khi nestX(t), nếu cột X chỉ có một tập giá trị “đơn” {v} với tất cả các bộ thì chúng ta có thể nói rằng lồng thất bại và chúng có thể xem {v} là tương đương với chỉ một phần tử v (tức {v}=v). Khi đó nếu lồng thất bại thì ta có nestX(t)=t. Ngược lại, nếu cột X có một tập hợp với nhiều giá trị {v1, v2,…,vk } với k≥2 cho ít nhất một bộ thì ta nói lồng thành công. Thủ tục tổng quát cho thực hiện lồng như sau:

1. Mỗi bảng ti trong R được chuyển thành một phần tử trong X: )

( j

i e E U

2. Mỗi bảng ti trong R, giả sử biểu diễn bảng được lồng bằng ti(c1,c2,…,ck-1,ck, …,cn) với lồng thành công trên các cột (c1,c2,…, ck-1 }. Nếu k=1 thực hiện theo chuyển đổi phẳng, ngược lại thực hiện.

a. Với mỗi cột ci( 1 i k-1) nếu ci có thể trống trong P của R thì kiểu nội dung là M(ei) =(c*i,…), ngược lại M(ei) = (c+i,…).

b. Với mỗi cột cj (k j n), thực hiện theo một trong hai cách:

- Cách hướng phần tử: nếu cj được định nghĩa là có thể trống trong P của R, kiểu nội dung là M(ej) = (…c?

j ) ngược lại M(ei) = (…ci).

- Cách hướng thuộc tính: nếu cj được chuyển thành thuộc tính aj, thì }

{a )

(ei i i

A  và nếu cj được định nghĩa là có thể trống trong P của R, P(aj) = (S, nullable,d, f), ngược lại P(aj) = (S,not_nullable,d,f).

3. Tất cả các phần tử ei trong X trở thành các gốc r i{ei}; Sao chép  trong R sang  trong X.

Ở đây giả sử các trường A, B, C không nhận giá trị Null. Trong tính toán nestA(R): các bộ thứ 1,3,4 của R có chung giá trị ở trường (B,C) là (a,10) trong khi giá trị của trường A là khác nhau. Vì vậy các giá trị khác nhau được nhóm lại (lồng nhau) vào một tập {1,2,3}. Kết quả bộ đầu tiên trong bảng nestA(R) là ({1,2,3}, a, 10). Tương tự cho bộ 6 và 7 của R có chung giá trị (b,20) tiến hành nhóm thành một tập {4,5}. Khi tính nestB(R)(c) không có bộ nào trong R có chung giá trị trường (A,C) vì thế nestB®=R. Khi tính nestC(R) (trong d) hai bộ đầu tiên có chung giá trị ở trường A và trường B vì thế nó được nhóm thành bộ (1,a,{10,20}) còn các phần tử khác được xây dựng tương tự.

Do thuật toán lồng yêu cầu duyệt toàn bộ tập các bộ đã cho trong bảng nên sẽ có một số khó khăn và rắc rối. Ngoài ra khi thực hiện lồng lại có nhiều cách khác nhau để thực hiện trên một bảng đã cho.

Ví dụ 3.3: Thực hiện việc lồng với các bảng của ví dụ 3.1 ta được kết quả

47 Bảng Student:

Sname+ Cource+ Advisor

Hang, Tuan, Hung Multimedia, Distributed Database

GS Han

Hang, Hung Logic, Datmining GS Tan

Hang Database System GS Huy

Tuan Networking GS Dai

Bảng Professor: Pname + Office GS Han 800 GS Tan 700 GS Huy 500 GS Dai 400

Thuật toán NeT với kiểu hướng phần tử có thể cho phép chuyển đổi quan hệ R=(T,C,P,) thành sơ đồ X=(E,A,M,P,r,) như sau:

1. Vì trong R có T={Student, Professor} nên trong X có

E=(Student, Professor)

2. Việc lồng trong bảng Student được thực hiện trên hai cột: Sname

Cource và các cột trong bảng đều không thể trống nên có:

M(Student)=(Sname+, Course+, Advisor)

Việc lồng trong bảng Professor được thực hiện trên cột Pname và cột

Office trong bảng có thể trống nên:

M(Professor)=(Pname+,Office?)

3. Vì tất cả các phần tử ei trong X đều trở thành gốc nên:

r=(Student, Professor)

và  được sao chép sang  trong X nên:

Pname Advisor ofessor Pname Student Cource

Sname key key  

Như vậy, sau khi thực hiện việc chuyển đổi được X=(E,A,M,P,r,), trong đó:

E = (Student, Professor) A(Professor) = {Pname}

M(Student) = (Sname+, Cource+, Advisor) M(Professor) = (Pname+, Office?)

P{Pname} = (ID,?, , ) R = {Student, Professor} Pname Advisor ofessor Pname Student Cource

Sname key key  

 {{ , } , Pr ,

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Xử lý truy vấn trên cơ sở dữ liệu tích hợp XML Luận văn ThS. Công nghệ thông tin 1.01.10 (Trang 45 - 49)

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

(99 trang)