Khi xác định một ràng buộc toàn vẹn cần chỉ rõ:
Điều kiện của ràng buộc toàn vẹn và trên cơ sở của điều kiện này cho ta cách biểu diễn dữ liệu.
Bối cảnh xảy ra ràng buộc toàn vẹn: Trên một hay nhiều quan hệ và cụ thể là trên quan hệ nào.
Tầm ảnh hưởng của ràng buộc toàn vẹn, khả năng tính toàn vẹn bị ảnh hưởng và hành động cần phải có khi tính ràng buộc toàn vẹn bị vi phạm.
Như vậy tính ràng buộc toàn vẹn dữ liệu được biểu diễn thông qua các phụ thuộc hàm và cụ thể là dựa trên ràng buộc khoá, có các khái niệm: khoá chính (primary key), khoá ngoại lai (foreign key) và khoá duy nhất (unique key).
Khoá duy nhất (unique key): Ràng buộc không cho phép có hai giá trị giống y hệt nhau trên cột hoặc tập các cột được định nghĩa bởi mệnh đề dạng này.
Khoá chính (primary key): Ràng buộc không cho phép có hai giá trị giống y hệt nhau cũng như giá trị null được đưa vào cột hoặc tập các cột được định nghĩa thoả mãn mệnh đề ràng buộc này.
Khoá ngoại (foreign key): Ràng buộc đòi hỏi mỗi giá trị trong cột hoặc tập các cột được định nghĩa bởi ràng buộc này phải bằng một giá trị lấy từ quan hệ liên kết tương ứng, và cột trong quan hệ liên kết tương ứng cũng phải thoả mãn các ràng buộc toàn vẹn là khoá duy nhất hoặc khoá chính. Ràng buộc này
đôi khi được gọi là ràng buộc tham chiếu. Cột được khai báo loại ràng buộc này có thể nhận giá trị null.
1.2.3. Chuẩn hoá một cơ sở dữ liệu quan hệ [3]
Chuẩn hoá các cơ sở dữ liệu quan hệ là rất cần thiết trong thực tế vì nhờ bước chuẩn hoá này mà chúng ta có thể loại bỏ tối đa sự dư thừa dữ liệu - một trong những nguyên nhân dẫn đến sự không toàn vẹn dữ liệu.
Chuẩn hoá một cơ sở dữ liệu nghĩa là chúng ta sẽ đưa các lược đồ quan hệ về một trong các dạng chuẩn: 1NF, 2NF, 3NF.
Chuẩn 1NF: Một quan hệ ở dạng chuẩn 1NF nếu tất cả các giá trị các thuộc tính của nó là sơ cấp (tức chỉ chứa các giá trị nguyên tố - không phân chia nhỏ hơn được nữa).
Nếu một quan hệ chưa ở dạng 1NF thì ta tách các thuộc tính chưa ở dạng nguyên tố thành các thuộc tính nguyên tố.
Chuẩn 2NF: Một quan hệ là chuẩn 2NF nếu nó là chuẩn 1NF và mọi thuộc tính không khoá đều phụ thuộc hàm đầy đủ vào khoá chính (tức là không có thuộc tính không khoá nào phụ thuộc hàm một phần vào khoá chính).
Nếu một quan hệ chưa ở dạng 2NF thì tách quan hệ ban đầu thành các quan hệ mới gồm: quan hệ chứa các thuộc tính không khoá không phụ thuộc bộ phận vào khoá chính và các quan hệ trong đó mỗi quan hệ chứa các thuộc tính là thuộc tính bộ phận của khoá chính và các thuộc tính phụ thuộc bộ phận vào thuộc tính bộ phận của khoá chính đó.
Chuẩn 3NF: Một quan hệ ở dạng chuẩn 3NF nếu nó là 2NF và tất cả các phụ thuộc hàm giữa khoá chính và các thuộc tính khác của nó đều là trực tiếp.
Nếu một quan hệ chưa ở dạng 3NF thì thực hiện theo các bước sau:
Tìm các phụ thuộc hàm bắc cầu vào khoá chính có dạng: K->X, X- >Y, trong đó K là tập các thuộc tính khoá, X và Y là tập các thuộc tính không khoá.
Nếu tìm thấy phụ thuộc hàm bắc cầu như trên thì thì tiến hành tách quan hệ hiện thời thành hai quan hệ, quan hệ thứ nhất bao gồm các thuộc tính X, Y và quan hệ thứ hai bao gồm các thuộc tính trong quan hệ ban đầu trừ thuộc tính Y.
Kiểm tra các quan hệ con xem đã ở dạng chuẩn 3NF hay chưa, nếu chưa thì lặp lại hai bước trên.
1.3. Kết luận
Chương 1 đã trình bày những kiến thức cơ bản về cấu trúc của một tài liệu XML cũng như những kiến thức để giúp chúng ta nhận biết được: thế nào là một tài liệu XML hợp lệ, hợp khuôn dạng, mô hình DOM và cách phân tích một tài liệu XML theo mô hình DOM cùng các trình phân ngữ trong XML như: kiểu tư liệu DTD, lược đồ XML, không gian tên, bảng định kiểu CSS, Xpath, Xlink và Xpoint. Ngoài những kiến thức về XML, chương 1 cũng đã trình bày những kiến thức cơ bản về cấu trúc, các khái niệm liên quan của một CSDL quan hệ. Các ràng buộc toàn vẹn trên CSDL quan hệ và cách chuẩn hoá một CSDL quan hệ.
Với nội dung ngắn gọn, chính xác về XML cũng như CSDL quan hệ, chương 1 đã cung cấp những kiến thức cơ bản và đóng vai trò nền tảng cho những nghiên cứu trong các chương tiếp theo của luận văn này.
Chương 2
TÍCH HỢP CÁC HỆ THỐNG CƠ SỞ DỮ LIỆU VÀ XML
Hơn hai thập kỷ qua chúng ta đã chứng kiến sự phát triển vượt bậc cả về số lượng cũng như chất lượng của các ứng dụng dựa trên cơ sở dữ liệu, đặc biệt là cơ sở dữ liệu quan hệ. Chúng ta nhận thấy rằng, các hệ thống cơ sở dự liệu quan hệ ngày càng đóng vai trò quan trọng trong các hoạt động của các tổ chức, doanh nghiệp hay cá nhân. Các hệ thống cơ sở dữ liệu quan hệ có thể được sử dụng với những ứng dụng được cài đặt riêng lẻ trong các máy tính cá nhân hay có thể là một cơ sở dữ liệu tập trung trên mạng LAN, hoặc một cơ sở dữ liệu phân tán trên mạng diện rộng và được sử dụng bởi rất nhiều các đối tượng khác nhau.
Các cơ sở dữ liệu ngày nay được lưu trữ ở rất nhiều định dạng file khác nhau. Chuyển đổi dữ liệu giữa chúng là một vấn đề nan giải mặc dù đã có không ít các trình ứng dụng hỗ trợ. Nếu dữ liệu của file chỉ được lưu theo dạng text thì mọi việc có thể trở nên đơn giản do file text có thể được đọc bởi hầu như tất cả các trình ứng dụng. Tuy nhiên file text khó có thể bố trí dữ liệu theo cấu trúc. XML ra đời đã khắc phục được những bất cập nói trên. Trong XML dữ liệu và định dạng được lưu ở dạng text và chúng ta có thể dễ dàng cấu hình cũng như thay đổi chúng bằng các trình soạn thảo thông thường. Và đặc biệt như chúng ta đã đề cập, việc ngày càng có nhiều các hệ quản trị CSDL tổ chức lưu trữ các file với nhiều định dạng khác nhau gây khó khăn cho việc giao tiếp giữa các hệ thống thông tin. Để khắc phục tình trạng này, chúng ta dùng file XML làm cầu nối để lưu trữ và trao đổi dữ liệu. Do đó, tổ chức chuyển đổi dữ liệu từ một CSDL bất kỳ sang định dạng file XML và ngược lại là một việc làm cần thiết mang giá trị thực tiễn cao.
Với cấu trúc của một tài liệu XML, các cơ sở dữ liệu được tổ chức dưới dạng mô hình đối tượng tài liệu DOM. Việc xử lý các dữ liệu này thông qua mô hình DOM như có thể chuyển một cơ sở dữ liệu quan hệ sang một tài liệu XML hoặc ngược lại chuyển một tài liệu XML sang một cơ sở dữ liệu quan hệ là nội dung của việc tích hợp giữa các hệ thống cơ sở dữ liệu và XML.
2.1. Phương pháp luận
Tích hợp các hệ thống CSDL quan hệ và XML nghiên cứu về cách chuyển đổi một CSDL quan hệ thành một tài liệu XML và ngược lại, chuyển một tài liệu XML về một CSDL quan hệ. Để giải quyết vấn đề này chúng ta phải tìm hiểu các vấn đề sau.
2.1.1. Đối sánh nội dung của một CSDL quan hệ và một tài liệu XML
Mối quan hệ giữa nội dung của một Cơ sở dữ liệu quan hệ và một tài liệu XML được thể hiện thông qua các mức so sánh về: mô hình dữ liệu, lược đồ và mức minh hoạ như sau:
Mức Mô hình dữ liệu
Nội dung quan hệ Nội dung XML
Relation → Attribute Element Type ---> Attribute
Mức lược đồ
Lược đồ quan hệ Lược đồ DTD/ XML
Relation A → Attribute X Relation B → Attribute Y
………..
Element Type a--->Attribute x Element Type a--->Attribute x
---
Mức minh hoạ
Cơ sở dữ liệu quan hệ Tài liệu XML
Tupe → Value Element Type ---> Attribute Element Value Attribute Value
Tại mức mô hình dữ liệu, nội dung quan hệ và nội dung XML có sự khác nhau đáng kể do những mục đích khác nhau của CSDL quan hệ và XML. Mục đích của CSDL quan hệ là để đáp ứng khả năng lưu trữ rộng lớn, truy cập hiệu quả và đảm bảo tính chắc chắn của chúng. Ngược lại, XML được sử dụng với mục đích đáp ứng như một định dạng về cấu trúc và sự trao đổi của những tài liệu siêu liên kết. Trong nội dung quan hệ, từ quan hệ chỉ ra các thuộc tính tương ứng của nó. Trong nội dung XML, từ kiểu phần tử chúng ta biết được các phần tử con và các thuộc tính tương ứng của chúng.
Sự khác nhau đáng kể về nội dung của quan hệ và XML có ảnh hưởng không tốt tới việc tích hợp cả hai mô hình này.
Tại mức lược đồ sự khác nhau cũng được chỉ rõ. Ở lược đồ quan hệ, mối liên hệ giữa các quan hệ và thuộc tính được xác định rõ: một lược đồ chỉ bao gồm các thuộc tính trong quan hệ tương ứng, một lược đồ quan hệ không thể bao hàm một lược đồ quan hệ khác trong nó. Ngược lại, một lược đồ XML hay một DTD chỉ ra: với mỗi kiểu phần tử được định nghĩa trong nó có thể bao gồm các thuộc tính, các phần tử con và các thuộc tính của các phần tử con đó.
Mặt khác, một DTD hay một lược đồ XML có thể được lưu trữ trực tiếp bên trong một tài liệu XML hoặc cũng có thể được lưu trữ trong một file tham khảo độc lập từ bên trong tài liệu XML bởi những trung gian URI. Đây là một trong những khác biệt cơ bản với CSDL quan hệ - nơi mà một lược đồ quan hệ thì bắt buộc phải lưu trữ bên trong CSDL và các mối quan hệ tới lược đồ thì phải được kiểm tra bởi hệ thống trước khi chèn chúng vào trong CSDL.
Cuối cùng, tại mức minh hoạ. Trong một CSDL quan hệ, với mỗi bộ (bản ghi) sẽ có một tập các giá trị tương ứng. Trong một tài liệu XML, với mỗi kiểu phần tử chỉ ra giá trị tương ứng của kiểu phần tử, các phần tử con, các thuộc tính và các giá trị tương ứng của chúng. Như vậy, chứng tỏ rằng các tài liệu XML là tự mô tả, nghĩa là các phần của lược đồ được định nghĩa trong các thẻ mẫu là bản sao trong mỗi tài liệu XML và khi đó lược đồ có được định nghĩa rõ ràng hay
không thì không quan trọng. Đây là một trong những điều trái ngược với CSDL quan hệ, nơi chỉ tồn tại duy nhất một lược đồ quan hệ với CSDL toàn vẹn.
2.1.2. Cấu trúc và kiểu cơ chế của một tài liệu XML và một lược đồ CSDL quan hệ. quan hệ.
Những cơ chế cơ bản được sử dụng để định rõ cấu trúc của những tài liệu XML và lược đồ quan hệ là những kiểu phần tử và những thuộc tính đối với XML giống như những quan hệ và những thuộc tính đối với CSDL quan hệ. Về kiểu phần tử, nó thì hữu dụng cho việc mô tả với hai mảng phạm trù: Đầu tiên, mô tả kiểu phần tử có bao gồm một miền nguyên tử hay không. Thứ hai biểu thị kiểu phần tử có một miền hợp hay không. Những kết quả này phân biệt trong bốn loại kiểu phần tử khác nhau. Điều này nhấn mạnh là sự phân loại này thì thích hợp tới cả hai lược đồ DTD và XML. Tuy nhiên CSDL quan hệ không cho phép tới những miền quan hệ đặc biệt, nhưng với những thuộc tính, hãy xem xét với mỗi loại kiểu phần tử như những thuộc tính XML và CSDL quan hệ với nhiều chi tiết.
Loại kiểu phần tử (ET) Miền nguyên tử Miền hợp
Kiểu phần tử nguyên tử √ x
Kiểu phần tử hợp thành với nội dung phần tử x √
Kiểu phần tử hợp thành với nội dung phần tử √ √
Kiểu phần tử rỗng x x
Hình 2.2: Các loại kiểu phần tử
Những kiểu phần tử chỉ bao gồm một miền nguyên tử được gọi là những kiểu phần tử nguyên tử. Về những kiểu phần tử DTD chỉ có một miền nguyên tử có thể là #PCDATA (những miền nguyên tử được xác định trước cho những thuộc tính DTD so sánh một kiểu chuỗi được gọi là CDATA), một kiểu liệt kê và một vài kiểu đặc biệt, ví dụ: ID, IDREF(s).
Ngược lại DTD, lược đồ XML cung cấp một phạm vi rộng lớn của những miền nguyên tử được xác định bởi những kiểu phần tử và những thuộc tính. Những miền nguyên tử được định trước này là phù hợp để biểu diễn trong CSDL quan hệ. Lược đồ XML cho phép những miền nguyên tử được sử dụng như cơ sở bắt nguồn từ những miền được định nghĩa bởi người dùng. Điều này thì tương tự với nội dung hướng đối tượng của lớp con bằng việc định rõ những mở rộng thích hợp hoặc những ràng buộc.
Bên cạnh những miền nguyên tử, những kiểu phần tử được phép kết hợp với một miền hợp, được gọi là những kiểu phần tử hợp. Kiểu phần tử bao gồm những kiểu phần tử khác được gọi là những kiểu phần tử hợp được sử dụng để xây dựng độ sâu tuỳ ý (xác định thứ bậc kiểu phần tử trong tài liệu). Với mỗi tài liệu XML, nó được yêu cầu là tất cả các kiểu phần tử hợp được tạo thành từ một hay nhiều kiểu phần tử đơn. Đây là một trong những ràng buộc CSDL quan hệ, nơi mà một phần của những sự phân cấp không thể thực hiện bởi những trung gian ẩn bên trong khi những quan hệ gồm những thuộc tính chỉ có giá trị nguyên thuỷ. Tuy nhiên một phần của những sự phân cấp có thể được đưa ra trong CSDL quan hệ bằng các trung gian của khoá ràng buộc ngoại lai. Khi những kiểu phần tử hợp thành có thể có một miền nguyên tử để thêm vào miền hợp thành. Hơn nữa, bên trong những kiểu phần tử hợp thành với nội dung hỗn hợp và những kiểu phần tử hợp thành với nội dung phần tử (hình 2.2). Và đặc biệt khi những kiểu phần tử hợp thành xuất hiện trong một chuỗi nối tiếp hoặc như là một sự lựa chọn.
DTD XML Schema
<! ELEMENT village
(name, country, accommodation*)> <! ELEMENT name (#PCDATA)> <! ELEMENT country (#PCDATA)>
<! ELEMENT accommodation (#PCDATA)>
<complexType name= “villageInfo” <sequence>
<element name= “name” type= “string” minOccurs= “1” maxOccurs= “1”/> <element name= “country” type= “string”
minOccurs= “1” maxOccurs= “1”/>
<element name= “accommodation” type= “string” minOccurs= “0” maxOccurs= “unbounded”/>
XML Document
<village>
<name> Innsbruck </name> <country> Tyrol </country>
<accommodation> Hotel Post </accommodation> <accommodation> Hotel Admiral </accommodation> <accommodation> Hotel Anker </accommodation> </village>
Hình 2.3: Kiểu phần tử hợp thành với nội dung kiểu phần tử
Xem xét sự định nghĩa kiểu phần tử hợp thành, có một sự khác nhau đáng kể giữa DTD và lược đồ XML, Trong sự ràng buộc với DTD, lược đồ XML tách rời định nghĩa của những kiểu phần tử hợp thành từ sự công bố của những miền hợp thành của nó đặc biệt là kiểu phần tử hợp thành. Hình 2.3 minh hoạ định nghĩa của những kiểu phần tử hợp thành village và đặc biệt của miền hợp thành
villageInfo, từ khoá ComplexType biểu thị sự công bố của miền hợp thành này.
Note: Định nghĩa một lược đồ đặc biệt sử dụng không gian tên lược đồ XML có thể được dùng để phân biệt giữa những kiểu phần tử và kiểu dữ liệu được cung cấp bởi lược đồ XML và đặc biệt những kiểu phần tử và những kiểu dữ liệu được định nghĩa bởi lược đồ phức tạp.
Tại mức minh hoạ, những tài liệu XML bao gồm các phần tử, mỗi phần tử