Thuật toán gộp chia sẻ (Shared Inlining)

Một phần của tài liệu Chuyển đổi dữ liệu giữa XML và cơ sở dữ liệu quan hệ (Trang 34)

Thuật toán gộp chia sẻ khắc phục được nhược điểm của thuật toán gộp cơ sở bằng cách tạo ra quan hệ riêng biệt cho các phần tử chung [7].

Đầu tiên, thuật toán gộp chia sẻ tạo quan hệ cho tất cả các phần tử có bậc lớn hơn 1 trong đồ thị DTD (trong thuật toán gôp cơ sở các nút này được biểu diễn bởi nhiều quan hệ). Các nút có bậc 1 thì gộp lại. Các nút có bậc 0 cũng được tạo quan hệ riêng biệt bởi vì không có nút nào đi tới nó.

Đối với những phần tử đệ qui lẫn nhau mà tất cả chúng có bậc 1 thì một trong những phần tử đó sẽ được tạo một quan hệ riêng, chẳng hạn như các thành phần liên thông mạnh trong đồ thị DTD. Nếu mỗi nút X là một quan hệ riêng thì gộp tất cả các nút Y chỉ có duy nhất cung trực tiếp từ X đến Y vào quan hệ X.

Bảng 2.5 đưa ra lược đồ quan hệ từ đồ thị DTD ở hình 2.1 với số quan hệ nhỏ hơn rất nhiều so với lược đồ kết quả của thuật toán gộp cơ sở.

book (bookID: integer, book.booktitle.isroot: boolean, book.booktitle : string, author.name.firstname: string,

author.name.lastname: string, author.address: string, author.authorid: string)

article (articleID: integer, article.contactauthor.isroot: boolean, article.contactauthor.authorid: string,

article.title.isroot: boolean, article.title: string)

monograph (monographID: integer, monograph.parentID: integer, monograph.parentCODE: integer,

monograph.title: string, monograph.editor.isroot: boolean, monograph.editor.name: string,

author.name.firstname: string, author.name.lastname: string, author.address: string, author.authorid: string)

author (authorID: integer, author.parentID: integer, author.parentCODE: integer, author.name.isroot: boolean,

author.name.firstname.isroot: boolean, author.name.firstname: string, author.name.lastname.isroot: boolean,

author.name.lastname: string, author.address.isroot: boolean, author.address: string, author.authorid: string)

Bảng 2.5: Lược đồ quan hệ được sinh bởi thuật toán gộp chia sẻ

Việc gộp phần tử Y vào một quan hệ X sẽ gây ra nhiều vấn đề khó khăn khi gốc của tài liệu XML được đặt tại Y. Để truy vấn được dễ dàng trên các phần tử như thế ta phải tạo thêm các trường isRoot. Các quan hệ không có cha thì sẽ không có trường parentID và parentCODE.

Mặc dù còn một số lỗi nhưng thuật toán gộp chia sẻ được đánh giá cao hơn các chiến lược khác trong việc hiển thị dữ liệu, thực hiện tốt trên các tập dữ liệu khác nhau và các truy vấn khác nhau khi DTD sẵn có. Bên cạnh đó thuật toán gộp cơ sở cũng thực hiện khá tốt và có thể giảm số lượng kết nối tại mỗi nút phần tử đặc biệt trong khi truy vấn. Vì vậy người ta lai ghép giữa thuật toán gộp cơ sở với thuật toán gộp chia sẻ để cho ra đời thuật toán gộp lai ghép. Thuật toán này được trình bày ở phần 5.1b.

Một phần của tài liệu Chuyển đổi dữ liệu giữa XML và cơ sở dữ liệu quan hệ (Trang 34)

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

(100 trang)