Trên thực tế, công nghệ XML đã và đang được người sử dụng ưa thích bởi sự tích hợp dễ dàng của nó với các cơ sở dữ liệu quan hệ – Chúng ta không những có thể phát triển một tài liệu XML
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN THỊ XUÂN
TÍCH HỢP CÁC HỆ THỐNG
CƠ SỞ DỮ LIỆU QUAN HỆ VÀ XML
Trang 2MỞ ĐẦU 1
Chương 1: TỔNG QUAN VỀ XML VÀ CƠ SỞ DỮ LIỆU QUAN HỆ 3
1.1 Tổng quan về XML 3
1.1.1 Giới thiệu công nghệ XML 3
1.1.2 Cấu trúc tài liệu XML 4
1.1.2.1 Tài liệu XML 4
1.1.2.2 Cấu trúc của tài liệu XML 5
1.1.3 Các thành phần cơ bản trong tài liệu XML 6
1.1.4 Cấu trúc tài liệu hợp khuôn dạng 10
1.1.5 Định nghĩa kiểu tư liệu DTD 11
1.1.6 Lược đồ XML 13
1.1.7 Bảng định kiểu CSS 18
1.1.8 Mô hình DOM 20
1.1.9 Phân tích tài liệu XML theo mô hình DOM 22
1.1.10 XPATH 25
1.1.11 XLINK và XPOINTER 27
1.1.11.1 XLINK 27
1.1.11.2 XPOINTER 28
1.2 Cơ sở dữ liệu quan hệ 29
1.2.1 Cấu trúc cơ sở dữ liệu quan hệ 29
1.2.2 Ràng buộc toàn vẹn trên một CSDL quan hệ 31
1.2.2.1 Định nghĩa 31
1.2.2.2 Các yếu tố của ràng buộc toàn vẹn 32
1.2.3 Chuẩn hoá một CSDL quan hệ 33
1.3 Kết luận 34
Chương 2: TÍCH HỢP CÁC HỆ THỐNG CSDL QUAN HỆ VÀ XML 35
2.1 Phương pháp luận 36
2.1.1 Đối sánh nội dung của một CSDL quan hệ và một tài liệu XML 36
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ệ 38
2.1.3 Tên duy nhất 41
Trang 32.1.5 Quan hệ 43
2.1.6 Thứ tự 44
2.2 Chuyển một tài liệu XML sang một CSDL quan hệ 46
2.3 Chuyển một CSDL quan hệ sang một tài liệu XML 48
2.3.1 Phi chuẩn các lược đồ quan hệ 48
2.3.2 Kết nối các CSDL đã phi chuẩn 52
2.3.3 Ánh xạ CSDL quan hệ đã kết nối thành một DOM chính để chuyển thành tài liệu XML 54
2.4 Kết luận 57
Chương 3: CÀI ĐẶT THUẬT TOÁN TÍCH HỢP CÁC HỆ THỐNG CSDL QUAN HỆ -VÀ XML 58
3.1 Thuật toán 58
3.1.1 Đọc tài liệu XML dưới dạng sơ đồ hình cây 58
3.1.2 Hiển thị tài liệu XML dưới dạng bảng 59
3.1.3 Chuyển một CSDL quan hệ sang một tài liệu XML 60
3.2 Cài đặt thuật toán 61
3.3 Kết quả - đánh giá 68
KẾT LUẬN 69
TÀI LIỆU THAM KHẢO 70
Trang 4MỞ ĐẦU
Ngày nay cùng với việc bùng nổ thông tin, các thông tin trên Internet cũng ngày càng nhiều (số lượng các trang Web trên Internet khoảng gần 2 tỷ), mà như chúng ta biết thì các Cơ sở dữ liệu quan hệ ngày càng chiếm nhiều ưu thế trong việc lưu trữ nội dung của các web site Cùng lúc đó, ngôn ngữ định dạng mở rộng (Extensible Markup Language –XML) nhanh chóng chiếm ưu thế trong những web site sử dụng văn bản siêu liên kết Vì vậy, sự tích hợp các hệ thống
Cơ sở dữ liệu quan hệ và XML là chủ đề chính của luận văn này với mục đích là mong muốn tất cả các dữ liệu cùng với các chương trình trong tương lai sẽ tích hợp và hiểu nhau hơn thông qua XML
Trong giai đoạn đầu, hầu hết các trang Web đều được viết bằng ngôn ngữ định dạng dữ liệu thông qua các cặp thẻ đặc biệt trong tệp tin văn bản HTML
Do tính đơn giản, dễ hiểu và dễ sử dụng của HTML mà nó đã trở thành ngôn ngữ được ưa chuộng để xây dựng các trang Web trong thời gian đó Tuy vậy, với lượng thông tin khổng lồ và không ngừng tăng của Web, cùng với thị hiếu và nhu cầu sử dụng của người dùng ngày càng cao thì HTML không đủ để đáp ứng những yêu cầu đó – nó chỉ có thể tạo trang Web chuẩn Chính vì vậy mà ngôn ngữ XML đã ra đời, với những tính năng nổi trội của mình, XML đã giúp cho việc quản lý, trình bày và tổ chức thông tin trên Web thông qua các hệ cơ sở dữ liệu được dễ dàng và đặc biệt là đáp ứng được những mong mỏi từ phía người dùng
Trên thực tế, công nghệ XML đã và đang được người sử dụng ưa thích bởi
sự tích hợp dễ dàng của nó với các cơ sở dữ liệu quan hệ – Chúng ta không những có thể phát triển một tài liệu XML mới trong khi vẫn sử dụng các Cơ sở
dữ liệu quan hệ đang tồn tại mà còn có thể trích rút các dữ liệu từ các tài liệu XML Để giải quyết vấn đề này, chúng ta cần tìm hiểu rõ về XML và mô hình DOM cũng như phương pháp sử dụng mô hình DOM để chuyển một Cơ sở dữ liệu quan hệ sang tài liệu XML và ngược lại Và đây cũng chính là nội dung
Trang 5được đưa ra trong luận văn thông qua những nghiên cứu của một số bài báo, các báo cáo chuyên ngành ở các hội nghị quốc tế được phổ biến trên mạng cùng với các giáo trình về XML và các giáo trình liên quan khác
Luận văn được trình bày gồm ba chương:
Chương 1: “Tổng quan về XML và Cơ sở dữ liệu quan hệ”- Trình
bày tổng quan về cấu trúc của một tài liệu XML, định nghĩa kiểu tư liệu DTD, lược đồ, mô hình đối tượng tài liệu DOM, phân tích tài liệu XML theo mô hình DOM và các khái niệm cơ sở về cơ sở dữ liệu (CSDL) quan hệ
Chương 2: “Tích hợp các hệ thống cơ sở dữ liệu và XML” - Giới
thiệu phương pháp luận chuyển một tài liệu XML sang một CSDL quan hệ và ngược lại
Chương 3: “Thuật toán tích hợp các hệ thống cơ sở dữ liệu quan hệ
và XML” – Đưa ra thuật toán tích hợp các hệ thống CSDL quan hệ và XML và cài đặt thuật toán bằng ngôn ngữ lập trình Java
và phần Kết luận
Hà Nội, tháng 05 năm 2007
Trang 6Chương 1 TỔNG QUAN VỀ XML VÀ CƠ SỞ DỮ LIỆU QUAN HỆ 1.1 Tổng quan về XML
1.1.1 Giới thiệu về công nghệ XML
Ngôn ngữ định dạng (markup language) là tất cả những gì dùng để mô tả nội dung một tài liệu – Đó là cách nội dung tài liệu được diễn dịch Ngôn ngữ định dạng mà mọi người đều rất quen thuộc hiện nay chính là ngôn ngữ HTML
(Hyper Text Markup Language) HTML cho phép ta tạo nội dung của các trang
Web rất đẹp Theo thời gian, với các phiên bản khác nhau của HTML, số các cặp thẻ được định nghĩa ngày càng tăng Ví dụ, với phiên bản HTML 4.01 gần đây
đã định nghĩa số các cặp thẻ là 120 (kể cả các cặp thẻ mở rộng) Tuy nhiên để xử
lý các ứng dụng trên Web với sự phát triển của ứng dụng mạng thì rõ ràng số các cặp thẻ đó vẫn chưa đủ (thực sự thì ta không thể có đủ các cặp thẻ để sử dụng cho những mục đích riêng của mình) Vậy câu hỏi đặt ra là làm thế nào để giải quyết được vấn đề đó?
Sự ra đời của ngôn ngữ XML (Extensible Markup Language) như một giải
pháp cho vấn đề trên XML là ngôn ngữ được định nghĩa bởi tổ chức mạng toàn cầu (World Wide Web Consortium- W3C) HTML và XML có quan hệ rất gần gũi với nhau - cả XML và HTML đều dựa trên chuẩn ngôn ngữ định dạng tổng
quát SGML (Standard Generalized Markup Language) và cả hai ngôn ngữ đều
sử dụng các cặp thẻ Tuy vậy trong ngôn ngữ XML, các cặp thẻ được sử dụng để định nghĩa và khai báo cấu trúc dữ liệu và được định nghĩa bởi người dùng thông qua một số quy tắc của nó trong khi các cặp thẻ của HTML chỉ sử dụng để định dạng và được định nghĩa, quy định trước Nhờ khả năng tự định nghĩa các thẻ cũng như khả năng cho phép định nghĩa và khai báo cấu trúc dữ liệu mà ngôn ngữ XML trở thành ngôn ngữ rất cần cho công nghệ Internet và các ứng dụng mạng ngày nay Nhưng có lẽ lý do quan trọng nhất để XML trở lên phổ biến đó
là XML cho phép dễ dàng xử lý, chuyển tải và trao đổi dữ liệu giữa rất nhiều
Trang 7ứng dụng và tài liệu người dùng với các định dạng khác nhau Trong XML dữ liệu được định dạng và lưu ở dạng text, do vậy 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 hoặc bằng các trình soạn thảo chuyên nghiệp của XML (XML Notepad, XML Writer, XML Spy hay eNotepad) Sự kết hợp giữa XML với định dạng CSS (Cascade Style Sheet) hay XSL (Extensible Style Language) giúp cho việc định dạng dữ liệu hiệu quả hơn rất nhiều so với định dạng nhị phân (định dạng được coi là hiệu quả vì nó chứa
dữ liệu ở dạng nén)[1] Ngoài ra, khả năng được coi là mạnh nhất của XML đó là khả năng có thể tạo ra các ngôn ngữ định dạng tuỳ biến – nó cho phép ta có thể tuỳ biến vào trình duyệt hoặc ứng dụng để xử lý theo ngôn ngữ định dạng phù hợp theo một tập thẻ quy ước Một thế mạnh khác của XML đó là nó không chỉ cho phép ta lưu dữ liệu vào file XML mà còn có thể tổ chức dữ liệu theo cấu trúc XML cho phép các phần tử thẻ tích hợp với nhau tạo nên một cấu trúc dữ liệu phân cấp hoàn chỉnh Điều này thật quan trọng khi chúng ta cần đến khả năng định nghĩa dữ liệu có cấu trúc
XML là một ngôn ngữ đòi hỏi tính chính xác cú pháp của ngôn ngữ rất cao Trình duyệt không chấp nhận một tài liệu XML viết sai cú pháp và nó sẽ không phân tích tiếp tài liệu XML cho đến khi nào tài liệu XML hoàn toàn đúng khuôn dạng và cú pháp
1.1.2 Cấu trúc của tài liệu XML
1.1.2.1 Tài liệu XML
Các thẻ trong XML được tự định nghĩa và xác định mục đích sử dụng thẻ
Do vậy vấn đề đặt ra ở đây là cần xác định cho mình cú pháp để các thẻ tuân theo Có hai cách để xác định cú pháp mà tài liệu XML có thể tuân theo, đó là:
Mô hình định nghĩa kiểu tư liệu XML (DTD – Definition Type Document)
Mô hình lược đồ XML (schema)
Nội dung của một tài liệu XML bị ràng buộc bởi hai tính chất:
Tính hợp khuôn dạng (well – formed document)
Trang 8 Tính hợp lệ (validity)
Tài liệu XML có thể được viết bằng các trình soạn thảo thông thường hoặc các trình soạn thảo chuyên dụng của XML
1.1.2.2 Cấu trúc của tài liệu XML
Một tài liệu XML có thể được chia thành 2 phần chính, mỗi phần có thể có các thành phần theo quy định khác nhau
a, Phần khởi đầu (PROLOG) chứa các khai báo trong tài liệu XML như: khai báo phiên bản sử dụng của XML, cách thức mã hoá dữ liệu, chỉ thị xử lý, định nghĩa kiểu tư liệu cho tài liệu DTD, các chú thích, khoảng trắng Chuẩn XML không bắt buộc phải khai báo phần mở đầu của XML Tuy nhiên W3C khuyến khích ta nên sử dụng phần khai báo này, ít nhất cũng là phần khai báo phiên bản sử dụng của XML
b, Phần thân (BODY) của tài liệu chứa nội dung của dữ liệu bao gồm một hay nhiều thành phần (phần này bắt buộc phải có ít nhất một thành phần), những thành phần này bao gồm các phần tử (element) Mỗi phần tử thường bao gồm một cặp thẻ (thẻ bắt đầu và thẻ kết thúc) Phần tử đầu tiên của tài liệu được gọi là phần tử gốc (root element) Tất cả các tài liệu XML được gọi là hợp khuôn dạng nếu chứa đựng duy nhất một phần tử gốc Phần tử gốc chứa đựng tất cả các phần
tử và các cặp thẻ khác trong tài liệu
PROLOG
Khai báo
DTD- Định nghĩa kiểu tư liệu
Phần thân của tài liệu
Hình 1.1: Cấu trúc tài liệu XML
Trang 91.1.3 Các thành phần cơ bản trong tài liệu XML
Định dạng và dữ liệu ký tự: Tài liệu XML được tạo thành từ thành phần
định dạng và thành phần dữ liệu ký tự Trong tài liệu XML, định dạng giúp phân biệt các thành phần khác nhau trong tài liệu XML hay các loại nút trong cây XML Định dạng bao gồm các cặp thẻ (thẻ bắt đầu và thẻ kết thúc), các phần tử thẻ rỗng, các tham chiếu thực thể, tham chiếu ký tự, chú thích, phân đoạn CDATA, khai báo kiểu tài liệu và chỉ thị xử lý Tất cả các tài liệu còn lại trong XML không phải là định dạng đều được xem là ký tự Các ký tự này được chuẩn hoá theo chuẩn ISO/ IEC 10646 XML hỗ trợ rất nhiều kiểu mã hoá dữ liệu như: UTF–8, UTF-16, ISO–8859-5, ISO-10646-UCS-4 Tất cả các trình xử lý XML đều được hỗ trợ mã hoá dữ liệu theo chuẩn Unicode UTF-8, UTF-16 Có những
ký tự mà chúng vừa được sử dụng để tạo các định dạng, vừa là dữ liệu ký tự nên rất dễ nhầm lẫn trong việc sử dụng Ví dụ như dấu &, >, <,…[1]
Các khai báo XML:
o Khai báo trong tài liệu XML được viết theo cấu trúc <?xml [các kiểu khai báo]?> Ví dụ có khai báo: <?xml version=”1.0” standalone=”yes” ?> Phần khai báo không bắt buộc phải có trong tài liệu, tuy nhiên nếu có khai báo thì bắt buộc phải đặt ở dòng đầu tiên của tài liệu
o Các khai báo trong XML[1]:
Khai báo phiên bản (version): khia báo này cho biết phiên bản đặc tả XML mà tài liệu sử dụng (khai báo này là tuỳ chọn nhưng W3C khuyến khích nên sử dụng phần khai báo này)
Khai báo mã hoá (encoding): Bộ mã được sử dụng trong tài liệu XML mặc định là UTF-8 Ngoài ra có thể sử dụng các mã khác như: Unicode, UCS-2, UCS-4,…(khai báo này là tuỳ chọn)
Khai báo thực thể độc lập (standalone): Được đặt thuộc tính là
„yes‟ nếu tài liệu không tham chiếu đến các thực thể khác bên ngoài, ngược lại được đặt là „no‟ (khai báo này là tuỳ chọn)
Trang 10Phần chú thích:
o Chú thích trong XML cũng tương tự như chú thích trong các ngôn ngữ khác – không ngoài mục đích làm chương trình được rõ ràng, mạch lạc hơn không chỉ đối với người xây dựng chương trình mà còn đối với các đọc giả khác Chú thích trong XML được đặt trong cặp chuỗi kí tự <! Nội dung chú thích >
và khi diễn dịch nội dung tài liệu các trình phân tích bỏ qua những dòng chú thích
o Một số quy tắc khi viết chú thích trong tài liệu XML:
Không được đặt chú thích trước các khai báo
Không đặt chú thích bên trong các định dạng
Không dùng chuỗi bên trong chú thích
Chỉ thị xử lý:
o Chỉ thị xử lý được sử dụng để chỉ dẫn cho bộ phân tích cách xử lý tài liệu trong quá trình phân tích Chỉ thị xử lý được bắt đầu bằng <? và kết thúc bằng ?> và thường được đặt ở đầu tài liệu
o Ví dụ một chỉ thị xử lý: <?xml-stylesheet type=”text/ css” href=”greeting.css” ?> là một chỉ thị xử lý yêu cầu bộ phân tích kết hợp dữ liệu của XML với bảng định kiểu CSS (Cascade Style Sheet)
Thẻ, các phần tử (element), thực thể (entity) và thuộc tính (attribute):
o Thẻ và các phần tử:
Cấu trúc tài liệu XML được tạo dựa trên các thành phần định dạng (markup) Những thành phần này bao gồm các phần tử (element) và mỗi phần tử trong tài liệu XML bao gồm một cặp thẻ - thẻ bắt đầu và thẻ kết thúc (trong mỗi cặp thẻ có thể chứa các cặp thẻ khác hoặc chỉ chứa dữ liệu) Một phần
tử XML tuân theo cú pháp tổng quát sau: <TagName [attName=”attValue”]>Content</TagName> Trong đó, TagName là tên thẻ
(được đặt theo nguyên tắc: tên thẻ có thể bắt đầu bằng ký tự, gạch chân (_), hoặc
Trang 11dấu hai chấm (:), tiếp theo có thể là ký tự, ký số, gạch nối, dấu hai chấm nhưng
không được chứa khoảng trắng), attName là tên thuộc tính (được đặt theo nguyên tắc đặt tên thẻ), attValue là giá trị được gán cho thuộc tính và Content là
nội dung của phần tử Mỗi phần tử trong cùng một tài liệu XML là duy nhất Bộ phân tích tài liệu XML phân biệt chữ hoa và chữ thường nên khi đặt tên cho các thẻ và thuộc tính cần phân biệt chữ hoa và chữ thường
Phần tử rỗng: là phần tử chỉ có một thẻ duy nhất được đặt trong cặp < /> Ví dụ thẻ <DOCUMENT/> là một phần tử và là một phần tử rỗng [1]
Phần tử gốc (root element): Là phần tử chứa tất cả các phần tử
và các cặp thẻ khác trong tài liệu Phần tử gốc là duy nhất đối với một tài liệu XML được coi là hợp khuôn dạng
o Thực thể (entity):
Một thực thể thường có nội dung là văn bản (text), tuy nhiên cũng có thể là dữ liệu nhị phân Một thực thể thực chất chính là cách mà XML tham chiếu đến một mục dữ liệu Có hai loại thực thể: thực thể tổng quát (general entity) và thực thể tham số (parameter entity) Trong tài liệu, thực thể
tổng quát được tham chiếu theo cú pháp: &entityName; và thực thể tham số được tham chiếu theo cú pháp: %entityName;
Thực thể tổng quát có thể là các thực thể đã được định nghĩa trước trong XML như: <, >, &, ", &apos (đại diện cho các ký tự tương ứng: <, >, &, “, „) hoặc cũng có thể là các thực thể được người dùng định nghĩa trong DTD theo cú pháp: <!ENTITY NAME DEFINITION>, trong đó NAME là tên thực thể, được sử dụng để tham chiếu đến nội dung được định nghĩa của chúng DEFINITION là định nghĩa của thực thể (có nhiều dạng định nghĩa thực thể, định nghĩa đơn giản nhất là các văn bản mà ta muốn thay thế khi thực thể được tham chiếu đến
o Thuộc tính (attribute):
Trang 12 Cho phép xác định thêm thông tin và ý nghĩa của thẻ Thuộc
tính được kết hợp theo cặp name=value và được đặt bên trong thẻ mở hoặc thẻ
rỗng
Thuộc tính luôn được gán giá trị là kiểu text (do phần định dạng luôn là dữ liệu dạng text) giá trị gán cho thuộc tính được đặt trong cặp
“” hoặc cặp „‟
Phân đoạn CDATA:
o Phân đoạn CDATA cũng là một phần tử trong tài liệu XML nhưng bao gồm chỉ một thẻ Thẻ này bắt đầu bằng <![CDATA và kết thúc ] ]> Toàn bộ nội dung được đặt trong phân đoạn CDATA sẽ không được trình phân tích coi như cấu trúc XML mà chúng chỉ được xem như là dữ liệu thuần tuý (không được trình phân tích đụng đến) Do vậy phân đoạn CDATA thường được sử dụng để tránh sự xáo trộn các cặp thẻ khi chúng ta đặt nội dung của tài liệu XML ngoại vào tài liệu XML đích (tài liệu hiện hành)
Không gian tên (namespace):
o Việc kết hợp các tài liệu XML lại với nhau là một vấn đề cần phải xem xét vì khả năng cho phép tự do định nghĩa và đặt tên các thẻ trong XML Do vậy việc định ra phạm vi hay không gian tên cho các thẻ trong tài liệu XML là cần thiết
o Để định nghĩa một không gian tên cho các thẻ, ta đưa vào thuộc tính
xmlns:prefix vào phần tử gốc Trong đó prefix là tên miền hay không gian tên mà
ta muốn chỉ định, mỗi không gian tên có một định danh duy nhất (có thể là định danh URL hoặc URI) Sau đó áp dụng tên này cho tất cả các thẻ trong tài liệu XML mà ta muốn chúng thuộc không gian tên đã định nghĩa, theo cú pháp:
<prefix:TagName> đối với thẻ mở và </prefix:TagName> đối với thẻ đóng
o Ví dụ: cho một tài liệu XML chưa được định nghĩa không gian tên như sau [2]:
Trang 131.1.4 Cấu trúc tài liệu hợp khuôn dạng
Một tài liệu XML được coi là một tài liệu hợp khuôn dạng nếu tuân theo các quy tắc sau :
Trang 14 Các khai báo XML cần được đặt ở dòng đầu tiên của tài liệu : như khai báo version hay các chỉ thị xử lý
Một tài liệu XML chỉ có duy nhất một phần tử gốc, các phần tử khác nếu có phải là phần tử con của phần tử gốc
Mọi phần tử khác rỗng phải bao gồm đầy đủ thẻ đóng và thẻ mở
Phần tử rỗng bắt buộc phải đóng bằng chuỗi />
Các phần tử lồng nhau phải có thẻ đóng và thẻ mở hợp vị trí (thẻ mở theo thứ tự từ ngoài vào trong còn thẻ đóng theo thứ tự từ trong ra ngoài)
Trong tài liệu XML, tên thuộc tính là duy nhất và giá trị của thuộc tính phải được đặt trong cặp nháy kép ( “ ”) hoặc nháy đơn („ „)
Chỉ sử dụng 5 tham chiếu thực thể được định nghĩa trước trong XML
1.1.5 Định nghĩa kiểu tư liệu DTD (Document Type Definition)
Khi xây dựng các phần tử trong XML, chúng ta có thể tuỳ ý quyết định cách sử dụng chúng (có thể trong các thẻ chỉ chứa nội dung là dữ liệu text thuần tuý hoặc cũng có thể chứa các phần tử con khác) Tuy nhiên để tài liệu được rõ ràng chúng ta nên định nghĩa kiểu tư liệu mà mỗi phần tử sẽ biểu diễn
Một tài liệu XML không chỉ đòi hỏi phải hợp khuôn dạng (well-formed) mà còn đòi hỏi phải hợp lệ Một tài liệu XML được xem là hợp lệ và có giá trị khi
Trang 15mà tất cả các phần tử trong tài liệu được định nghĩa kiểu mà nó sẽ chứa Việc định nghĩa kiểu dữ liệu cho các phần tử gọi là định nghĩa kiểu tư liệu DTD [1] Định nghĩa kiểu tư liệu DTD tuân theo cú pháp tổng quát được quy định bởi
tổ chức XML W3C như sau :
< !DOCTYPE root-name [DTD]>
Trong đó DTD là các định nghĩa cho phần tử trong tài liệu (có thể là các định nghĩa nội- internal hoặc ngoại- external) Mỗi phần tử được định nghĩa theo
cú pháp : < !ELEMENT name content_model>
Trong đó name là tên phần tử muốn định nghĩa, content_model có thể được đặt là EMPTY hay ANY hoặc trộn lẫn cả hai nội dung (gồm dữ liệu có thể sử dụng để phân tích hoặc các phần tử con khác)
Khai báo và định nghĩa kiểu tư liệu được đặt ở phần khởi đầu (PROLOG) của tài liệu (đặt sau phần khai báo và chỉ thị xử lý)
Ví dụ về khai báo và định nghĩa DTD trong tài liệu XML:
<?xml version =”1.0” standalone=”yes”?>
<!DOCTYPE DANHSACH [
<!ELEMENT DANHSACH (SINHVEN)*>
<!ELEMENT SINHVIEN (HOTEN, NGAYSINH, TRUONG)>
<!ELEMENT HOTEN (HODEM, TEN)>
<!ELEMENT HODEM (#PCDATA)>
<!ELEMENT TEN (#PCDATA)>
<!ELEMENT NGAYSINH (#PCDATA)>
<!ELEMENT TRUONG (#PCDATA)>
Trang 16tử gì, thứ tự ra sao, chứa thuộc tính gì và nội dung thế nào) nhưng nó tỏ ra mạnh
mẽ và chính xác hơn, với ưu điểm nổi bật là cho phép định nghĩa và khai báo kiểu dữ liệu thực sự mà chúng ta muốn sử dụng
Lược đồ là tài liệu XML có thể được cài đặt theo định nghĩa của Microsoft hoặc theo định nghĩa của tổ chức quốc tế W3C Về cơ bản thì cả hai cách cài đặt này đều phải sử dụng không gian tên cho tài liệu, song trong mỗi cách lại sử dụng không gian tên theo một phương cách khác nhau
Để kết hợp lược đồ XML vào trong tài liệu, Microsoft sử dụng không gian tên mặc định cho tài liệu bằng khai báo thuộc tính xmlsn tại phần tử gốc cùng với thông tin về file chứa lược đồ x-schema như sau:
<? xml version=”1.0” ?>
<rootElement xmlns=”x-schema: fileNameSchema”>
………
</rootElement>
Trang 17Trong đó, rootElement là tên phần tử gốc, fileNameSchema là tên file chứa lược đồ đã được định nghĩa, fileNameSchema được đặt với tên và phần mở rộng
tuỳ ý Ví dụ như schema1.xml
Trong fileNameSchema, nội dung lược đồ được định nghĩa như sau:
- Lược đồ là một tài liệu XML bắt đầu bằng phần tử schema, được khai báo theo dạng thức:
- Để tạo lược đồ cho Internet Explorer, ta phải thiết lập không gian tên
mặc định cho tài liệu chứa lược đồ là urn:schema-microsoft-com:xml-data, cùng với không gian tên mang định danh urn: schema-microsoft-
com:datatypes với tiếp đầu ngữ dt cho phần khai báo kiểu dữ liệu (datatype)
Trang 18Các kiểu dữ liệu cùng với không gian tên dt được định nghĩa sẵn như bảng sau [1]:
bin.base64 Kiểu đối tượng nhị phân mã hoá theo chuẩn base64
bin.hex Kiểu hex
boolean Nhận giá trị 0 hoặc 1
char Kiểu ký tự
date Kiểu ngày tháng
dateTime Kiểu ngày giờ
float Kiểu số thực với dấu chấm động
int Kiểu số nguyên
number Kiểu số tổng quát (có thẻ là số âm, dương, số mũ, ) I1 Số nguyên 1 byte
I2 Số nguyên 2 byte
I4 Số nguyên 4 byte
R4 Số thực với độ chính xác 7 ký số
R8 Số thực với độ chính xác 15 ký số
ui1 Số nguyên không dấu 1 byte
ui2 Số nguyên không dấu 2 byte
ui4 Số nguyên không dấu 4 byte
- Phần tử của tài liệu XML được định nghĩa trong lược đồ theo cấu trúc sau :
<?xml version=”1.0” ?>
<schema name=name_fileNameSchema
xmlns = ”urn:schema-microsoft-com:xml-data”
xmlns:dt = ”urn:schema-microsoft-com:datatypes”>
Trang 19là closed hoặc open), dt :type (kiểu dữ liệu của phần tử) Ví dụ có định nghĩa các
phần tử như sau :
<ElementType name= ”HOTEN” content=”textOnly” model=”closed”>
<ElementType name = ”NGAYSINH” dt:type=”date”>
Các phần tử trong một lược đồ XML được nhìn nhận theo hai góc độ: phần
tử có kiểu phức hợp (là phần tử có chứa các phần tử con và thuộc tính) và phần
tử có kiểu đơn giản (là phần tử chỉ chứa dữ liệu đơn giản như: chuỗi, ngày tháng,
số nhưng không chứa các phần tử con và thuộc tính) Việc xác định kiểu các phần tử trong tài liệu XML có ảnh hưởng trực tiếp tới việc định nghĩa lược đồ XML theo chuẩn W3C
Để sử dụng một lược đồ đã định nghĩa, chuẩn W3C mở ra hướng rộng hơn
so với việc sử dụng theo Microsoft Thay vì phải sử dụng thuộc tính xmlns để tham chiếu đến file chứa lược đồ, W3C cho phép khai báo không gian tên cho tài liệu tham chiếu đến file lược đồ theo địa chỉ URL theo cách thức:
<?xml version =”1.0” ?>
<rootElement xmlns=”URL” >
</rootElement>
Nội dung của lược đồ XML theo dạng thức thuần văn bản Nó mở đầu bằng
khai báo chuẩn XML, tiếp theo W3C sử dụng tiếp đầu ngữ xsd: để tham chiếu
đến không gian tên của lược đồ, theo cú pháp sau:
Trang 20<?xml version =”1.0” ?>
<xsd:schema xmlns:xsd = “http:// www w3.org./1999/XMLSchema" >
</xsd:schema>
Tiếp theo là khai báo các phần tử và kiểu dữ liệu: Đối với kiểu phần tử phức
hợp sử dụng phần tử khai báo <xsd:complextType>, một phần tử phức hợp
thường chứa các khai báo phần tử con, tham chiếu đến các phần tử khác và khai
báo các thuộc tính Phần tử được khai báo bằng chỉ thị <xsd:element>, khai báo thuộc tính bằng chỉ thị <xsd:attribute> Đối với kiểu phần tử đơn giản được khai báo bằng chỉ thị <xsd:simpleType> Sau khi định nghĩa kiểu phần tử, ta
hoàn toàn có thể khai báo các phần tử sử dụng kiểu vừa tạo
Ví dụ: Ta có khai báo kiểu phức hợp cho phần tử address
<xsd:complexType name = ”address”>
<xsd:element name = ”name” type = “xsd:string” />
<xsd:element name = ”street” type = “xsd:string” />
<xsd:element name = ”city” type = “xsd:string” />
<xsd:element name = ”state” type = “xsd:string” />
<xsd:attribute name = ”phone” type = “xsd:string” use =”option”/>
</xsd:complexType>
Sau đó có thể sử dụng định nghĩa phần tử address cho phần tử <Lender> và
<Borrower> để lưu thông tin cá nhân trong tài liệu như sau:
<xsd:complexType name =”transactionType”>
<xsd:element name=”Lender” type =”address”/>
<xsd:element name=”Borrower” type =”address”/>
<xsd:element ref=”note” minOccurs =”0”/>
<xsd: attribute name =”borrowDate” type=”xsd:date”/>
<xsd:complexType>
Trang 21Để khai báo kiểu dữ liệu cho các phần tử trong lược đồ ta sử dụng chỉ thị:
<xsd:dataType>, trong đó dataType là một trong các kiểu dữ liệu được cho
trong bảng sau [1]:
Binary Kiểu dữ liệu nhị phân
boolean Kiểu logic
byte Kiểu byte
century Kiểu thế kỷ (ví dụ 20)
date Kiểu ngày
decimal Kiểu thập phân
double Kiểu số thực 64 – bit
ENTITY Kiểu thực thể
ENTITIES Kiểu đa thực thể
ID Kiểu định danh
int, integer Kiểu số nguyên
IDREF Kiểu tham chiếu định danh
NOTATION Kiểu ghi chú
NMTOKEN Kiểu token đơn
NMTOKENS Kiểu đa token
month Kiểu tháng (ví dụ 4, 6)
string Kiểu chuỗi
1.1.7 Bảng định kiểu CSS (Cascading Stype Sheet)
Bảng định kiểu CSS (Cascading Style Sheet) giống như một tập mẫu (template) quy định các kiểu định dạng cho các phần tử trong XML như các định dạng về font chữ, màu sắc, mầu nền,
Trang 22Bảng định kiểu CSS cũng đã được áp dụng trong tài liệu HTML, tuy nhiên điểm khác biệt chủ yếu giữa việc áp dụng CSS vào HTML với việc áp dụng CSS vào XML là các thẻ trong HTML thì có sẵn thông tin định dạng còn XML thì không có
Bản chất của CSS là tạo ra một tập mẫu quy định các kiểu định dạng cho các phần tử trong XML (hay các thẻ trong HTML) trong một file tách biệt với tài liệu Sau đó tập mẫu này được áp dụng vào trong tài liệu XML thông qua chỉ thị
xử lý:
<?xml-stylesheet type=”text/css” href=”filename.css” ?>
Trong đó filename là tên file chứa tập mẫu quy định các định dạng cho các phần
tử trong tài liệu, file này có phần mở rộng bắt buộc là css và có nội dung là các
định dạng cho các phần tử trong tài liệu, nội dung định dạng của mỗi phần tử được định nghĩa theo cú pháp:
elementName {display:block; attName1: attValue1;…;attNamen:attValuen}
Trong đó elementName là tên phần tử cần định dạng, display:block hiển
thị thành phần theo cấp khối (bắt đầu ở đầu dòng và thành phần theo sau nó sẽ
bắt đầu ở dòng tiếp theo), hoặc display:line hiển thị thành phần theo nội dung
attName là tên thuộc tính, attValue là giá trị của thuộc tính Nếu muốn gom các
thuộc tính định kiểu lại một nhóm (gọi là lớp) thay vì định kiểu cho từng phần
tử, ta sử dụng cú pháp sau:
.className { attName1: attValue1;…;attNamen:attValuen}
Trong đó className là tên lớp và lớp này được sử dụng bên trong phần tử cần
định dạng thông qua thuộc tính theo cú pháp <elementName CLASS=”className”>
Ví dụ: có tệp tin định dạng format.css sau:
TAILIEU{display:block; font-size:24pt; font-weight:bold;color:red}
TIEUDE {display: block; font-style:bold; color:blue}
.F1{font:12pt/20pt "Arial Black"; color:black; font- style:italic}
Và một tài liệu XML có nội dung sau:
<?xml version="1.0" standalone="yes"?>
Trang 23<?xml-stylesheet type="text/css" href="format.css"?>
1.1.8 Mô hình DOM (Document Object Model)
Để xử lý một tài liệu XML, W3C định nghĩa tài liệu theo mô hình đối tượng tài liệu DOM (Document Object Model) Theo mô hình này thì một tài liệu XML được tổ chức theo cấu trúc hình cây bao gồm các nút đối tượng, nội dung của mỗi nút (note) trên cây có thể chứa phần tử (element), dữ liệu (text), thuộc tính (attribute),…và các nút con khác Cụ thể, trong mô hình DOM có các loại nút sau đây [1]:
Processing Instruction Chỉ thị xử lý
Trang 24Mô hình DOM được W3C định nghĩa theo nhiều cấp độ khác nhau Cụ thể
là các cấp độ [10]:
Level 0: Là đặc tả DOM không chính thức và được áp dụng cho các trình duyệt trước đây như Netscape navigator 3.0 và IE 3.0
Level 1: Tập trung vào sự kết hợp giữa tài liệu HTML và XML
Level 2: Hỗ trợ không gian tên XML, khung nhìn có lọc (filtered views)
Trang 25Theo mô hình DOM, tài liêu XML trên được tổ chức theo cấu trúc hình cây như sau:
Hình 1.2: Cấu trúc cây tài liệu XML 1.1.9 Phân tích tài liệu XML theo mô hình DOM
W3C định nghĩa tài liệu XML theo mô hình DOM (Document Object Model) Về cơ bản DOM là một giao diện trình ứng dụng API (Application Program Interface) không phụ thuộc ngôn ngữ và chương trình, cho phép các chương trình và các kịch bản truy cập và cập nhật động nội dung, cấu trúc và kiểu của các tài liệu XML cũng như HTML
Với mô hình DOM, một tài liệu XML có thể được phân tích: tạo, duyệt, thêm, loại bỏ, thay đổi các phần tử thông qua các ngôn ngữ như: Java, JavaScript, Visual Studio.NET, C/C++, Song dù sử dụng ngôn ngữ nào để phân tích thì ta cũng phải sử dụng tới các phương thức mà DOM cung cấp được liệt kê trong bảng sau [11]:
Chuc cac ban nghien cuu thanh cong linh vuc khoa hoc xa hoi
Sach khoa hoc xa hoi
Trang 26Phương thức Ý nghĩa
documentElement Lấy về nút gốc của tài liệu DOM
parentNode Lấy nút cha của nút hiện tại
firstChild Lấy nút con đầu tiên
previousChild Lấy nút con trước đó
nextChild Lấy nút con kế tiếp
lastChild Lấy nút con cuối cùng
firstSibling Lấy nút cùng cấp đầu tiên
nextSibling Lấy nút cùng cấp kế tiếp
previousSibling Lấy nút cùng cấp trước đó
lastSibling Lấy nút cùng cấp cuối cùng
getElementsByTagName Lấy về danh sách các nút
Item(i) Truy cập nút thứ i trong danh sách (i=0,1, ) childNodes Trả về danh sách các nút trong tài liệu
docType Trả về kiểu của nút gốc
length Trả về các nút trong danh sách các nút
nodeName Trả về tên của một nút
noteValue Trả về giá trị của một nút
noteType Xác định kiểu dữ liệu của một nút
createElement() Khởi tạo một thành phần mới trong tài liệu createTextNode() Khởi tạo dữ liệu text cho một nút
Ví dụ: Phân tích tài liệu XML dựa vào mô hình DOM sử dụng Javascript
Trang 27<SCRIPT LANGUAGE="JavaScript">
<TIEUDE> Sach khoa hoc </TIEUDE>
<NOIDUNG> Khoa hoc cong nghe </NOIDUNG>
</TAILIEU>
Trang 28dữ liệu trong tài liệu XML thông qua đường dẫn, hay nó cung cấp một cơ chế tham chiếu đến các nút trong một tài liệu XML theo các dạng sau [1]
XPATH Ý nghĩa Ví dụ
Dấu chấm “.” Tham chiếu đến nút hiện hành <xsl:value-of
select=”.”/>
/rootName Là dạng đường dẫn tuyệt đối
(bắt đầu từ root), kết quả chọn là phần tử rootName
/AAA cho kết quả là phần tử được chọn AAA
/rootName[/elementName]n/eN
ame
Chọn tất cả các phần tử eName /AAA/BBB/CCC
cho kết quả là chọn tất cả các phần tử CCC là con của /AAA/BBB
//elementName Dạng đường dẫn tương đối (tổng
thể), cho kết quả là chọn tất cả các phần tử elementName trong tài liệu
//BBB Cho kết quả là chọn tất cả các phần tử BBB
//elementName/eName Chọn tất cả các phần tử eName
trong tài liệu là con của elementName
//BBB/CCC Cho kết quả là chọn tất cả các phần tử CCC là con của
Trang 29BBB /rootName[/elementName]n/* Chọn tất cả các phần tử trong tài
liệu thoả đường dẫn chỉ định
/AAA/BBB/CCC/* Chọn tất cả các phần
tử thoả đường dẫn /AAA/BBB/CCC //* Chọn tất cả các phần tử trong tài
liệu /rootName[/elementName]n/eN
ame[i]
Chọn phần tử eName xuất hiện lần thứ i (i nguyên dương) trong tài liệu và thoả đường dẫn chỉ định
/AAA/BBB/CCC[1] Chọn phần tử CCC xuất hiện đầu tiên trong nhánh /AAA/BBB
//elementName[@attName=val
ue]
Chọn tất cả các phần tử trong tài liệu có thuộc tính attName=
value (có phân biệt khoảng trắng trong value)
//BBB[@name=‟b„ Chọn tất cả các phần
tử BBB có thuộc tính có giá trị b
//elementName[normalize-space(@attName)=value]
Chọn tất cả các phần tử trong tài liệu có thuộc tính attName=
value (không phân biệt khoảng trắng trong value)
space (@name)=‟b„ Chọn tất cả các phần
//BBB[normalize-tử BBB có thuộc tính có giá trị b
Trang 301.1.11 XLINK và XPOINTER
Như chúng ta biết, các trang Web viết bằng HTML trên Internet có thể kết hợp được với nhau là nhờ vào khả năng tạo siêu liên kết Tuy nhiên việc tạo siêu liên kết trong HTML thường rất hạn chế - chỉ thông qua một số thẻ quy định trước như <A>, <IMG> và các siêu liên kết trong HTML chỉ là đơn chiều
XLINK và XPOINTER là hai khái niệm giúp mở rộng và khắc phục những nhược điểm của siêu liên kết trong HTML XLINK cho phép tạo các liên kết đa chiều giữa các tài liệu XML và cho phép liên kết ứng xử tuỳ vào tình huống quy định cũng như tuỳ vào vị trí của tài nguyên XPOINTER được dùng để định vị trí của một vùng dữ liệu nào đó (dựa trên cơ sở đường dẫn XPATH) XLINK có thể trỏ và liên kết chính xác đến mục dữ liệu định nghĩa bởi XPOINTER
1.1.11.1 XLINK
Với XLINK, một liên kết trong tài liệu XML được tạo ra bởi việc định nghĩa thuộc tính liên kết của phần tử Xlink Các phần tử chứa thuộc tính Xlink được gọi là phần tử liên kết (lingking element) Không gian tên của các phần tử liên kết được định nghĩa thông qua địa chỉ URI http:// www W3 org/1999/xlink như sau:
<elementName
xmlns:xlink=” http:// www W3 org/1999/xlink” />
Trong đó, tiếp đầu ngữ sử dụng cho không gian tên XLINK có thể là xlink hoặc một tên khác Có 7 kiểu XLINK được định nghĩa thông qua giá trị của thuộc tính xlink:type như sau:
Simple Liên kết đơn giản Resource Tài nguyên liên kết Extended Liên kết mở rộng Title Tiêu đề liên kết Locator Định vị None Tuỳ biến
Arc Cung liên kết
Trang 31Trong XML có hai kiểu liên kết đặc trưng đó là liên kết đơn giản (simple link) và liên kết mở rộng (extended link) Liên kết đơn giản trong XML tương tự
như siêu liên kết trong HTML, trong đó thuộc tính xlink:href được sử dụng để
trỏ đến vị trí của tài nguyên cần liên kết Việc tạo liên kết trong trường hợp simple link trong XML tuy giống như HTML nhưng nó không bị bó buộc như
HTML nhờ vào phần tử XLINK trong XML có thêm hai thuộc tính xlink:show
và xlink:actuate được thể hiện theo cấu trúc:
<elementName
xlink:show = “replace/ embed/ new/ undefined ”/>
và
<elementName
xlink:actuate = “onLoad/ onRequest/ undefined ”/>
Liên kết mở rộng (extended link) được sử dụng để liên kết đến nhiều tài liệu đích và từ nhiều nguồn khác nhau (dựa vào chiều liên kết) Có hai loại tài nguyên liên kết là tài nguyên cục bộ (tương ứng với xlink:type = “resource”, được định nghĩa trực tiếp trong liên kết) và tài nguyên ở xa (tương ứng với xlink:type= “locator”, được định nghĩa thông qua tham chiếu đến địa chỉ URI hoặc URL ) theo dạng thức:
<elementName xlink:type= “resource”> text </elementName>
Trang 32định vị dữ liệu dựa trên các phần tử Điểm trỏ ký tự dùng để định vị dữ liệu đến từng ký tự cụ thể của nội dung tài liệu XPOINTER thường được sử dụng chung với các địa chỉ cơ sở URI hay URL với hàm trỏ xpointer() được sử dụng sau ký hiệu # của địa chỉ URL theo cú pháp:
Xlink:href = “URL #xpointer((start_expression)/ range-to(end_expression) )”
Trong đó, start_expression và end_expression là biểu thức viết bằng cú pháp XPATH cho biết đầu khoảng cách và cuối khoảng cách
1.2 Cơ sở dữ liệu quan hệ
1.2.1 Cấu trúc cơ sở dữ liệu quan hệ
Một cơ sở dữ liệu quan hệ là một tập của một hoặc nhiều quan hệ, trong đó mỗi quan hệ là một bảng hai chiều bao gồm các cột và các hàng (gọi là bảng dữ liệu hay quan hệ) Bảng dữ liệu chính là hình thức thể hiện cụ thể của kiểu thực thể khi chúng ta xây dựng cơ sở dữ liệu, bảng dữ liệu được sử dụng để lưu dữ liệu về các thực thể trong lớp thực thể đó
Như vậy, bảng dữ liệu là một tập các bộ dữ liệu, hay bản ghi dữ liệu, mỗi bộ
có cùng một số lượng thuộc tính như nhau nhưng có thể khác nhau về giá trị Bảng dữ liệu trong cách tiếp cận CSDL quan hệ được hiểu chính xác hơn bằng cụm từ “quan hệ” Một quan hệ bao gồm một lược đồ quan hệ và một thể hiện quan hệ Trong đó, thể hiện quan hệ chính là một bảng, còn lược đồ quan hệ miêu tả tiêu đề các cột của bảng đó Trong một quan hệ không thể tồn tại hai bộ
dữ liệu giống nhau ở tất cả các thuộc tính
Một bảng dữ liệu được đặc trưng bởi một tên cụ thể, gọi là tên quan hệ Mỗi cột trong bảng tương ứng với một thuộc tính trong quan hệ, được đặt tên duy nhất (gọi là tên trường) Mỗi dòng trong bảng tương ứng với một bộ của quan hệ, một bộ là một danh sách các giá trị có thứ tự (tương ứng thứ tự các cột trong bảng)
Ví dụ: Cho bảng dữ liệu hay quan hệ
Trang 33KHÁCHHÀNG Mã số KH Họ tên KH Số ĐT Địa chỉ
KH001 Trần Mai Hương 0240556778 Bắc Giang KH002 Nguyễn Thu Hà 0241775432 Bắc Ninh KH003 Trần Anh Tuấn 0983800123 Hà Nội KH004 Vũ Đình Công 0983330169 Bắc Giang
Bảng 1.1: Bảng dữ liệu KHACHHANG
Trong bảng dữ liệu, mỗi thuộc tính nhận giá trị nằm trong một miền nào đó, gọi là miền giá trị Cũng như kiểu dữ liệu, miền giá trị không chỉ xác định tập giá trị cho thuộc tính mà còn xác định các thao tác được phép sử dụng trên các dữ liệu
Định nghĩa miền giá trị:
Miền giá trị của bảng quan hệ là miền xác định các giá trị của thuộc tính trong bảng quan hệ
Note: Miền giá trị phải đơn giản, chỉ nhận giá trị đơn (đơn trị) Nếu miền
giá trị nhận giá trị là đa trị (không phải là nguyên tố) thì ta phải tách giá trị đa thành đơn trị (bằng cách thêm vào các quan hệ phụ)
Quan hệ có thể được hiểu là tập con của tích đề các của một hoặc nhiều miền Như vậy, mỗi quan hệ có thể là vô hạn Với giả thiết rằng, quan hệ là một tập hữu hạn
Người ta dùng thuật ngữ “quan hệ cơ sở” để chỉ mức độ thấp nhất của thể hiện dữ liệu đối với người dùng Tất cả các dữ liệu trong CSDL quan hệ sẽ được lưu trữ theo tập các “quan hệ cơ sở” Dữ liệu có thể được truy cập và xử lý theo cách nhìn nhận riêng, đặc biệt được gọi là “khung nhìn” Khung nhìn là quan hệ logic, tương ứng trực tiếp hay gián tiếp với quan hệ cơ sở
Định nghĩa khung nhìn (View):
Khung nhìn là quan hệ liên kết logic cho phép liên kết hai hay nhiều quan
hệ một cách trực tiếp hoặc gián tiếp
Trang 34Một khung nhìn có thể là một tập con đơn giản của một quan hệ cơ sở
Ví dụ: cho bảng quan hệ BANHANG
BANHÀNG Mã số KH Họ tên KH Địa chỉ Loại hàng Số lượng
KH001 Trần Mai Hà Bắc Giang Xe đạp 10 KH002 Nguyễn Thu Hà Bắc Ninh Xe máy 2 KH003 Trần Anh Tuấn Hà Nội Ô tô 12 KH004 Vũ Đình Công Bắc Giang Xe máy 10
Bảng 1.2: Bảng dữ liệu BANHANG
Và bảng quan hệ KHACHHANG
KH001 Trần Mai Hương Bắc Giang KH003 Trần Anh Tuấn Hà Nội KH004 Vũ Đình Công Bắc Giang
1.2.2 Ràng buộc toàn vẹn trên một cơ sở dữ liệu quan hệ
Ràng buộc toàn vẹn và kiểm tra sự vi phạm ràng buộc toàn vẹn là một trong những vấn đề quan trọng trong quá trình phân tích, thiết kế và khai thác các hệ thống cơ sở dữ liệu
1.2.2.1 Định nghĩa [3]:
Ràng buộc toàn vẹn là một điều kiện bất biến không được vi phạm trong
một cơ sở dữ liệu
Trang 35Trong thực tế, một CSDL luôn luôn tồn tại các mối liên hệ qua lại lẫn nhau giữa các thuộc tính, giữa các bộ giá trị trong cùng một quan hệ hoặc trong các quan hệ với nhau Các mối quan hệ phụ thuộc lẫn nhau này chính là những điều kiện bất biến mà tất cả các bộ của các quan hệ có liên quan trong CSDL đều phải thoả mãn tại bất kỳ thời điểm nào Ràng buộc toàn vẹn còn có thể được hiểu là các quy tắc (rules) được áp đặt trên các đối tượng của thế giới thực
1.2.2.2 Các yếu tố của ràng buộc toàn vẹn
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
Trang 36đô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á