Phi chuẩn các lược đồ quan hệ

Một phần của tài liệu Tích hợp các hệ thống cơ sở dữ liệu quan hệ và XML (Trang 51)

Trên thực tế, các cơ sở dữ liệu quan hệ thường tồn tại dưới các dạng cơ sở dữ liệu đã được chuẩn hoá để nhằm giải quyết các dị thường trong lưu trữ, cập nhật, bảo trì cơ sở dữ liệu. Do vậy, để cơ sở dữ liệu đó phù hợp với cấu trúc của một tài liệu XML thì cơ sở dữ liệu đó phải được phi chuẩn - chuyển đổi các quan hệ đã được chuẩn hoá thành những quan hệ chuẩn hoá ở mức thấp hơn với mục đích xử lý dữ liệu một cách hiệu quả nhất.

Để phi chuẩn cơ sở dữ liệu quan hệ chúng ta căn cứ vào một số trường hợp cụ thể sau đây:

Trường hợp hai quan hệ được hình thành từ hai kiểu thực thể tham gia liên kết một - một: Nếu việc truy suất giữa hai quan hệ diễn ra thường xuyên thì chúng ta nên kết hợp chúng thành một quan hệ.

Ví dụ: có hai quan hệ đã chuẩn hoá, một quan hệ NURSE liên kết với một quan hệ CARE_CENTER thông qua khoá Nurse_id

Hình 2.11: Sơ đồ thực thể liên kết

Các quan hệ được chuẩn hoá NURSE

Nurse_id Nurse_name Address

CARE_CENTER

Center_id Center_name Nurse_id Location Date_assigned

Hình 2.12: Chuẩn hoá các quan hệ

 Quan hệ được phi chuẩn NURSE

Nurse_id Nurse_name Address Center_name Location Date_assigned

Hình 2.13: Phi chuẩn quan hệ

NURSE CARE_CENTER Nurse_id Address Nurse_name Center_name Center_id Location In_charge s Date_assigned

Trường hợp các quan hệ được hình thành từ một liên kết nhiều - nhiều với các thuộc tính trong liên kết không phải là khoá: Thay vì phải hình thành 3 quan hệ, chúng ta có thể kết hợp thành 2 quan hệ chính bằng cách gộp các thuộc tính trong một quan hệ vào quan hệ được hình thành từ liên kết.

Ví dụ: Cho các quan hệ đã chuẩn hoá

Hình 2.14: Sơ đồ thực thể liên kết

Các quan hệ được chuẩn hoá: ITEM

Item_id Item_name Item_desc

SUPPLIER_ITEM

Supp_id Item_id Unit_price

SUPPLIER

Supp_id Supp_name Telephone Address

Hình 2.15: Chuẩn hoá quan hệ

Quan hệ được phi chuẩn:

ITEM SUPPLIER Item_id Item_des c Item_name Supp_name Supp_id Telephone Supplies Unit_price Address

Supp_id Item_name Item_desc Unit_price

Supp_id Supp_name Telephone Address

Hình 2.16: Phi chuẩn quan hệ

Trường hợp hai quan hệ được hình thành từ liên kết một - nhiều và kiểu thực thể phía liên kết đầu một không tham gia vào bất cứ một liên kết nào khác.

Khi đó chúng ta có thể cân nhắc đến việc kết hợp hai quan hệ được hình thành từ hai kiểu thực thể này thành một quan hệ.

Ví dụ: cho các quan hệ đã chuẩn hoá STORAGE và PRODUCT, trong đó mỗi kho STORAGE được sử dụng để lưu một số mặt hàng cụ thể PRODUCT và mỗi mặt hàng chỉ được phép lưu trữ trong một kho và khi đó ta có thể gộp hai quan hệ này thành một quan hệ.

Hình 2.17: Sơ đồ thực thể liên kết

Quan hệ đã được chuẩn hoá tương ứng: STORAGE

Store_id Store_name Location

PRODUCT

Prod_id Prod_name Store_id Quantity

STORAGE Stores PRODUCT

Store_id

Store_name

Location Prod_id

Prod_name

Quan hệ được phi chuẩn hoá: PRODUCT

Prod_id Prod_name Store_name Location Quantity

Hình 2.18: Phi chuẩn quan hệ

2.3.2. Kết nối các CSDL quan hệ đã phi chuẩn.

Với các CSDL đã được tạo trong một hệ quản trị CSDL cụ thể (như MS Access hay SQLServer). Sau khi tiến hành phi chuẩn các CSDL quan hệ này, ta thực hiện tạo kết nối tới các bảng CSDL đã tạo đồng thời thiết lập các kết nối giữa các bảng CSDL quan hệ đã tạo, đảm bảo sao cho các ràng buộc dữ liệu vẫn được bảo toàn khi kết nối.

Để tạo kết nối tới các bảng CSDL quan hệ , ta sử dụng cầu nối ODBC trong Windows. Với cầu nối này, các CSDL đã tạo sẽ được kết nối tới hệ thống. Khi đó ta có thể truy xuất dữ liệu của các tệp CSDL quan hệ đã kết nối.

Nhằm đáp ứng các nhu cầu sử dụng dữ liệu khác nhau của người dùng, các CSDL phải được kết nối với nhau. Ngôn ngữ truy vấn trong SQL hay SQLServer là một trong những công cụ hữu ích giúp ta kết nối được dữ liệu giữa các bảng CSDL quan hệ mà vẫn đảm bảo được các ràng buộc dữ liệu, đồng thời đáp ứng một cách linh hoạt các mục đích, nhu cầu sử dụng dữ liệu của người dùng.

Các dữ liệu sau khi được kết nối sẽ được lưu trữ trong một bảng dữ liệu liên kết.

Ví dụ: Cho các bảng CSDL quan hệ sau Bảng DANHSACH_SV

MSSV HoTen NgaySinh Lop

SV01 Trần Mai Thanh 10/10/78 K11T1 SV02 Nguyễn Ngọc Lan 1/12/76 K11T2 SV03 Hoàng Mai Thanh 1/12/77 K11T6 SV04 Trần Anh Tuấn 8/9/85 K11T4 SV05 Nguyễn Nhật Anh 17/11/1986 K11T5

Và bảng CSDL DS_DIEM như sau:

MSSV D_Toan D_Ly D_Triet

SV01 7 7 7 SV02 8 4 5 SV13 4 6 6 SV04 6 9 3 SV05 8 8 1 SV07 9 7 8 Bảng 2.2: Bảng quan hệ DS_DIEM

Bảng dữ liệu liên kết được xây dựng khi ta kết nối dữ liệu trên các bảng theo nhu cầu sử dụng dữ liệu của người dùng thông qua truy vấn SQL (hay SQLServer) thông thường.

Câu lệnh truy vấn SQL được sử dụng:

Select * from DANHSACH_SV, DS_DIEM Where DANHSACH_SV.MSSV=DS_DIEM.MSSV

 Dữ liệu sau khi kết nối sẽ được lưu vào bảng dữ liệu liên kết

MSSV HoTen NgaySinh Lop D_Toan D_Ly D_Triet

SV01 Trần Mai Thanh 10/10/78 K11T1 7 7 7 SV02 Nguyễn Ngọc Lan 1/12/76 K11T2 8 4 5 SV04 Trần Anh Tuấn 8/9/85 K11T4 6 9 3 SV05 Nguyễn Nhật Anh 17/11/1986 K11T5 8 8 1

2.3.3. Ánh xạ CSDL quan hệ đã kết nối thành một DOM chính và chuyển thành một tài liệu XML

Một tài liệu XML được tổ chức theo mô hình DOM có dạng:

Hình 2.19: Cấu trúc cây tài liệu XML được tổ chức theo DOM

Căn cứ trên cấu trúc của một tài liệu XML cũng như mối quan hệ giữa một tài liệu XML và một CSDL quan hệ chúng ta có một số ánh xạ cơ bản từ một cơ sở dữ liệu quan hệ sang một tài liệu XML như sau:

(1): R_ET: Một quan hệ (R) được ánh xạ thành một kiểu phần tử (ET). (2): A_ET: Một thuộc tính của quan hệ (A) được ánh xạ thành một kiểu phần tử (ET). Nhờ vào quan hệ của thuộc tính đưa ra quan hệ của kiểu phần tử. doc:Documet Group:Element E1:Element + a1:Text Group:Element E2:Element a2:Text E3:Element a3:Text

(3): A_A: Một thuộc tính của quan hệ được ánh xạ thành một thuộc tính XML.

Quan hệ

Thuộc tính Thuộc tính Thuộc tính

Hình 2.20: Những ánh xạ cơ bản

Ví dụ:Ánh xạ một CSDL quan hệ thành một tài liệu XML:

Accommodation

Name AccID VillageName

Hilton a1 Vienna

Theater Hotel a2 Saizburg Hotel Bristol a3 Saizburg Hotel Mozart a4 Saizburg

Nội dung XML Kiểu phần tử Thuộc tính Những khả năng ánh xạ Nội dung CSDL quan hệ

R_ET A_ET A_A

<accommodation name =”Hilton” id = “a1” village = “Vienna” > </accommodation> ……… <accommodation

name =”Hotel Mozart” id = “a4”

village = “Saizburg” > </accommodation>

Sau khi thực hiện kết nối dữ liệu trên các bảng CSDL quan hệ. Bảng CSDL liên kết được hình thành và được ánh xạ thành DOM chính theo các nguyên tắc ánh xạ cơ bản và sau đó được chuyển thành một tài liệu XML tương ứng.

Hình 2.22: Các bước ánh xạ CSDL quan hệ thành một tài liệu XML

Relational Database Step1 Demormalization Joined Table1 Joined Table2 Joined Tablen Step2 Intergrated Tables DOM tree integration

Step3

DOM tree integration

XML Document

Relational Schema

2.4. Kết luận

Trong chương 2 đã trình bày những mối liên hệ về nội dung của một CSDL quan hệ với nội dung của một tài liệu XML, đồng thời đã đưa ra phương pháp luận để chuyển một CSDL quan hệ thành một tài liệu XML và ngược lại. Bằng việc sử dụng các câu lệnh truy vấn SQL và dựa trên các quy tắc ánh xạ đơn giản, dễ hiểu và chính xác đã trình bày trong chương này, chúng ta đã có cơ sở để đưa ra các cài đặt cụ thể cho thuật toán tích hợp được trình bày trong chương tiếp theo.

Chương 3

CÀI ĐẶT THUẬT TOÁN TÍCH HỢP

CÁC HỆ THỐNG CƠ SỞ DỮ LIỆU QUAN HỆ VÀ XML 3.1. Thuật toán

Căn cứ vào phương pháp luận tích hợp các hệ thống cơ sở dữ liệu quan hệ và XML, thuật toán tích hợp các hệ thống cơ sở dữ liệu quan hệ được xây dựng tổng quát như sau:

3.1.1. Đọc tài liệu XML dưới dạng sơ đồ hình cây

Với mô hình DOM, một tài liệu XML được tổ chức dưới dạng một sơ đồ hình cây có cấu trúc tương tự như một cây thư mục trong Windows. Vì vậy mục đích chính của phần này là biểu diễn tài liệu XML theo mô hình DOM, như hình minh hoạ sau đây.

Thuật toán:

Tài liệu XML được đọc vào thông qua hình thức đọc một file dữ liệu và được xây dựng theo dạng mô hình DOM thông qua việc:

-Truy cập và lấy phần tử gốc của tài liệu.

-Lấy danh sách tất cả các phần tử con của phần tử gốc.

-Mỗi phần tử con tìm được sẽ được gắn một chỉ số đặc trưng.

-Quá trình tìm các phần tử con được thực hiện theo phương pháp đệ quy. -Nếu phần tử đang xét là lá thì số các phần tử con của nó bằng 0.

-Xây dựng và lưu trữ đường dẫn tương ứng tới mỗi phần tử con trong tài liệu.

-Lấy tên, các phần tử con và các giá trị thuộc tính của nó.

-Chuyển đổi các thông tin về đường dẫn, nội dung của các phần tử sang dạng chuỗi để in ra màn hình dưới dạng một cây tài liệu giống như trong Windows.

Trong chương trình, lớp DOMTreeTest được xây dựng để thể hiện thuật toán trên với các phương thức xử lý tương ứng: getRoot(), getChildCount(Object parent), getChild(Object parent, int index), getIndexOfChild(Object parent, Object child), isLeaf(Object node), elementString(Element e), characterString(CharacterData node).

3.1.2. Hiển thị tài liệu XML dưới dạng bảng

Như trên đã nói, tài liệu XML là một cây (theo mô hình DOM) bao gồm các nút (node). Những nút này nội dung có thể chứa phần tử (element), dữ liệu (text), các thuộc tính (attributed)... và các nút con khác. Để chuyển một tài liệu XML dưới cây sang dạng bảng ta sử dụng thuật toán sau:

Thuật toán:

- Duyệt tất cả các nút của cây theo mô hình DOM bắt đầu từ nút gốc theo kỹ thuật đệ quy.

- Xây dựng một hàm để kiểm tra và xử lý nút của cây tài liệu DOM. Đối với mỗi nút hiện hành mà có nút con thì hàm ta xây dựng sẽ đệ quy tìm sâu xuống các nút bên dưới và hình thành một DOM tương ứng cho nút.

- Với mô hình DOM thu được, thực hiện ánh xạ các phần tử, các thuộc tính với giá trị tương ứng thành các quan hệ, thuộc tính và giá trị tương ứng của bảng CSDL quan hệ.

Trong chương trình, lớp ConvertToTable được xây dựng để thể hiện thuật toán trên với các phương thức xử lý tương ứng: ConvertToTable(JFrame f, String str, boolean modal), buildContent(), buildTable(NodeList list).

3.1.3. Chuyển một CSDL quan hệ sang một tài liệu XML

Để chuyển một CSDL quan hệ thành một tài liệu XML, ta thực hiện tạo nguồn dữ liệu ODBC từ các CSDL quan hệ đã phi chuẩn (sử dụng công cụ Administrative Tools của Windows). Sau đó thực hiện thuật toán sau:

Thuật toán:

- Xây dựng lớp kết nối với JDBC – ODBC để kết nối dữ liệu được xây dựng trong môi trường Access hoặc SQLServer.

- Tạo các kết nối trên các CSDL quan hệ cần chuyển đổi thành tài liệu XML thông qua các truy vấn SQL.

-Chuyển đổi dữ liệu đã kết nối sang tài liệu XML thông qua các nguyên tắc ánh xạ đã trình bày.

Lớp Gennerate được xây dựng để tạo các kết nối trên các CSDL quan hệ thông qua các câu lệnh truy vấn SQL, các phương thức tương ứng được xây dựng trong lớp này: Gennerate(JFrame f,String str, boolean modal), actionPerformed(ActionEvent ae).

Lớp DisplayData được xây dựng để chuyển đổi dữ liệu đã kết nối sang tài liệu XML với các phương thức xử lý tương ứng: DisplayData(JFrame f, String str, boolean modal), buildContent(), actionPerformed(ActionEvent ae).

3.2. Cài đặt thuật toán

Thuật toán được cài đặt bằng ngôn ngữ lập trình Java chạy trên phiên bản SDK 1.5.0 trở lên. Các CSDL quan hệ được sử dụng trong chương trình có thể được tạo lập từ môi trường CSDL MS Access hoặc SQLServer. Các tài liệu XML có thể được tạo lập trong môi trường soạn thảo WordPad, NotePad, XML Editor,... Chi tiết và giao diện cài đặt cụ thể thuật toán tích hợp các hệ thống CSDL quan hệ và XML được mô phỏng như sau:

Đọc tài liệu XML dưới dạng sơ đồ hình cây

Một tài liệu XML được đọc vào trong chương trình được hiển thị dưới dạng một cấu trúc hình cây được thể hiện qua giao diện sau:

Trong phần này, lớp DOMTreeTest được xây dựng để hiển thị một tài liệu XML bằng việc sử dụng mô hình DOM, với việc đưa vào một số thư viện xử lý DOM cũng như các sự kiện:

import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.*;

public class DOMTreeTest extends JInternalFrame {

public static Document doc = null; public static File f;

public DOMTreeTest(File f) {

super("DOM Tree Test", true, true, true, true); this.f = f;

try {

if (builder == null) {

// Create new instance from Factory Pattern Class

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); builder = factory.newDocumentBuilder();

}

doc = builder.parse(f);

JTree tree = new JTree(new DOMTreeModel(doc)); tree.setCellRenderer(new DOMTreeCellRenderer()); setContentPane(new JScrollPane(tree));

validate(); }

{

JOptionPane.showMessageDialog(this, exception); }

catch (ParserConfigurationException exception) {

JOptionPane.showMessageDialog(this, exception); }

catch (SAXException exception) {

JOptionPane.showMessageDialog(this, exception); }

setTitle("DOMTreeTest"); }

private DocumentBuilder builder; }

Lớp DOMTreeModel được xây dựng để mô tả cấu trúc cây trong java, với các phương thức được xây dựng:

getRoot(): lấy phần tử gốc trong tài liệu

getChildCount(Object parent): Lấy danh sách các node con

getChild(Object parent, int index): Lấy note con tương ứng với chỉ số index được chỉ ra trong danh sách các con tìm được.

getIndexOfChild(Object parent, Object child): Lấy chỉ số tương ứng của phần tử con trong danh sách.

isLeaf(Object node): Kiểm tra xem một node có là lá không.

Lớp DOMTreeCellRenderer với các phương thức: Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus), elementString(Element e) và characterString(CharacterData node) được xây dựng để chuyển cấu trúc cây thành các định dạng String để hiển thị tài liệu dưới dạng cấu trúc cây.

Chuyển đổi một tài liệu XMl thành một CSDL quan hệ

Một tài liệu XML được tạo lập theo đúng cấu trúc yêu cầu sẽ được chuyển đổi và hiển thị dưới dạng một bảng CSDL quan hệ.

Ví dụ: Có tệp Test.xml với nội dung như sau

<?xml version="1.0" encoding="UTF-8"?> <employee> <row> <emp_id type="java.lang.String">CFH28514M</emp_id> <fname type="java.lang.String">Carlos</fname> <minit type="java.lang.String">F</minit> <lname type="java.lang.String">Hernadez</lname> <job_id type="java.lang.Short">5</job_id> <job_lvl type="java.lang.Byte">211</job_lvl> <pub_id type="java.lang.String">9999</pub_id> <hire_datetype="java.sql.Timestamp">1989-04-21 00:00:00.000</hire_date> </row> <row> <emp_id type="java.lang.String">JYL26161F</emp_id> <fname type="java.lang.String">Janine</fname> <minit type="java.lang.String">Y</minit> <lname type="java.lang.String">Labrune</lname> <job_id type="java.lang.Short">5</job_id> <job_lvl type="java.lang.Byte">172</job_lvl> <pub_id type="java.lang.String">9901</pub_id>

<hire_date type="java.sql.Timestamp">1991-05-26 00:00:00.000</hire_date> </row> <row> <emp_id type="java.lang.String">HAN90777M</emp_id> <fname type="java.lang.String">Helvetius</fname> <minit type="java.lang.String">A</minit> <lname type="java.lang.String">Nagy</lname> <job_id type="java.lang.Short">7</job_id>

<job_lvl type="java.lang.Byte">120</job_lvl> <pub_id type="java.lang.String">9999</pub_id>

<hire_date type="java.sql.Timestamp">1993-03-19 00:00:00.000</hire_date> </row>

</employee>

Sau khi chọn chức năng chuyển đổi một tài liệu XML thành một CSDL quan hệ, bảng CSDL quan hệ được hiển thị như sau:

Lớp ConvertToTable được xây dựng để thể hiện thuật toán này. Trong lớp này, các phương thức được xây dựng:

buildContent(): Xây dựng nội dung của bảng dữ liệu, trong đó phương thức buildTable(NodeList list) được gọi để xây dựng nội dung cho bảng CSDL quan hệ tương ứng với cấu trúc DOM thu được từ tài liệu XML.

Phương thức buildTable(NodeList list) được xây dựng để ánh xạ một tài liệu XML thành một bảng CSDL quan hệ theo các nguyên tắc ánh xạ.

Chuyển một CSDL quan hệ thành một tài liệu XML

Để chuyển một CSDL quan hệ được tạo lập từ môi trường MS Access hay SQLServer, ta thực hiện các bước như sau:

Bước 1: Tạo kết nối ODBC

- Vào màn hình ODBC Data Source Administrator của Windows.

- Chọn trang User DNS và bấm chọn nút lệnh “Add” để tạo nguồn dữ liệu mới.

- Chọn Driver của CSDL cần chuyển đổi sang tài liệu XML.

- Chọn CSDL nguồn và khai báo tên cho nguồn dữ liệu ODBC sẽ được tạo ra.

- Bấm nút lệnh “Finish” để kết thúc việc tạo kết nối dữ liệu ODBC.

Bước 2: Tạo kết nối với JDBC-ODBC bằng ngôn ngữ Java.

- Trong chương trình dùng lớp ConnectData() để thực hiện chức năng này. - Chuyển đổi từ dữ liệu ODBC sang tài liệu XML. Trong chương trình sử

Một phần của tài liệu Tích hợp các hệ thống cơ sở dữ liệu quan hệ và XML (Trang 51)

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

(73 trang)