Professional Documents
Culture Documents
Baigiang CSDL Nang Cao
Baigiang CSDL Nang Cao
BÀI GIẢNG
CHƯƠNG TRÌNH ĐÀO TẠO THẠC SĨ NGÀNH CÔNG NGHỆ THÔNG TIN
HÀ NỘI 2015
Dữ liệu là một thành phần không thể thiếu trong các ứng dụng công nghệ
thông tin. Quá trình phát triển của CNTT cũng kéo theo quá trình phát triển của công nghệ
CSDL.
Công nghệ lưu trữ và xử lý dữ liệu cho đến nay đã trải qua các giai đoạn phát triển chính
như sau:
- Xử lý tệp truyền thống: Trong mô hình này, dữ liệu lưu trữ thành các tệp riêng rẽ, được
mô tả và gắn kết với từng chương trình ứng dụng.
Cách xử lý này sẽ phát sinh vấn đề dư thừa dữ liệu và các dị thường trong cập nhật. Chẳng
hạn, có thể có 2 chương trình ứng dụng với 2 tệp dữ liệu riêng, nhưng mỗi tệp dữ liệu này lại có
những thông tin giống nhau, vì vậy tạo nên sự dư thừa dữ liệu, gây lãng phí cho lưu trữ và quản lý.
Nguy hại hơn là khi cập nhật thay đổi thông tin về một thực thể trong tệp dữ liệu này thì cũng phải
thay đổi trong tệp kia với đối tượng đó. Điều này rất khó thực hiện triệt để khi có nhiều tệp dữ liệu
có chứa các thông tin trùng lặp, và sẽ gây ra các dị thường trong cập nhật (thông tin không nhất
quán, thông tin mâu thuẫn...).
- Xử lý CSDL (Database-DB): Để khắc phục các nhược điểm của mô hình xử lý tệp, dữ
liệu của các ứng dụng được lưu trữ tập trung, được mô tả và xử lý thống nhất cho mọi chương
trình ứng dụng. Các dữ liệu tập trung lại thành một CSDL, được xử lý theo cách thống nhất cho
tất cả các ứng dụng có liên quan.
Như vậy vấn đề tập trung dữ liệu là mấu chốt của xử lý CSDL. Công nghệ CSDL là một
bước tiến lớn của công nghệ xử lý dữ liệu. Rõ ràng là nhờ sự tập trung dữ liệu, CSDL đã khắc
phục được sự dư thừa dữ liệu, hạn chế các dị thường trong cập nhật.
Các hệ CSDL đầu tiên đã xuất hiện từ những năm 1960, từ đó đến nay chúng ta đã chứng
kiến nhiều hệ quản trị CSDL ra đời như FoxBase, FoxPro, MS Access, MySQL, SQL Server,
Firebird, Oracle.
- Công nghệ CSDL phân tán (Distributed Database-DDB): Khi công nghệ mạng máy
tính ra đời, người ta phân chia CSDL tập trung thành các CSDL cục bộ đặt trên các máy tính
khác nhau (các trạm/ sites) và được kết nối bởi mạng truyền thông. Các CSDL cục bộ này tích
hợp được với nhau qua mạng máy tính mà không cần có sự tập trung dữ liệu. Do đó có thể xây
dựng được một hệ thống CSDL, trong đó dữ liệu phân tán trên một mạng máy tính. Đó là cách
tiếp cận của CSDL phân tán.
Có thể nhận thấy một điều thú vị là: Công nghệ mạng máy tính xúc tiến một kiểu làm việc
đi ngược lại nỗ lực tập trung hóa của công nghệ CSDL, tuy vậy hai xu hướng trái ngược nhau
Hình 1.4 mô tả một ứng dụng điển hình của CSDL phân tán trong doanh nghiệp gồm có 3
bộ phận chính: Trụ sở chính là nơi điều hành mọi hoạt động của doanh nghiệp, cân đối dự báo tài
chính…, Bộ phận sản xuất là nơi sản xuất, lập kế hoạch SX và kế hoạch nguyên liệu… và Bộ
phận bán hàng nhận các đơn đặt hàng, phân phối hàng hóa, dịch vụ sau bán hàng…
Có thể đưa ra định nghĩa cho CSDL phân tán theo cách mô tả như sau:
Định nghĩa 1.1: CSDL phân tán là một tập hợp các CSDL cùng hợp tác hoạt động, được
lưu trữ trên các máy tính khác nhau (gọi là các trạm/sites) được kết nối với nhau bởi một mạng
truyền thông và được quản lý bởi một hệ quản trị CSDL phân tán.
Một cách lý tưởng, người dùng tại một trạm bất kỳ có thể truy cập và thao tác dữ liệu trên
bất cứ trạm nào, các CSDL đó được người dùng nhìn thấy và xử lý chỉ như là một CSDL tập
trung, người dùng có thể không biết và không cần biết đến sự phân tán của dữ liệu. Tính chất này
được phát biểu: “sự phân tán của dữ liệu là trong suốt đối với người dùng”.
Các thành phần của CSDL phân tán:
* Về mặt vật lý: Yếu tố chính để phân biệt một cơ sở dữ liệu phân tán với một cơ sở dữ liệu
tập trung là:
- Cơ sở dữ liệu phân tán phải có nhiều máy tính gọi là các trạm (sites/nodes).
- Các trạm phải được kết nối bởi một kênh truyền thông nào đó để truyền dữ liệu (trao đổi
dữ liệu) bao gồm các giao thức truyền thông.
* Về mặt logic: Phần mềm quản trị CSDL phân tán gồm 3 module chính sau:
- Xử lý dữ liệu (DP-Database Processing): Quản lý dữ liệu cục bộ tại các trạm giống như
với cơ sở dữ liệu tập trung.
- Xử lý ứng dụng (AP-Application Processing): Module này sẽ xử lý các ứng dụng dữ liệu
trên mỗi trạm, xử lý các giao dịch con trên các trạm và truy cập các thông tin phân tán trên các
trạm.
- Xử lý truyền thông (CP-Communication Processing): Module này có nhiệm vụ liên kết
(kết nối) các trạm với kênh truyền thông.
1.2.1 Tính thuần nhất và không thuần nhất của một hệ CSDL phân tán
Để xây dựng CSDL phân tán, người ta phải phân bố dữ liệu trên các trạm khác nhau. Mỗi
cách tiếp cận cho việc phân bố dữ liệu sẽ nhận được một CSDL phân tán với những tính chất
khác nhau.
Nói chung điều kiện (ii) thường bao gồm cả điều kiện (i), bởi vì khi các CSDL cục bộ được
quản trị bởi cùng một hệ QTCSDL thì các CSDL đó phải có cùng mô hình (chẳng hạn mô hình
quan hệ). Một CSDL phân tán thuần nhất thường có được từ việc chia một CSDL tập trung thành
một tập các CSDL cục bộ.
Như vậy, CSDL phân tán thuần nhất thường là kết quả của một cách thiết kế “từ trên
xuống”. Theo cách này, ta thiết kế một CSDL phân tán từ một CSDL tập trung, rồi tách thành các
trạm, tạo thuận lợi cho cho sự tăng trưởng của một tổ chức (cơ quan, doanh nghiệp…). Mô hình
này cũng cải thiện hiệu năng của việc quản lý và khai thác dữ liệu nhờ khả năng xử lý song song
được cung cấp bởi sự có mặt của nhiều trạm.
+ Việc quản trị CSDL từ xa được thực hiện bởi một DBMS trên máy chủ.
+ Việc quản trị CSDL người dùng thực hiện trên máy trạm của người dùng, bởi phiên bản
micro của DBMS trên máy chủ, người dùng phải đảm bảo sự nhất quán dự liệu riêng với dữ liệu
máy chủ.
+ Nói chung việc truy cập CSDL từ xa thường được hạn chế trong việc tra cứu thông tin,
các phép cập nhật được làm theo cách tập trung trên máy chủ.
Cách tiếp cận CSDL từ xa cho một chức năng hạn chế, nhưng không vấp phải những vấn
đề khó khăn nhất của CSDL phân tán (quản lý từ điển dữ liệu, xử lý các giao dịch phân tán…).
Thí dụ 1.1. Phòng đào tạo có một CSDL đặt trên một máy chủ gồm danh sách SV mỗi
khóa của mỗi môn học, điểm kiểm tra, điểm chuyên cần, điểm thi. Giáo viên và sinh viên có thể
truy cập và tải về đề sử dụng. Đây là một mô hình CSDL từ xa.
1.3. CÁC TÍNH CHẤT CƠ BẢN CỦA MỘT HỆ CƠ SỞ DỮ LIỆU PHÂN TÁN
Các hệ quản trị CSDL phân tán phải làm cho người sử dụng trong hệ thống không biết và
không cần biết tới sự phân tán của dữ liệu và việc sử dụng CSDL phân tán phải không khó hơn
CSDL tập trung. Như vậy các hệ quản trị CSDL phân tán phải cung cấp các mức độc lập khác
nhau đối với dữ liệu và đối với người dùng, nói cách khac, các hệ quản trị CSDL phân tán phải
tạo nên các tính chất cơ bản của một hệ CSDL phân tán, đó cũng là các mục tiêu của một hệ
CSDL phân tán.
Nhờ tính chất này, người dùng sẽ không cần quan tâm tới sự phân tán của dữ liệu và có thể
không biết là có sự phân tán. Thông tin về sự phân tán của dữ liệu (chẳng hạn một quan hệ được
phân tán thành các quan hệ con và đặt trên các trạm khác nhau) được lưu trữ trong từ điển dữ
liệu tổng thể và được hệ quản trị CSDL phân tán tham khảo để xác định vị trí của các thông tin
1.3.2. Tính độc lập đối với sự phân đoạn của các quan hệ
Tính độc lập đối với sự phân đoạn sẽ che dấu người dùng về việc các dữ liệu đã bị phân
đoạn (hoặc: sự phân đoạn là trong suốt đối với người dùng).
Trong CSDL phân tán, các quan hệ được phân đoạn và có thể lưu trữ ở các trạm khác
nhau, việc phân đoạn là nhằm tăng tính hiệu quả của một CSDL phân tán và nó cho phép đơn
giản hóa các truy cập địa phương.
Khi người dùng truy cập tới các quan hệ tổng thể, hệ quản trị CSDL phân tán sẽ tham
chiếu tới các đoạn một cách phù hợp, thông tin về sự phân đoạn được lưu trữ trong từ điển, vì
vậy sự phân đoạn là độc lập với người dùng.
Tính độc lập đối với sự phân đoạn được đảm bảo bởi hệ quản trị CSDL phân tán.
Sự nhân bản là một giải pháp cho an toàn dữ liệu. Sự nhân bản là việc tạo ra các bản sao
dư thừa. Một đoạn được nhân bản khi tồn tại hai hay nhiều bản sao của nó. Mỗi bản sao được lưu
trữ trên một hay nhiều trạm khác nhau. Ngoài ra, sự nhân bản còn làm tăng tính sẵn sàng truy
cập và tăng khả năng xử lý cục bộ.
Việc duy trì và đồng bộ các bản sao là khá phức tạp và tốn kém. Tuy nhiên, do vấn đề an
toàn dữ liệu thì mọi CSDL phân tán đều phải thực hiện nhân bản.
Tính độc lập đối với sự nhân bản là làm cho người dùng không biết là có sự nhân bản mà
chỉ nhìn thấy các quan hệ không nhân bản. Như vậy, sự nhân bản là trong suốt đối với người
dùng.
1.3.4. Tính độc lập đối với các hệ quản trị CSDL cục bộ
- Tính độc lập này cho phép che dấu một sự kiện là các hệ quản trị CSDL địa phương có
thể khác nhau. Mục tiêu này rất khó thực hiện hoàn toàn, nhất là đối với hệ CSDL phân tán
không thuần nhất, người ta đưa ra một giải pháp gần đây nhất, là dùng một mô hình trụ cột
(thường chọn là mô hình quan hệ) và xác định một bộ chương trình dịch giữa các mô hình cục bộ
và mô hình trụ cột.
- Đây là một tính chất cho phép các trạm điều khiển và thao tác dữ liệu cục bộ của mình
độc lập với các trạm khác. Mỗi trạm có thể tự quản trị CSDL cục bộ, nhưng cũng có thể tham gia
trong hệ thống CSDL phân tán với vai trò như là máy khách (client) hoặc với vai trò như máy
chủ (server). Việc quản trị CSDL phân tán hoàn toàn phi tập trung.
- Tính tự trị được đảm bảo bởi hệ quản trị CSDL phân tán.
Là một khả năng tăng trưởng hệ thống CSDL phân tán bằng việc đưa thêm vào các trạm
mới với các tác động tối thiểu lên các CSDL cục bộ và các chương trình ứng dụng hiện có.
Tính chất này đảm bảo rằng mọi sự cố trên một phần nhỏ của hệ thống rất ít hoặc hoàn
toàn không ảnh hưởng đến hoạt động của toàn bộ hệ thống.
- Đây là tính chất sống còn của cách tiếp cận CSDL phân tán.
- Vấn đề cốt yếu là phân đoạn hợp lý và nhân bản dữ liệu để có thể khai thác và xử lý song
song trên CSDL phân tán.
Kiến trúc lược đồ nhằm đề xuất việc tổ chức lý tưởng nhất một CSDLPT hỗ trợ các mức
độc lập đối với dữ liệu và người dùng. Kiến trúc lược đồ của CSDL phân tán là sự mở rộng kiến
trúc 3 mức cho CSDL tập trung.
1.4.1.1. Nhắc lại kiến trúc 3 mức trong CSDL tập trung
Kiến trúc 3 mức theo tiêu chuẩn ANSI/SPARC (American National Standards Institute:
Viện Tiêu chuẩn quốc gia Mỹ/Planing and Requirement Committee: Ủy ban nhu cầu và kế hoạch
Mỹ) được mô tả hình 1.8.
- Mức khung nhìn: Gồm các lược đồ ngoài, mỗi lược đồ ngoài mô tả chỉ một phần của
CSDL, thích hợp với một nhóm người sử dụng nhất định. Mỗi người sử dụng có thể không quan
tâm đến toàn bộ CSDL mà chỉ cần một phần thông tin nào đó.
- Mức logic: Gồm các lược đồ khái niệm, các lược đồ này mô tả những dữ liệu nào được
lưu trữ trong CSDL, mối quan hệ giữa chúng. Chẳng hạn lược đồ khái niệm chỉ quan tâm đến
các quan hệ được lưu trữ trong CSDL và các mối liên hệ giữa chúng chứ không quan tâm đến
cách thức lưu trữ các quan hệ này.
- Mức vật lý: Gồm các lược đồ trong, các lược đồ này mô tả dữ liệu được lưu trữ như thế
nào trong bộ nhớ thứ cấp. Mức này phản ánh cấu trúc dữ liệu, cách tổ chức tệp, các kỹ thuật nén
dữ liệu, cấp phát vùng nhớ…
Dưới đây chúng ta sẽ xem xét kiến trúc lược đồ của một CSDL phân tán.
Các chức năng trong một hệ thống CSDL được chia thành 2 nhóm chính trong quan hệ
Khách/Chủ (Client/Server). Nhóm khách bao gồm các chức năng xử lý ứng dụng (trình quản lý
ứng dụng) và nhóm chủ bao gồm các chức năng xử lý dữ liệu (trình quản lý dữ liệu) có mặt tại
mỗi trạm, như vậy mỗi trạm sẽ vừa có vai trò là trạm khách và vừa có vai trò là trạm chủ.
Kiến trúc chức năng của hệ CSDL phân tán bao gồm các nhóm chức năng sau:
Các chức năng này còn gọi là trình quản lý dữ liệu, được thực hiện ở các mức của lược đồ
cục bộ, bao gồm:
- Định giá các câu hỏi cục bộ: Các câu hỏi cục bộ này nhận được từ các câu hỏi được diễn
đạt theo lược đồ sắp đặt thành các câu hỏi diễn đạt theo lược đồ ngoài cục bộ của CSDL cục bộ.
- Quản lý các giao dịch con trên mỗi CSDL cục bộ.
- Truy cập các CSDL cục bộ
Sơ đồ quan hệ Client/Server trong CSDL phân tán được mô tả trong hình 1.10. Nói chung,
một câu hỏi của người dùng sẽ viện dẫn tới phần mềm quản lý ứng dụng của trạm khách và phần
mềm quản lý dữ liệu của một hay nhiều trạm chủ. Các chức năng xử lý ứng dụng và chức năng
xử lý dữ liệu đều được tích hợp trong phần mềm quản trị CSDL phân tán.
TỐI ƯU HÓA CÂU HỔI VÀ QUẢN LÝ CÁC GIAO DỊCH PHÂN TÁN
Việc định nghĩa dữ liệu trong CSDL phân tán bao gồm hai vấn đề quan trọng,
đó là:
- Sự mô tả dữ liệu tổng thể.
- Sự phân đoạn và sắp đặt dữ liệu trong mạng máy tính của CSDL phân tán.
2.1.1. Mô tả dữ liệu
Thao tác mô tả dữ liệu tổng thể, chẳng hạn thêm một quan hệ mới, hay sửa đổi mô tả đó
phụ thuộc chủ yếu vào việc tổ chức từ điển dữ liệu.
- Với 1 từ điển DL được tổ chức tập trung, thao tác mô tả dữ liệu rất đơn giản vì nó chỉ liên
quan đến một trạm trung tâm lưu trữ từ điển DL.
- Với 1 từ điển DL được lưu trữ có nhân bản, thao tác mô tả phải được làm đồng bộ với tất
cả các trạm có lưu các bản sao của từ điển DL.
- Với 1 từ điển được lưu trữ phân tán thì thao tác mô tả là phức tạp nhất, mô tả dữ liệu
thoạt đầu được đưa vào trạm cục bộ mà tại đó dữ liệu được tạo ra, trạm này gọi là trạm “tạo
sinh”, sau đó trạm “tạo sinh” và các trạm khác được phép truy cập dữ liệu mới sẽ hợp tác và trao
đổi thông tin về mô tả dữ liệu.
Trạm tạo sinh có thể biết danh sách các trạm được phép truy cập các dữ liệu riêng của nó,
nhằm thông báo cho các trạm này mọi thay đổi về mô tả dữ liệu.
Sự sắp đặt dữ liệu bằng cách chia một quan hệ tổng thể thành các đơn vị logic trong lược
đồ khái niệm tổng thể gọi là sự phân đoạn dữ liệu. Sự phân đoạn nhằm chia các quan hệ thành
các đơn vị nhỏ hơn (gọi là các đoạn) để có thể sắp đặt tối ưu trong CSDL phân tán. Có ba kiểu
phân đoạn: phân đoạn ngang, phân đoạn dọc và phân đoạn hỗn hợp nhằm chia các quan hệ R
thành các quan hệ con, được khai báo trong lược đồ khái niệm tổng thể và được sắp đặt phù hợp
trên các trạm (Hình 2.1).
R1 R1 R2
R1 R2
R2 R3
(a) Phân đoạn ngang (b) Phân đoạn dọc (c) Phân đoạn hỗn hợp
2.1.3. Các phép toán đại số quan hệ trong phân đoạn dữ liệu
Việc phân đoạn một quan hệ tổng thể thành các đoạn (mảnh) và khôi phục các quan hệ
tổng thể từ các đoạn được thực hiện bởi các phép toán đại số quan hệ. Đại số quan hệ là cơ sở
quan trọng của một ngôn ngữ bậc cao được sử dụng để thao tác trên các quan hệ. Ngôn ngữ này
bao gồm hai nhóm phép toán: các phép toán trên tập hợp (phép hợp, phép giao, phép trừ và tích
Đề các) và các phép toán chỉ trên các quan hệ (phép chọn, phép chiếu, phép kết nối và phép nửa
kết nối). Trước hết chúng ta đưa ra một số quy ước về ký pháp và nhắc lại các khái niệm liên
quan đến các phép toán đại số quan hệ:
- Một lược đồ quan hệ R xác định trên tập thuộc tính = {A1, A2,…, An}, có thể ký hiệu
R(A1, A2,…, An), hay R = {A1, A2,…, An}. Một thể hiện của lược đồ quan hệ R là một quan hệ, được
ký hiệu bằng chữ r (in thường). Quan hệ r có thể biểu diễn bằng một bảng.
- Tập các giá trị có thể của thuộc tính Aj, ký hiệu Dom(Aj) và gọi là miền trị của thứ j của
quan hệ r trên lược đồ quan hệ R.
- Hai quan hệ là cùng bậc nếu chúng có cùng số thuộc tính.
- Hai quan hệ là khả hợp nếu chúng có cùng bậc và thuộc tính thứ j của quan hệ này có
cùng miền trị với thuộc tính thứ j của quan hệ kia.
- Rõ ràng, các quan hệ xác định trên cùng một lược đồ quan hệ là các quan hệ
khả hợp.
Sau đây, chúng ta nhắc lại một số định nghĩa về các phép toán đại số quan hệ và một số
công thức thường được sử dụng trong đại số quan hệ.
r s = {t | t r hoặc t s}
r s = {t | t r và t s}
Như vậy, giao của hai quan hệ r và s là một quan hệ chỉ chứa các bộ chung của r và s.
(3) Phép trừ: Hiệu (set difference) của hai quan hệ khả hợp r và s, là một quan hệ, được ký
hiệu và xác định như sau:
r – s = {t | t r và t s}
Như vậy, hiệu của hai quan hệ r và s là một quan hệ chỉ chứa các bộ thuộc r mà không
thuộc s.
(4) Tích Đề các (Descartes): Cho r là một quan hệ xác định trên tập thuộc tính {A1, A2,…,
An} và s là quan hệ xác định trên {B1, B2,…, Bm}. Tích Đề các của hai quan hệ r và s là một quan
hệ được ký hiệu và xác định như sau:
Như vậy, Tích Đề các của hai quan hệ r và s là một quan hệ mà mỗi bộ là ghép nối của
một bộ trong r với một bộ trong s. Rõ ràng nếu r có p bộ và s có q bộ thì r s chứa p.q bộ.
(5) Phép chiếu: Cho r là một quan hệ trên tập thuộc tính = {A1, A2,…, An}, giả sử X ,
chiếu (projection) của quan hệ r lên tập thuộc tính X cho kết quả là một quan hệ con của quan hệ
r, được ký hiệu và xác định như sau:
X(r) = { t[X] | t r }
Trong đó t X là hạn chế của bộ t của r trên tập thuộc tính X, với X = Ai1 ,..., Aik , thì
t X = t A i1 ,..., t A ik
Như vậy, chiếu của quan hệ r trên tập thuộc tính X, là quan hệ con nhận được từ r bằng
cách bỏ đi những thuộc tính (các cột) trong r mà không có mặt trong X. Với quan hệ con nhận
được, nếu xuất hiện nhiều bộ giống nhau thì chỉ giữ lại một bộ trong số các bộ giống nhau.
(6) Phép chọn: Phép chọn (selection) là phép toán cho kết quả là một quan hệ con gồm
một tập con các bộ của quan hệ r thỏa mãn điều kiện C nào đó, được ký hiệu và xác định như
sau:
Trong đó, điều kiện C là một biểu thức boolean của các toán hạng, mỗi toán hạng là một
phép so sánh giữa hai biến là hai thuộc tính, hoặc giữa một biến là thuộc tính và một hằng, C cho
giá trị đúng hoặc sai đối với mỗi bộ của r, nếu đúng, bộ đó được chọn vào quan hệ mới c(r).
Như vậy, chọn của quan hệ r theo điều kiện C, ta được một quan hệ con c(r) với cùng
tập thuộc tính của r, mà chỉ chứa những bộ thỏa điều kiện C.
(7) Phép kết nối (join): Cho r là một quan hệ xác định trên tập thuộc tính {A1, A2,…, An} và
s là quan hệ xác định trên {B1, B2,…, Bm}. Giả sử r và s có một số thuộc tính chung (tức là i, j
để Ai = Bj), khi đó kết nối của quan hệ r và quan hệ s là một quan hệ với các bộ là kết nối của các
bộ trong r với các bộ trong s có giá trị các thuộc tính chung bằng nhau. Kết nối của hai quan hệ r
và s được ký hiệu và xác định như sau:
Như vậy, kết nối của hai quan hệ r và s là một quan hệ có tập thuộc tính là tất cả các
thuộc tính của cả r và s (với mỗi cặp thuộc tính chung cùng tên ở cả 2 quan hệ chỉ giữ lại 1
thuộc tính cho quan hệ mới), các bộ của quan hệ mới là ghép của 2 bộ trong r và s mà có giá trị
các thuộc tính chung là bằng nhau. Phép kết nối theo định nghĩa trên cũng gọi là kết nối tự
nhiên.
(8) Phép nửa kết nối (semi-join): Cho r là một quan hệ xác định trên tập thuộc tính {A1,
A2,…, An} và s là quan hệ xác định trên {B1, B2,…, Bm}. Giả sử r và s có một số thuộc tính chung
(tức là i, j để Ai = Bj), khi đó nửa kết nối của quan hệ r và quan hệ s là một quan hệ được ký
hiệu và xác định như sau:
r s = R (r s)
Như vậy, nửa kết nối của hai quan hệ r và s thực chất là việc loại đi những bộ của r mà
không kết nối được với s.
Thí dụ 2.1. Cho các quan hệ r và s như sau:
r A B s B C D
1 2 1 2 1
2 4 2 4 0
3 6 2 6 1
4 8 0
Tính được kết nối r s:
r s A B C D
1 2 4 0
1 2 6 1
2 4 8 0
Dễ dàng kiểm tra được rằng với hai quan hệ trên thì: r s=s r. Bạn đọc có thể tự tính
và kiểm tra, xem như là bài tập.
Thí dụ 2.2. Với các quan hệ r và s như trong thí dụ 2.1, tính được các nửa kết nối:
rs=sr
r s=s r
(2) Luật kết hợp đối với tích Đề các và phép kết nối:
(r s) t = r (s t)
(r s) t=r (s t)
(3) Các phép chiếu tương đương: Nếu r là một quan hệ trên tập thuộc tính = {A1, A2,…,
An}, và giả sử {A1, A2,…, Ak} {B1, B2, … Bm} , tức là A1, A2,…, Ak phải ở trong số các
thuộc tính B1, B2, … Bm thì:
A1 ,A2 ,...,Ak B1 ,B2 ,...,Bm r A1 ,A2 ,...,Ak r
F1 F2 r F2F2 r
A1 ,A2 ,...,Ak F r F A1 ,A2 ,...,Ak r
(6) Phép chọn liên kết với phép hợp, phép giao, phép trừ:
F r s F r F s
F r s F r F s
F r s F r F s
(7) Phép chiếu liên kết với phép hợp, phép giao, phép trừ:
X r s X r X s
X r s X r X s
F r s F r F s
(10) Tính nửa kết nối qua phép kết nối và phép chiếu:
r sr R S s
s r s R S r
với R S s là chiếu của s trên tập thuộc tính chung của r và s, còn R S r là chiếu của r trên
tập thuộc tính chung của r và s.
Có ba kiểu phân đoạn các quan hệ trong CSDL phân tán: phân đoạn ngang (gồm phân
đoạn ngang trực tiếp và phân đoạn ngang gián tiếp), phân đoạn dọc và phân đoạn hỗn hợp.
Định nghĩa 2.1: Sự phân đoạn ngang trực tiếp là sự phân hoạch một quan hệ thành các
tập con các bộ; mỗi tập con là một quan hệ con được xác định bởi một phép chọn trên quan hệ
tổng thể.
Thí dụ 2.3: Giả sử có quan hệ R_VANG (Rượu vang)
V1 AA 1982 13.2 12
V2 BB 1987 12.9 7
V3 AA 1984 12.8 10
V4 CC 1983 12.3 14
- Giải thích:
MARV: Mã loại rượu vang.
V_NHO: Vùng nho (vùng nguyên liệu, chẳng hạn vang Bordeaux thì có vùng nho là
Bordeaux, vang Đà Lạt thì vùng nho là Đà Lạt…).
R_VANG2 = =N.HIEU1984(R_VANG)
Kết quả nhận được là các đoạn R_VANG1 và R_VANG2, là các quan hệ con
như sau:
R_VANG1 MARV V_NHO N_HIEU D_RUOU GIA
V1 AA 1982 13.2 12
V4 CC 1983 12.3 14
Sự phân đoạn của quan hệ R_VANG như trên sẽ là một phân tách không mất thông tin,
không trùng lặp và khôi phục lại được.
Thật vậy, vì R_VANG1 R_VANG2 = nên các đoạn con của quan hệ R_VANG là
không trùng lặp.
Sự khôi phục có thể được thực hiện nhờ phép toán:
Định nghĩa 2.2: Sự phân đoạn ngang gián tiếp là sự phân hoạch một quan hệ thành các
tập con các bộ; mỗi tập con là một quan hệ con được xác định bởi một phép nửa kết nối của
quan hệ tổng thể với mỗi đoạn của một quan hệ khác.
Thực hiện phép nửa kết nối T_THU R_VANG2, nhận được quan hệ con T_THU2:
T_THU MAKH MARV NGAY D_DIEM S_LUONG
B1 V1 12/4 HANOI 5
B2 V2 25/9 HUE 2
B3 V3 12/4 HANOI 7
Sự phân đoạn của quan hệ T_THU như trên sẽ là một phân tách không mất thông tin,
không trùng lặp và khôi phục lại được.
Thật vậy, vì T_THU1 T_THU2 = nên các đoạn con của quan hệ T_THU là không
trùng lặp
Định nghĩa 2.3: Sự phân đoạn dọc là sự phân hoạch một quan hệ thành các tập các bộ
con; mỗi tập là một quan hệ con được xác định bởi một phép chiếu cho quan hệ tổng thể.
Để khôi phục lại quan hệ tổng thể từ các đoạn dọc, cần thêm vào mỗi đoạn dọc một hay
nhiều thuôc tính chung làm khóa. Khi đó, việc khôi phục có được nhờ vào phép kết nối các đoạn
con theo sự bằng nhau của các thuộc tính chung. Do việc thêm vào các thuộc tính chung này mà
quy tắc không trùng lặp bị vi phạm, nhưng phải chấp nhận sự vi phạm này để đảm bảo sự khôi
phục lại của quan hệ tổng thể.
Thí dụ 2.5. Trở lại quan hệ R_VANG:
R_VANG MARV V_NHO N_HIEU D_RUOU GIA
V1 AA 1982 13.2 12
V2 BB 1987 12.9 7
V3 AA 1984 12.8 10
V4 CC 1983 12.3 14
Ta phân hoạch quan hệ này thành hai đoạn dọc nhờ các phép chiếu:
- Với phép chiếu: VANG1 = MARV, V.NHO, N.HIEU(R_VANG), ta được quan hệ:
- Với phép chiếu VANG2 = MARV, V.RUOU, GIA(R_VANG), ta được quan hệ:
Định nghĩa 2.4: Sự phân đoạn hỗn hợp là sự phân hoạch một quan hệ thành các tập con
các bộ con; các bộ con được xác định bởi sự phân đoạn dọc, còn các tập con được xác định bởi
sự phân đoạn ngang. Mỗi tập con này là một quan hệ con của quan hệ tổng thể.
Thí dụ 2.6. Trở lại quan hệ R_VANG đã xét trong thí dụ 2.5:
Ta áp dụng phép phân đoạn hỗn hợp quan hệ này thành các đoạn con như sau:
- Với phép chiếu VANG1* = MARV , D.RUOU , GIA (R_VANG), ta được quan hệ:
- Với phép chiếu VANG2* = N . HIEU 1984 ( MARV ,V . NHO ,N . HIEU ( R _ VANG)) :
- Với phép chiếu VANG3* = N . HIEU 1984 ( MARV ,V . NHO ,N . HIEU ( R _ VANG)) :
Ra:
Câu trả lời
Hình 2.1. Các bước định giá một câu hỏi phân tán
Từ câu hỏi tổng thể được cho ở ngôn ngữ bậc cao (chẳng hạn SQL), sau giai đoạn phân
tách ta nhận được một câu hỏi chính tắc (ta cũng gọi câu hỏi chính tắc này là câu hỏi phân tán),
giai đoạn tiếp theo là định vị câu hỏi, đó là một quá trình gồm 2 bước: diễn đạt câu hỏi chính tắc
trên các đoạn và sau đó là giản lược câu hỏi này.
Thông tin cần thiết cho sự định vị câu hỏi phân tán được lưu trữ trong lược đồ
sắp đặt.
2.3.2.1. Diễn đạt câu hỏi chính tắc trên các đoạn.
Câu hỏi chính tắc được diễn đạt trên các đoạn, là một biểu thức đại số quan hệ tương
đương với câu hỏi chính tắc ban đầu, nhận được bằng việc thay thế mỗi quan hệ tổng thể trong
câu hỏi phân tán bằng sự khôi phục quan hệ đó từ các đoạn của nó bằng một phép toán đại số
quan hệ xác định sự khôi phục. (đôi khi gọi phép toán này là yêu cầu khôi phục)
Thí dụ 2.7. Giả sử có các quan hệ R_VANG và T_THỤ trong các thí dụ trên đây. Hãy xét
câu hỏi phân tán:
“Tìm các vùng nho của các loại rượu vang được tiêu thụ tại HANOI”. (*)
Rõ ràng câu hỏi này viện dẫn tới các quan hệ R_VANG và T_THỤ đã biết, và giả sử các
quan hệ này đã được phân đoạn:
B3 V3 12/4 HANOI 7
Do phép chiếu chỉ liên quan đến quan hệ R_VANG, còn phép chọn chỉ liên quan đến quan
hệ T_THỤ, cho nên biểu thức (1) có thể viết lại là:
V.NHO {[ MARV , V.NHO (R_VANG)] [ MARV (D.DIEM HANOI (T_THU))]} (2)
Biểu thức (2) là câu hỏi chính tắc nhận được từ câu hỏi phân tán (*) sau giai đoạn phân
tách. Để diễn đạt câu hỏi này, ta chỉ cần khôi phục các quan hệ tổng thể từ các đoạn của nó, tức
là trong (2) ta thay: R_VANG bởi VANG1 VANG2 và thay T_THU bởi T_THU1
T_THU2.
Khi đó ta có câu hỏi chính tắc được diễn đạt trên các đoạn là biểu thức (3)
dưới đây:
Biểu thức (3) trên đây là câu hỏi chính tắc đã được diễn đạt trên các đoạn, có thể được biểu
diễn bởi cây đại số quan hệ sau (cây T1)
- Do DDIEM "HANOI " (T_THU2) = nên ta loại bỏ cây con tương ứng của nó.
Cuối cùng, sau các phép giản lược, ta nhận được cây đại số quan hệ T3 của câu hỏi phân
tán đã được định vị và giản lược là:
Hình 2.4. Cây đại số quan hệ T3 của câu hỏi chính tắc đã định vị và giản lược
Từ cây T3 (tương đương T2 và T1), ta xác định được câu hỏi chính tắc đã được định vị và
giản lược cho bởi biểu thức sau:
V . NHO { MARV , VNHO (VANG1) MARV (T_THU1)} (4)
Như vậy, từ câu hỏi ban đầu (bằng ngôn ngữ bậc cao) ta xác định được biểu thức (4) là câu
hỏi chính tắc đã được giản lược và định vị trên các đoạn. Việc định giá câu hỏi (*) ban đầu được
thực thi nhờ thực hiện biểu thức (4), theo các bước sau:
(1) Tính phép chiếu: MARV , VNHO (VANG1), đặt bằng (P1):
(P2) MARV
V1
V3
Từ đó có câu trả lời: Các loại rượu vang được tiêu thụ tại Hà Nội có vùng nho ‘AA’.
Sau giai đoạn định vị, câu hỏi phân tán (là một biểu thức đại số quan hệ, hay còn gọi là câu
hỏi chính tắc) đã được diễn đạt trên các đoạn, tức là biểu thức đại số quan hệ chỉ chứa các quan
hệ con là các đoạn của các quan hệ tổng thể được đặt trên các trạm, vì vậy việc tính các biểu thức
đại số quan hệ này là có thể thực hiện được từ các CSDL cục bộ. Tuy nhiên, có nhiều cách tính
tương đương cho mỗi biểu thức đại số quan hệ, mỗi cách tính đó gọi là một chiến lược thực thi
câu hỏi phân tán.
Khái niệm: Tối ưu hóa câu hỏi phân tán là việc xác định một chiến lược thực thi câu hỏi
phân tán, làm cực tiểu hóa một hàm chi phí nào đó.
Với mỗi câu hỏi phân tán, sẽ có rất nhiều chiến lược thực thi câu hỏi, bài toán chọn một
chiến lược tối ưu là bài toán thuộc lớp NPC (NP- đầy đủ), nói chung rất khó để chọn được một
chiến lược tối ưu hóa đúng tuyệt đối. Cho nên mục tiêu của tối ưu hóa câu hỏi phân tán là lựa
chọn một chiến lược gần với tối ưu hóa, để tránh các chiến lược dẫn đến một chi phí quá lớn.
Để đơn giản, ta chọn hàm chi phí là thời gian thực thi câu hỏi và cũng hạn chế các phép
toán trong câu hỏi chỉ là ‘phép chiếu (P)’, ‘phép chọn (S)’ và phép ‘kết nối (J)’. Các biểu thức
đại số quan hệ như vậy thường gọi là ‘biểu thức P-S-J’.
Giả sử rằng thời gian tính toán với các quan hệ trên cùng một trạm là không đáng kể. (Với
các phép chiếu và chọn, là các phép toán ‘1 ngôi’, chỉ thực hiện trên một quan hệ con (một đoạn)
trên một trạm, nên thời gian là không đáng kể). Như vậy thời gian tính toán chủ yếu lại là thời
gian truyền dữ liệu giữa các trạm để thực hiện các phép kết nối. Thời gian truyền dữ liệu giữa
các trạm tỷ lệ với kích thước các quan hệ (tính bằng số phần tử dữ liệu trong mỗi quan hệ) tham
gia vào phép kết nối. Vì vậy từ nay ta gọi chi phí cần tối ưu là chi phí truyền tải dữ liệu giữa các
trạm, chi phí này tỷ lệ với số phần tử dữ liệu cần truyền tải giữa các trạm.
r
1 r2 r3 r4 (*)
Rõ ràng trình tự kết nối này là chưa tốt, vì có các kết quả trung gian có số bộ lớn hơn số bộ
ở kết quả cuối cùng. Điều này sẽ lãng phí công sức để tính toán, lưu trữ và truyền tải các quan hệ
rất lớn trong quá trình tính toán, mà kết quả lại là một quan hệ có số bộ nhỏ hơn nhiều.
Với 4 quan hệ trên có thể có nhiều trình tự kết nối khác, chẳng hạn
r1 r2 r3 r4 ,... Do phép kết nối có tính giao hoán, nên dù kết nối theo trình tự nào thì
việc kết nối 4 quan hệ trên vẫn cho kết quả là một quan hệ duy nhất với 100 bộ, vậy vấn đề đặt ra
là có thể tìm một trình tự kết nối tối ưu, trong đó mọi quan hệ kết quả trung gian có số bộ không
lớn hơn số bộ ở kết quả cuối cùng.
Định nghĩa 2.5: Một trình tự kết nối tối ưu cho các quan hệ r1, r2, ... , rk là một thứ tự thực
hiện các phép kết nối sao cho mọi kết quả trung gian có số bộ không lớn hơn số bộ ở kết quả
cuối cùng.
Việc xác định một trình tự kết nối tối ưu là khá phức tạp [4], chúng ta chưa trình bày trong
giáo trình này, mà chỉ minh họa vấn đề này bằng một thí dụ.
Thí dụ 2.7. Giả sử cần tính kết nối: r1 r2 r3 , với các quan hệ được cho như sau:
r1 A B C r2 C D E r3 B C D F
1 3 5 5 7 10 3 5 7 1
1 4 5 5 8 10 4 5 8 2
2 3 5 5 9 11 3 5 9 3
2 4 6 6 8 11 4 6 8 4
Ta có thể tính dãy kết nối trên theo nhiều thứ tự: (r1 r2) r3, r1 (r2 r3),
(r1 r3) r2,… có tất cả 3! = 6 trình tự kết nối. Do phép kết nối có tính giao hoán, nên mọi trình
Ta nhận được kết quả kết quả trung gian là một quan hệ có 10 bộ.
- Bước 2: tính (r1 r2) r3, cho kết quả cuối cùng của kết nối của 3 quan hệ
(r1 r2) r3 A B C D E F
1 3 5 7 10 1
1 3 5 9 10 3
1 4 5 8 10 2
2 3 5 7 10 1
2 3 5 9 10 3
2 4 6 8 11 4
Theo trình tự kết nối này, ta có số bộ ở kết quả trung gian là 10 bộ, nhiều hơn số bộ ở kết
quả cuối cùng là 6 bộ, vậy đây không phải là trình tự kết nối tối ưu.
Với trình tự 2: ta thực hiện phép kết nối trên theo thứ tự: r1 (r2 r3)
- Bước 1: tính r2 r3 cho kết quả kết nối của 2 quan hệ (trong ngoặc đơn)
r2 r3 B C D E F
3 5 7 10 1
4 5 8 10 2
3 5 9 11 3
4 6 8 11 4
Đây là kết quả của kết nối r2 r3, cho một quan hệ trung gian gồm 4 bộ.
Theo trình tự kết nối này, ta có số bộ ở kết quả trung gian là 4 bộ, số bộ ở kết quả cuối
cùng là 6 bộ, vậy số bộ ở kết quả trung gian không lớn hơn số bộ ở kết quả cuối cùng. Vậy đây là
trình tự kết nối tối ưu.
2.3.3.2. Rút gọn các quan hệ nhờ phép nửa kết nối
Một phép kết nối có thể được thực hiện bằng một tổ hợp các phép nửa kết nối và kết nối.
Áp dụng các công thức tương đương trong đại số quan hệ, ta có:
(1) Tính R S s tại trạm chứa quan hệ s, không phải tryền dữ liệu, chi phí bằng 0.
(2) Chuyển R S s sang trạm chứa r, chi phí là T’(s), số phần tử dữ liệu của R S s
(5) Tính kết nối tại vị trí của s theo công thức: r s r s s với chi phí bằng 0.
Trong 5 bước trên, chi phí truyền dữ liệu mà ta quan tâm chỉ phát sinh ở bước 2 và bước 4,
vậy tổng chi phí truyền dữ liệu theo chiến lược nửa kết nối là T’(s) + T’’(r) (hoặc T’(r) + T’’(s),
nếu áp dụng công thức r s (s r ) r
Vậy ta có chi phí theo chiến lược nửa kết nối (costnkn) là:
costnkn (r, s) = min {T’(s) + T’’(r) ; T’(r) + T’’(s)} (2)
Vậy chiến lược nửa kết nối sẽ tốt hơn kết nối trực tiếp, nếu có (2) < (1), tức là:
min {T’(s) + T’’(r) ; T’(r) + T’’(s)} < min {T(r), T(s)} (3)
Những điều kiện làm cho bất đẳng thức (3) thỏa mãn là:
(i) r và s có kích thước gần như nhau,
(ii) T’(s) và T’’(s) có kích thước nhỏ hơn nhiều so với T(s) (tương tự: T’(r) và T’’(r) có
kích thước nhỏ hơn nhiều so với T(r)).
Những điều kiện trên trong thực tế thường được thỏa mãn, chẳng hạn, do các quan hệ
thường có rất ít các thuộc tính chung, do đó T’(s) thường rất nhỏ so với T(s), mặt khác quan hệ s
thường chỉ có một số ít bộ kết nối được với r, cho nên T’’(s) cũng rất nhỏ so với T(s)...
Vì vậy, có thể khẳng định rằng chiến lược nửa kết nối thường có chi phí nhỏ hơn nhiều so
với kết nối trực tiếp.
Thí dụ 2.8. Trong CSDL phân tán, có các quan hệ r, s đặt tại hai trạm ở cách xa nhau:
r A B E s B C D F
7 4 1 4 6 7 1
8 5 2 5 6 7 2
7 6 3 4 11 9 3
9 7 4 5 11 9 4
8 8 5
Hãy tính kết nối của r với s theo cách trực tiếp và theo chiến lược nửa kết nối. Đánh giá chi
phí theo mối cách kết nối.
Giải:
(a) Kết nối trực tiếp: Do T(r) < T(s) nên ta chuyển r sang trạm chứa s và thực hiện kết nối:
r s A B C D E F
7 4 6 7 1 1
8 5 6 7 2 2
7 4 11 9 1 3
8 5 11 3 2 4
Chi phí truyền dữ liệu theo cách kết nối trực tiếp: costtt (r, s) = min {T(s), T(r)} = 15.
R S s B
4
5
(2) Chuyển R S s sang trạm chứa r, chi phí ở bước này là: T’(s) = 2.
r s A B E
7 4 1
8 5 2
(4) Chuyển r s sang trạm chứa s, chi phí ở bước này là: T’’(r) = 6.
(5) Tính kết nối tại trạm chứa s theo công thức r s r s s, nhận được kết quả:
r s A B C D E F
7 4 6 7 1 1
8 5 6 7 2 2
7 4 11 9 1 3
8 5 11 3 2 4
Tổng chi phí theo chiến lược nửa kết nối: costnkn (r, s) = T’(s) + T’’(r) = 8
Nhận xét: Việc dùng chiến lược nửa kết nối sẽ làm tăng số phép toán so với các kết nối
trực tiếp, tuy nhiên lại giảm đáng kể kích thước các quan hệ tham gia vào các phép kết nối.
Chính vì vậy chi phí theo chiến lược nửa kết nối thường nhỏ hơn nhiều so với chi phí theo cách
kết nối trực tiếp.
Chú ý 2.3.3. Nếu kích thước quan hệ s nhỏ hơn kích thước quan hệ r, tức là T(s) < T(r) thì
ta cần chuyển s sang trạm chứa r. Khi đó ta sử dụng các công thức: r s s r r và
s r s R S r . Các bước thực hiện trong chiến lược nửa kết nối hoàn toàn tương tự như
đã trình bày trên đây, chỉ cần đổi vai trò r và s.
Một giao dịch sẽ đọc/ghi một đơn vị dữ liệu (mục dữ liệu | item) của CSDL thông qua một
bộ đệm của giao dịch (vùng làm việc riêng - private work space). Mỗi giao dịch có thể thực hiện
các thao tác tính toán dẫn đến thay đổi giá trị của dữ liệu, nhưng những thay đổi này sẽ không tác
động ngay vào CSDL cho đến khi các giá trị mới được ghi vào CSDL nhờ một thủ tục hợp thức
(commited) khi kết thúc giao dịch. Giao dịch chỉ đọc sẽ không làm thay đổi CSDL.
- Các giao dịch phân tán
Các giao dịch được thực hiện trên một CSDL phân tán gọi là các giao dịch phân tán. Một
giao dịch phân tán bao gồm nhiều giao dịch con thực hiện trên các trạm.
Tính nguyên tố của một giao dịch phân tán được hiểu là giao dịch đó đã được thực hiện
trọn vẹn khi tất cả các giao dịch con của nó đều đã được thực hiện, hoặc trái lại, nếu có dù chỉ
một giao dịch con trên một trạm chưa được thực hiện thì toàn bộ giao dịch phân tán là chưa được
thực hiện (chưa commited, chưa được ghi các thay đổi vào CSDL). Như vậy giao dịch phân tán
chỉ có hai trạng thái kết quả: đã thực hiện hoặc không thực hiện. Các thủ tục hợp thức hóa sẽ
đảm bảo tính nguyên tố của các giao dịch phân tán.
Một số thí dụ vể giao dịch phân tán:
+ Truy vấn tài khoản/chuyển tiền qua dịch vụ Internet banking, rút tiền ở
máy ATM...
+ Mua vé/đặt chỗ máy bay (qua mạng) ...
- Giao dịch và sự nhất quán của CSDL
Mọi CSDL tập trung hay phân tán luôn luôn là nhất quán (thỏa mãn các ràng buộc toàn
vẹn) trước và sau khi thực hiện một giao dịch. Trong khi giao dịch đang thực hiện, CSDL có thể
tạm thời không nhất quán, nhưng sau khi thực hiện xong giao dịch, CSDL được cập nhật và phải
ở trạng thái nhất quán, hệ thống sẽ hủy bỏ giao dịch nếu kết quả cập nhật của giao dịch làm cho
CSDL trở nên không nhất quán. Chẳng hạn, nếu nhập tuổi của cha ít hơn tuổi của con, hay
chuyển khoản số tiền lớn hơn số dư thì sẽ làm cho CSDL trở nên không nhất quán, trong trường
hợp này giao dịch bị hủy.
- Các khái niệm về Lịch biểu trong giao dịch phân tán (Schedule)
(1) Lịch biểu cho một tập các giao dịch là một thứ tự (các bước) thực hiện các thao tác cơ
bản (như đặt khóa, đọc, ghi...) của các giao dịch trên một CSDL phân tán. Kết quả của một lịch
biểu là kết quả được cập nhật vào CSDL sau khi thực hiện các giao dịch theo lịch biểu này.
(2) Lịch biểu gọi là tuần tự nếu tất cả các bước thao tác của cùng một giao dịch xảy ra liền
nhau. Lịch biểu tuần tự luôn cho kết quả mong muốn (kết quả đúng).
(3) Lịch biểu gọi là khả tuần tự nếu các bước của các giao dịch khác nhau có
thể thực hiện xen kẽ nhau, nhưng cho kết quả như kết quả của một lịch biểu tuần tự (kết quả
đúng).
(4) Lịch biểu gọi là bất khả tuần tự nếu các bước của các giao dịch khác nhau có thể thực
hiện xen kẽ nhau, nhưng cho kết quả khác với kết quả của một lịch biểu tuần tự (kết quả sai).
Thí dụ 3.1: Giả sử có 2 giao dịch T1 và T2, thực hiện các thao tác theo chương trình P như
sau:
Hình 3.1. Các lịch biểu (a), (b) và (c) của hai giao dịch T1, T2
Các giao dịch T1 và T2 có thể hiểu là dịch vụ chuyển tiền giữa các tài khoản A, B và C, cụ
thể A chuyển 10 (đơn vị tiền), B chuyển 10 còn C nhận 20.
Với mọi lịch biểu tuần tự thì tổng A + B + C không đổi trước và sau khi thực hiện các giao
dịch. Chẳng hạn, nếu ban đầu A = B = C =100, thì sau khi thực hiện lịch biểu tuần tự cho 2 giao
dịch, kết quả trong CSDL sẽ là: A= 90, B = 90, C = 120, tổng A + B + C trước và sau khi thực
(a) Là lịch biểu tuần tự, kết quả đúng là: A := A – 10 ; B := B – 10; C:= C + 20.
(tổng A + B + C = 300)
(b) Là lịch biểu khả tuần tự, cho kết quả như lịch biểu tuần tự (a), (tổng A + B +
C = 300)
(c) Là lịch biểu bất khả tuần tự tuần tự: cho kết quả A := A – 10 ; B := B + 10;
C:= C + 20, khác với kết quả của lịch biểu tuần tự (a), tổng A + B + C = 320, tăng thêm 20, điều
này thật nguy hiểm cho ngân hàng!! (do T1 ghi giá trị B := B+10 = 110, ghi đè lên kết quả của B
:= B – 20 = 80 mà T2 đã ghi trước đó, cuối cùng có: A = 90, B = 110, C = 120!)
Kết luận: Điều khiển tương tranh các giao dịch phân tán là tìm một lịch biểu khả tuần tự
cho một tập các giao dịch, nhằm tăng khả năng xử lý song song cho hệ thống, và ngăn chặn việc
phát sinh các lịch biểu bất khả tuần tự.
Điều khiển tương tranh bằng đặt khóa là việc sử dụng một bảng khóa cho các mục dữ liệu
đối với một tập giao dịch để ngăn chặn việc phát sinh các lịch biểu bất khả tuần tự. Chúng ta
phân biệt các mô hình khóa cơ bản (LOCK/UNLOCK) và mô hình khóa phân biệt đọc / ghi
(RLOCK/WLOCK/UNLOCK).
Sơ đồ hoạt động của T1 và T2 theo chương trình P* được mô tả trong hình sau:
Thứ tự A trong A trong A trong
T1 T2
(steps) CSDL vùng đệm của T1 vùng đệm của T2
1 LOCK A 5 5 NULL
2 READ A 5 5 #
3 A := A+1 5 6 #
4 WRITE A 6 6 #
5 UNLOCK A 6 6 #
6 LOCK A 6 NULL 6
7 READ A 6 # 6
8 A := A+1 6 # 7
9 WRITE A 7 # 7
10 UNLOCK A 7 # 7
Do có sự đặt khóa, các giao dịch không thể tiến triển tự do, mà giao dịch T2 phải chờ giao
dịch T1 thực hiện xong UNLOCK A thì T2 mới truy cập A được. Như vậy nhờ việc đặt khóa cơ
bản, các giao dịch đã tự động phát sinh một lịch biểu tuần tự, sau khi T1 và T2 thực hiện xong
lịch biểu này, mục dữ liệu A trong CSDL có giá trị là 7 (kết quả đúng).
{ T2 T1 ; T1 T2 }
Đồ thị chờ đợi toàn cục cho một tập giao dịch: là một đồ thị G có hướng, trong đó các đỉnh
được gán nhãn là các giao dịch, các cung được xác định như sau: từ Ti có cung đến Tj nếu giao
dịch Ti chờ sự giải phóng 1 khóa được đặt bởi Tj, tức là có quan hệ chờ đợi: {Ti Tj}.
Nếu đồ thị chờ đợi có chu trình: có tắc nghẽn toàn cục
Khắc phục tắc nghẽn toàn cục: hủy bỏ một trong các giao dịch tham gia vào chu trình, và
khởi động lại giao dịch này sau khi các giao dịch trong chu trình cũ đã được thực hiện.
Thí dụ 3.5.
(a) Chẳng hạn, với các giao dịch trong thí dụ 3, ta có đồ thị đợi:
T1 T2
Hình 3.4. Đồ thị đợi cho 2 giao dịch đặt khóa cơ bản
Đồ thị này có chu trình, đã xảy ra tắc nghẽn, để khắc phục tắc nghẽn, ta hủy bỏ một giao
dịch và khởi động lại sau khi giao dịch kia đã hoàn thành.
(b) Dưới đây là đồ thị đợi toàn cục cho 6 giao dịch:
T1 T4 T5
T2 T3 T6
Các giao dịch T1, T2, T3, T4 làm thành một chu trình, xảy ra tắc nghẽn toàn cục. Để khắc
phục tắc nghẽn, ta có thể hủy bỏ bất kỳ giao dịch nào trong số các giao dịch T1, T2, T3, T4, và
khởi động lại sau khi các giao dịch còn lại của chu trình cũ đã được thực hiện.
Ở các phần trên, với khóa cơ bản, ta đã giả sử rằng khi một giao dịch khóa một mục dữ liệu
A (LOCK A) thì nó sẽ toàn quyền đọc hoặc ghi trên A. Tuy nhiên, thực tế có những giao dịch
chỉ truy xuất A để đọc giá trị trên A và không cần ghi trên A. Nếu phân biệt một giao dịch chỉ
đọc (Read only) và một giao dịch đọc và ghi (read/write) thì việc sử dụng các khóa có phân biệt
đọc/ghi sẽ cho một điều khiển hiệu quả hơn so với mô hình khóa cơ bản.
T1 T2
Hình 3.6. Đồ thị chờ đợi cho 2 giao dịch đã được đặt khóa đọc/ ghi
Đồ thị này không có chu trình, không có tình trạng khóa chết, không xảy ra tắc nghẽn,
trong đó T1 tiến triển bình thường, T2 thực hiện RLOCK B, chờ T1 thực hiện UNLOCK A, sau
đó cả hai giao dịch tiến triển cho đến khi kết thúc. Lịch biểu thực hiện các giao dịch là khả tuần
tự.
Một cách tiếp cận khác cho việc điều khiển tương tranh là đặt cho các giao dịch các ‘nhãn
thời gian’ (thời dấu: Time-Stamps). Tùy theo thời dấu của các giao dịch mà hệ thống cho phép
giao dịch đó được thực hiện thao tác truy xuất dữ liệu trên A hay hủy bỏ giao dịch đó.
Cũng như với mô hình điều khiển bằng đặt khóa, ta cũng có hai mô hình điều khiển bằng
thời dấu: mô hình thời dấu cơ bản và mô hình thời dấu phân biệt đọc/ ghi.
Có hai mô hình điều khiển tương tranh bằng thời dấu, tùy thuộc loại thời dấu của mục dữ
liệu là thời dấu cơ bản hay thời dấu có phân biệt đọc/ ghi.
Hình 3.7. Lịch biểu của 2 giao dịch trong mô hình thời dấu cơ bản
Trong thí dụ trên, T2 bị hủy vì có thời dấu nhỏ hơn thời dấu mục dữ liệu A, T2 có thể được
khởi động lại với thời dấu mới lớn hơn 160, tức là chuyển lịch biểu không tuần tự ban đầu thành
lịch biểu tuần tự: T1 thực hiện xong thì đến lượt T2.
Như vậy, với mô hình thời dấu cơ bản, thì việc điều khiển tương tranh chỉ cho phép các
giao dịch thực hiện theo một lịch biểu tuần tự. Mô hình điều thời dấu có phân biệt đọc/ ghi dưới
đây sẽ cho một điều khiển “mịn” hơn và hiệu quả hơn.
Hình 3.8. Lịch biểu của 2 giao dịch trong mô hình thời dấu đọc/ ghi
Trong thí dụ này, không giao dịch nào bị hủy bỏ, như vậy điều khiển tương tranh bằng thời
dấu có phân biệt đọc ghi là hiệu quả hơn mô hình thời dấu cơ bản.
Thí dụ 3.9. Xét các giao dịch trong lịch biểu dưới đây. Giao dịch T1 có thời dấu 200, T2 có
thời dấu 150, T3 có thời dấu 175 thực hiện truy xuất các mục dữ liệu A, B và C có các thời dấu
ban đầu RT = WR = 0
Các giao dịch T1 T2 T3 A B C
Thời dấu ban đầu t1 = 200 t2 = 150 t3 = 175 RT = WT = 0 RT = WT = 0 RT = WT = 0
Bước (1) READ B RT = 200
(2) READ A RT = 150
(3) READ C RT = 175
(4) WRITE B WT = 200
(5) WRITE A WT = 200
(6) WRITE C T2 không
được ghi C
(7) WRITE A TR < t3 < TW
Hình 3.9. Lịch biểu của 3 giao dịch trong mô hình thời dấu đọc/ ghi
Một giao dịch phân tán (toàn cục) được thực hiện bằng tập hợp các giao dịch con (các giao
dịch thành phần, giao dịch cục bộ) trên các trạm.
Mục đích của hợp thức hóa là đảm bảo tính nguyên tố của các giao dịch toàn cục: giao dịch
hoặc được thực hiện ở mức toàn cục (khi tất cả các giao dịch cục bộ cùng được hợp thức), có
nghĩa là tích hợp thực sự các cập nhật của nó vào CSDL, hoặc giao dịch bị huỷ bỏ (khi có một
trong các giao dịch cục bộ chưa được hợp thức hóa).
Một cách tiếp cận trực tiếp và ngây thơ để hợp thức một giao dịch phân tán, là xem các
giao dịch con thành phần như một giao dịch cục bộ trên các trạm và có thể được hợp thức hóa
độc lập với các giao dịch cục bộ khác. Tuy nhiên theo cách này một số giao dịch cục bộ có thể
có thể được hợp thức hóa trong khi những giao dịch khác lại bị hủy bỏ. Như vậy, cách tiếp cận
này vi phạm điều kiện cơ bản là tính nguyên tố của các giao dịch phân tán, do không có sự đồng
bộ giữa các giao dịch cục bộ tham gia vào giao dịch toàn cục.
Người ta đưa ra một giải pháp là sử dụng một giao thức hợp thức hóa hai giai đoạn hay
giao thức hợp thức hóa hai pha, được thực hiện bởi các trạm tham gia vào giao dịch toàn cục
dưới sự điều khiển của một trạm được phân công làm trạm điều phối.
Giao thức hợp thức hóa hai gia đoạn (hay hợp thức hóa hai pha: two-phases commit
protocol) gồm hai giai đoạn sau:
- Pha 1. Giai đoạn chuẩn bị: trạm điều phối yêu cầu mỗi trạm tham gia chuẩn bị cho sự hợp
thức hóa, và phản hồi lại cho trạm điều phối, khi đã chuẩn bị xong.
- Pha 2. Giai đoạn hợp thức: Trạm điều phối sẽ ra lệnh cho tất cả các trạm tham gia hợp
thức hoá các cập nhật vào CSDL, nếu như tất cả các trạm đã hoàn thành pha 1 hoặc huỷ bỏ tất cả
các giao dịch con sau một thời gian trễ, mà có trạm chưa phản hồi.
Mỗi trạm tham gia sẽ thực hiện một giao dịch con và cập nhật CSDL cục bộ khi được
trạm điều phối ra lệnh (ở pha 2). Trạm điều phối có thể là một trong những trạm tham gia, và
như vậy nó đóng cả hai vai trò.
Mô tả quá trình hợp thức hóa hai giai đoạn
Trong khi thực hiện giao thức, các trạng thái khác nhau của trạm điều phối và trạm tham
gia sẽ được ghi vào nhật ký để khi có sự cố, thủ tục phục hồi có thể tiếp tục các pha cần thiết của
giao thức.
- Quá trình thực hiện pha 1: Đầu tiên, trạm điều phối khởi phát giai đoạn “chuẩn bị” bằng
việc gửi thông báo “Chuẩn bị” cho các trạm tham gia. Nhận được thông báo này, mỗi trạm tham
Hình 2.10. Pha 1 của giao thức hợp thức hóa 2 pha
- Quá trình thực hiện pha 2: Sau một khoảng thời gian quy định, nếu trạm điều phối nhận
được thông báo sẵn sàng từ tất cả các trạm tham gia, nó sẽ ra thông báo quyết định “Hợp thức
hóa” cho tất cả các trạm. Trường hợp trái lại khi có ít nhất một trạm gửi thông báo không sẵn
sàng, hoặc quá thời hạn quy định (time-out) mà không gửi thông báo, thì trạm điều phối sẽ ra
quyết định toàn cục tới tất cả các trạm “Hủy bỏ” (hợp thức hóa). Nhận được quyết định toàn cục,
các trạm tham gia sẽ đồng loạt hợp thức hóa hay hủy bỏ hợp thức hóa, và thông báo cho trạm
điều phối là đã kết thúc công việc.
Sơ đồ hợp thức hoá 2 pha:
Hình 2.11. Pha 2 của giao thức hợp thức hóa 2 pha
Với quá trình hợp thức hóa hai giai đoạn như trên, mỗi giao dịch (tổng thể) sẽ được hoàn
thành và thực sự cập nhật vào CSDL chỉ khi tất cả các giao dịch con (giao dịch bộ phận) trên các
trạm được thực hiện (hợp thức hóa). Trái lại, dù chỉ một giao dịch con không đảm bảo hợp thức
hóa thì toàn bộ giao dịch tổng thể sẽ bị hủy bỏ và chưa có thay đổi gì trong CSDL.
Giao thức hợp thức hoá 2 pha sẽ đảm bảo tất cả các trạm tham gia sẽ hợp thức hoá hoặc
huỷ bỏ tất cả các giao dịch bộ phận. Vì vậy nó đảm bảo tính nguyên tố của các giao dịch toàn
cục. Quyết định toàn cục là hợp thức hoá giao dịch T hoặc huỷ bỏ thì do trạm điều phối đưa ra
sau giai đoạn 1. Như vậy, giao thức hợp thức hóa hai pha sẽ đảm bảo tính nguyên tố của các giao
dịch phân tán.
Ta sẽ trình bày một số tình huống có thể xảy ra trong quá trình hợp thức hóa của một hệ
thống phân tán gồm 1 trạm điều phối, 2 trạm tham gia S1, S2.
Kịch bản 1: Giao dịch bình thường hợp thức hóa được.
Hình 3.12. Hợp thức hóa bình thường Hình 3.13. Giao dịch bị hủy bỏ
Trong kịch bản này, tại thời điểm giao dịch, trạm điều phối và các trạm tham gia đều hoạt
động bình thường, trao đổi thông tin giữa các trạm thực hiện tốt nên không có trục trặc gì xảy ra
trong quá trình giao dịch vì vậy giao dịch được hợp thức hóa nhanh chóng, CSDL cập nhật các
dữ liệu đã thay đổi bởi tất cả các trạm. Các thủ tục hợp thức hóa theo hai giai đoạn được thể hiện
trong hình 3.12.
Kịch bản 2: Hỏng hóc tại trạm tham gia S2 trước khi sẵn sàng, sau thời gian trễ không có
phản hổi, trạm điều phối ra lệnh ‘Hủy bỏ’ huỷ giao dịch (Hình 3.13).
Kịch bản 3: Hỏng hóc của S2 sau khi đã thông báo “sẵn sàng” và sau đó khôi phục được.
Hợp thức hoá được sau khi S2 hoạt động (Hình 3.14).
Hình 3.14. Hỏng hóc được khôi phục, hợp thức hóa được thực hiện
Hình 3.15. Hỏng hóc tại trạm điều phối được khôi phục, hợp thức hóa được thực hiện
Kết luận: Giao thức hợp thức hoá 2 pha sẽ đảm bảo tính nguyên tố của giao dịch toàn cục
chống lại một số kiểu hỏng hóc, trừ hỏng hóc do “thảm họa”. Đây là một mô hình hợp thức đơn
giản nhất. Với những hệ thống phức tạp và yêu cầu có độ an toàn cao thì ta có giao thức hợp thức
hoá 3 pha [5].
a. Tính kết nối 3 quan hệ trên theo trình tự: (r1 r2) r3
b. Tính kết nối 3 quan hệ trên theo trình tự: (r1 r3) r2.
c. Trình tự kết nối nào tốt hơn, tại sao?
6. Cho 2 quan hệ r và s như các bảng dưới đây. Tính kết nối 2 quan hệ bằng phương pháp kết nối
trực tiếp và áp dụng chiến lược nửa kết nối. So sánh chi phí của 2 phương pháp:
r A B E s B C D E
1 4 1 5 6 7 1
2 5 2 4 7 7 1
3 6 3 5 8 9 2
4 7 4 4 9 9 2
5 8 5
7. Trình bày khái niệm về giao dịch, giao dịch phân tán, tính nguyên tố của giao dịch phân tán.
8. Thế nào là mục dữ liệu. Trình bày các khái niệm về một lịch biểu tuần tự, khả tuần tự và bất khả
tuần tự?
9. Trình bày quy tắc điều khiển tương tranh bằng việc đặt khoá (locking): mô hình khóa cơ bản và mô
hình phân biệt khoá đọc, khoá ghi. Thế nào là tình trạng khoá chết (dead lock) đối với một tập các
giao dịch phân tán, cách khắc phục?
a. Hãy xác định thời dấu mà mục dữ liệu A được gán sau mỗi bước (ghi vào cột cuối cùng, sau mỗi
bước).
b. Giả sử giá trị ban đầu của A = 5, sau bước (6) giá trị của A bằng bao nhiêu?.
c. Trong các giao dịch trên, có giao dịch nào bị hủy bỏ không?, tại sao?
d. Viết 1 lịch biểu tuần tự cho các giao dịch, tính giá trị lưu trữ trong các mục dữ liệu khi kết thúc
lịch biểu tuần tự. Lịch biểu đã cho ban đầu có phải lịch biểu khả tuần tự không?
12. Cũng hỏi như bài tập 6, với giả thiết thời dấu ban đầu của giao dịch T1 là 180, còn thời dấu của T2 là
160.
13. Có ba giao dịch T1, T2, T3 truy xuất các mục dữ liệu A, B và C theo lịch biểu dưới đây. Các thời dấu
của các giao dịch và thời dấu đọc/ghi ban đầu của các mục dữ liệu cho trong bảng. Giả sử các mục dữ
liệu có giá trị ban đầu bằng 5, các giao dịch đều cộng thêm 5 vào mục dữ liệu khi thực hiện được thao
tác WRITE.
T1 T2 T3 A=5 B=5 C=5
Thời dấu 40 30 50 RT = WT = 0 RT = WT = 0 RT = WT = 0
Thứ tự: (1) READ A
(2) WRITE A
(3) READ C
(4) WRITE C
(5) WRITE A
(6) READ B
(7) WRITEB
a. Trong lịch biểu trên, thao tác nào không thực hiện được và giao dịch nào bị huỷ bỏ?
Tại sao?
b. Viết 1 lịch biểu tuần tự cho các giao dịch, tính giá trị lưu trữ trong các mục dữ liệu khi kết thúc
lịch biểu.
c. Viết 1 lịch biểu khả tuần tự cho các giao dịch, tính giá trị lưu trữ trong các mục dữ liệu khi kết
thúc lịch biểu.
14. Cũng hỏi như bài tập 8, với giả thiết ba giao dịch T1, T2 và T3 được gán các thời dấu lần lượt là 200,
250 và 300.
15. Có ba giao dịch T1, T2, T3 truy xuất các mục dữ liệu A, B và C theo lịch biểu dưới đây. Các thời dấu
của các giao dịch và thời dấu đọc/ghi ban đầu của các mục dữ liệu cho trong bảng. Giả sử các mục dữ
a. Trong lịch biểu trên, thao tác nào không thực hiện được và giao dịch nào bị huỷ bỏ?
Tại sao?
b. Viết 1 lịch biểu tuần tự cho các giao dịch, tính giá trị lưu trữ trong các mục dữ liệu khi kết thúc
lịch biểu.
c. Viết 1 lịch biểu khả tuần tự cho các giao dịch, tính giá trị lưu trữ trong các mục dữ liệu khi kết
thúc lịch biểu.
16. Trình bày giao thức hợp thức hoá 2 pha cho một giao dịch phân tán. Giao thức hợp thức hóa
2 pha cho một giao dịch phân tán nhằm mục đích gì?.
Các hệ quản trị CSDL đã bắt đầu xuất hiện từ những năm 1960 và đặc biệt là từ khi mô
hình CSDL quan hệ do Codd.E.F. đề xuất vào đầu những năm 1970, thì công nghệ CSDL đã
phát triển rất nhanh và thu được rất nhiều thành tựu trong nhiều ứng dụng khác nhau của CNTT.
Đặc điểm chung của các hệ thống CSDL truyền thống là có khả năng lưu trữ khối lượng dữ liệu
rất lớn, có khả năng lưu trữ và xử lý phân tán… Tuy nhiên chức năng chủ yếu vẫn là lưu trữ và
xử lý dữ liệu, hầu như không có khả năng suy luận. Bên cạnh đó, song song với sự phát triển của
các hệ QTCSDL thì các hệ chuyên gia cũng được phát triển. Đặc điểm của các hệ chuyên gia là
có thể cung cấp các khả năng suy luận nhằm hỗ trợ việc ra quyết định tuy nhiên lại không có khả
năng lưu trữ và xử lý khối lượng dữ liệu lớn.
Một hệ thống mới được đề xuất dựa trên sự kết hợp của hai hệ thống trên, nhằm phát huy
những ưu điểm nổi trội của mỗi hệ thống, với mong muốn hệ thống mới vừa có khả năng lưu trữ,
xử lý khối lượng dữ liệu lớn, vừa có khả năng tư duy, suy luận với những thông tin đã được lưu
trữ. Như vậy, các hệ CSDL suy diễn (Deductive Database) được xem như sự tích hợp của dữ liệu
(như trong một hệ CSDL) và tri thức (như trong một hệ chuyên gia). Sơ đồ dưới đây mô tả sự kết
hợp của các hệ CSDL và các hệ chuyên gia:
Để thực hiện được các chức năng của một hệ CSDL và một hệ chuyên gia như đã mô tả
trên đây, một hệ CSDL suy diễn cần có các thành phần sau:
Datalog (logic dữ liệu) là ngôn ngữ được dùng để biểu diễn, xử lý dữ liệu trong một CSDL
suy diễn, cũng giống như SQL được sử dụng trong hầu hết các CSDL quan hệ. Cơ sở của ngôn
Cú pháp của Datalog dựa trên cú pháp của Logic tân từ cấp một, (còn gọi là các phép tính
tân từ), đó là một ngôn ngữ hình thức được dùng để biểu diễn mối quan hệ giữa các đối tượng và
suy ra các mối quan hệ mới từ các mối quan hệ được biết là đúng. Logic tân từ cấp một được xây
dựng dựa trên tập ký hiệu và các quy ước về ký pháp như sau:
- Các phép toán logic: (hội), (tuyển), (phủ định), (kéo theo), ở đây thứ tự ưu tiên
các phép toán là: , , và cuối cùng là phép .
- Các hàm: thường được ký hiệu là f, g, h,...
- Các lượng từ phổ dụng: với mọi () và tồn tại ()
* Công thức (formula): (còn gọi là công thức được thiết lập đúng đắn), là một mệnh đề được xây
dựng đúng và được định nghĩa đệ quy như sau:
- Nếu P là một tân từ n đối và t1, t2,.., tn là các hạng thức thì P(t1, t2,.., tn) là một công thức
nguyên tố. Các công thức nguyên tố còn gọi là các literal.
- Nếu F1 và F2 là các công thức thì F1 F2, F1 F2, F1 F2, F1 là các công thức.
- Nếu F là một công thức và x là biến không được lượng từ hóa (còn gọi là biến tự do)
trong F thì x(F) và x(F) là các công thức.
Thí dụ 4.2. Giả sử P, Q là các tân từ 2 đối, f là hàm 1 biến, x, y là các biến, a, b là các hằng,
khi đó ta có các công thức sau:
- P(b, x) Q(a, b)
Với x là hàm “phần nguyên của x”: với mọi số thực x thì x là số nguyên lớn nhất không
vượt quá x. Chẳng hạn 3.14 = 3 ; 3 = 3 ; -3.14 = - 4. Ký hiệu x cũng được gọi là số nguyên
sàn của số thực x.
Công thức (2) có thể được lý giải trên tập các số thực R, tức là tập số thực R được xem là
một miền thể hiện của công thức (2), tuy nhiên công thức này sẽ không đúng trên miền thể hiện
R. Nếu chọn D là miền các số thực không phải là số nguyên, tức là D = R \ Z, thì công thức (2)
sẽ đúng trên D.
- Các công thức đóng:
Qua thí dụ trên ta thấy: với 1 miền thể hiện cho trước, mỗi công thức sẽ có 1 giá trị chân lý
cho trước. Để tránh trường hợp mỗi công thức có thể có nhiều giá trị chân lý, ta chỉ xét các công
thức trong đó tất cả các biến đều được lượng từ hóa, gọi là các công thức đóng. Chẳng hạn, nếu
trong công thức (2), ta bỏ lượng từ x ở đầu công thức thì công thức còn lại không thể xác định
được giá trị chân lý duy nhất.
V(x F) = V(Fx = a) V(Fx = b) … trong đó a, b,… là các hằng của miền thể hiện D.
V(x F) = V(Fx = a) V(Fx = b) … trong đó a, b,… là các hằng của miền thể hiện D.
V[P(a1, a2,…, an)] có giá trị đúng (True) nếu tân từ P(a1, a2, …, an) là đúng, và ngược lại.
- Mô hình của một tập công thức đóng: là một miền thể hiện làm cho mọi công thức của
tập này đều đúng.
Chẳng hạn, mô hình của tập gồm một công thức (2) là tập tất cả các số thực không phải là
số nguyên (miền D trong thí dụ 4).
Với mọi công thức đóng F, ta có thể biến đổi để đưa nó về dạng chính tắc không chứa các
lượng từ, được gọi là dạng câu (clause).
- Dạng câu của công thức đóng: là một công thức thức đóng có dạng:
P1 P2 … Pn Q1 Q2 … Qm (3)
Trong đó các Pi, Qj là các công thức nguyên tố không có dấu phủ định (còn gọi là các
literal dương, nếu trước các công thức nguyên tố có dấu phủ định thì gọi là các literal âm). Trong
câu (3), phần vế trái (trước dấu ) gọi là phần điều kiện, còn phần vế phải là phần kết luận.
Khi m =1, câu (3) được gọi là câu Horn và có dạng:
P1 P2 … Pn Q (4)
Khi cần nhấn mạnh tới phần kết luận, ta thường viết các câu (3) dưới dạng:
Q1 Q2 … Qm P1 P2 … Pn (5)
Dấu mũi tên được đọc là “nếu”
Với câu Horn (4) thường viết là:
Q P1 P2 … Pn,
và được đọc là “Q nếu P1, P2,.., Pn”. Q được gọi là đầu luật, còn P1 P2 … Pn gọi là thân luật.
Áp dụng một số công thức biến đổi logic, công thức (3) tương đương với công thức:
(E) ≡ E
(x(F)) ≡ x(F)
(x(F)) ≡ x(F)
Thí dụ 4.5. Hãy chuyển các công thức đóng dưới đây thành công thức dạng câu:
(a) xyz (P(x, y) P(y, z) P(x, z))
Giải: Tất cả các biến đã được lượng từ hóa phổ dụng, ta chỉ cần loại bỏ tất cả các lượng từ
phổ dụng để nhận được công thức ở dạng câu (3):
P(x, y) P(y , z) P(x, z)
Có thể đưa về dạng tuyển của các literal như dạng câu (6) nhờ áp dụng các luật tương
đương:
P(x, y) P(y, z) P(x, z))
(b) xy(P(x, y) zQ(x, z)), với z1, z2,.., zn là giá trị của biến z trong miền thể hiện D.
Giải: Trước hết loại bỏ các lượng từ phổ dụng với các biến x và y, ta nhận được công thức:
P(x, y) zQ(x, z)
Áp dụng công thức loại lượng từ tồn tại, ta nhận được công thức dạng câu (3):
P(x, y) (Q(x, z1) Q(x, z2) … Q(x, zn)) (câu dạng (6))
Thuật toán suy diễn là một thủ tục để chứng minh một công thức T từ tập các công thức
{A1, A2, ..., An} đã được biết là đúng. T còn được gọi là định lý cần chứng minh, còn A1, A2, ...,
An gọi là các tiên đề. Nếu tồn tại một chứng minh của T từ {A1, A2, ..., An}thì ta ký hiệu:
{A1, A2,...,An}├ T.
Để chứng minh một định lý, thuật toán suy diễn sẽ dùng các quy tắc suy diễn để từ các tiên
đề suy dẫn ra một dãy các công thức, mà định lý cần chứng minh là công thức cuối cùng được
suy dẫn ra.
Một quy tắc suy diễn là một quy tắc cho phép sinh ra một công thức từ hai hoặc nhiều công
thức. Có hai quy tắc suy diễn quen biết trong logic tân từ cấp một:
Có thể hiểu quy tắc khẳng định này như sau: Cho một luật ‘P Q’ (được thừa nhận là
đúng), nếu quan sát được sự kiện ‘P’ (là đúng) thì suy diễn ra sự kiện ‘Q’
(là đúng).
P Q, P
- Ký hiệu quy tắc Modus ponens: (7)
Q
Quy tắc “đảo” của Modus ponens là quy tắc Modus tollens, còn gọi là “phương pháp phủ định”
P Q, Q
- Ký hiệu quy tắc Modus tollens: (8)
P
Thí dụ 4.6.
(a) Suy diễn theo quy tắc Modus ponens:
Luật: Nếu hôm nay là thứ bẩy thì tôi sẽ đến thư viện (P Q).
Quan sát: Hôm nay là thứ bẩy (P).
Suy diễn: Vậy tôi sẽ đến thư viện (Q).
(b) Suy diễn theo quy tắc Modus tollens:
Luật: Nếu hôm nay là thứ bẩy thì tôi sẽ đến thư viện (P Q).
Quan sát: Hôm nay tôi không đến thư viện (Q).
Suy diễn: Vậy hôm nay không phải là thứ bẩy (P).
Quy tắc riêng biệt hóa cho phép suy ra F(a) từ công thức: x F(x).
Một cách trực quan, có nghĩa là nếu F(x) đã được chứng minh (là đúng) với mọi giá trị của
x, thì F(a) cũng được chứng minh là đúng..
xF( x )
Ký hiệu quy tắc riêng biệt hóa: (9)
F(a )
F1 L1 , F2 L 2 , L1[S] L 2 [S]
- Ký hiệu quy tắc suy diễn Robinson: (10)
F1[S] F2 [S]
- Công thức F1[S] F2[S] ở mẫu số được gọi là giải thức của C1 và C2, đó là kết quả suy
diễn ra từ hai công thức dạng câu C1 và C2.
Bước1. Biểu diễn các tiên đề và phủ định của định lý (T) dưới dạng tập các câu C
Bước 2. Áp dụng quy tắc Robinson cho mỗi cặp công thức có thể hợp nhất được trong tập
câu C, để nhận được một công thức mới là một giải thức, như vậy số câu trong C sẽ giảm dần cho
tới khi thu được tập câu nhỏ nhất, không thể hợp giải được nữa, tập câu cuối cùng này có thể là
tập câu rỗng (tập C = ).
Khi kết quả là câu rỗng (tất cả các câu trong C đều bị triệt tiêu), khi đó miền thể hiện của tập
câu là rỗng, tức là nó không thể được thỏa mãn. Nhưng tập các tiên đề được giả thiết là đúng,
vậy phủ định của định lý bị bác bỏ, do đó định lý T được chứng minh.
Trường hợp ngược lại, không thể thu được kết quả là câu rỗng, thì không thể chứng minh
được định lý T từ tập tiên đề đã cho.
Chú ý: Trong quy tắc Robinson thì F1, F2 có thể là các công thức rỗng, khi đó ta có các
trường hợp riêng của quy tắc Robinson:
L1 , F2 L 2 , L1[S] L 2 [S]
(1) , (khi F1 = ) (11)
F2 [S]
F1 L1 , L 2 , L1[S] L 2 [S]
(2) , (khi F2 = ) (12)
F1[S]
L1 , L 2 , L1[S] L 2 [S]
(3) , (khi cả F1 = , F2 = ) (13)
Trong đó trường hợp 3 được áp dụng khá phổ biến: nếu trong tập câu C, có cặp công thức
là các tân từ cùng tên, là phủ định của nhau và hợp nhất được thì loại bỏ cặp công thức đó.
Thí dụ 4.8. Áp dụng phương pháp hợp giải, chứng minh định lý T: P(a, c) từ tập các tiên đề
sau:
(1) Biểu diễn các tiên đề và phủ định của định lý (T) dưới dạng tập các câu:
(2) Áp dụng quy tắc Robinson nhiều lần theo hình 4.2.
Cơ sở dữ liệu suy diễn có thể được biểu diễn như một chương trình Datalog, gồm các
thành phần chính sau đây:
- Một tập các sự kiện (facts)
- Một tập các luật suy diễn (deductive rules)
- Một tập các ràng buộc toàn vẹn (integrity constraints)
Các thành phần trên đều có thể được biểu diễn bởi các câu Horn cơ bản có dạng:
3.3.1.2. Biểu diễn tập các luật suy diễn (deductive rules)
Các luật suy diễn xác định các tân từ dẫn xuất, đó là các thông tin nội hàm. Các tân từ dẫn
xuất sẽ xác định các sự kiện được dẫn xuất từ luật và các sự kiện cơ sở được lưu trữ trong EDB.
Các sự kiện dẫn xuất không được lưu trữ trong CSDL suy diễn.
Tân từ dẫn xuất P là tập tất cả các luật suy diễn có cùng đầu luật là P.
Chẳng hạn, hai luật:
- “nếu x là Bố của y thì x là Cha_mẹ của y”
- “nếu x là Mẹ của y thì x là Cha_mẹ của y”,
3.3.1.3. Biểu diễn tập các ràng buộc toàn vẹn (integrity constraints)
Các ràng buộc toàn vẹn thường được biểu diễn bằng các luật (câu) có đầu luật rỗng, còn
gọi là một phủ định hay một phản bác, có dạng:
Ràng buộc toàn vẹn (16) khẳng định rằng L1 L2 … Ln không bao giờ đúng trong
CSDL chứa ràng buộc toàn vẹn này.
Để cho thống nhất với cách viết các luật, đầu mỗi ràng buộc toàn vẹn (IC) cho phép viết
một tân từ không nhất quán IC1, IC2, ... nhằm đặt tên cho ràng buộc đó.
Chẳng hạn, một ràng buộc toàn vẹn khẳng định rằng không ai có thể vừa là Bố, vừa là Mẹ,
có thể được biểu diễn là:
Khái niệm khung nhìn (view) được dùng trong CSDL để phân ranh giới nội dung CSDL
với một nhóm người dùng. Khung nhìn là một cấu trúc dữ liệu ảo, được dẫn xuất từ các sự kiện
cơ sở hay các khung nhìn khác nhờ một hàm định nghĩa.
Trong CSDL suy diễn, các khung nhìn tương ứng với các tân từ dẫn xuất, và được định
nghĩa nhờ vào các luật suy diễn. Chẳng hạn ta có khung nhìn “Bà” được định nghĩa bởi một luật
suy diễn có đầu luật là tân từ Bà (x, y):
Các hệ QTCSDL suy diễn phải cung cấp một cơ chế xử lý câu hỏi, có khả năng trả lời các
câu hỏi được phát biểu theo các khung nhìn cũng như theo các tân từ cơ sở của một CSDL suy
diễn. Một thủ tục định giá câu hỏi sẽ tìm câu trả lời phù hợp với ngữ nghĩa của CSDL.
Theo cú pháp của Datalog, một câu hỏi Q trên CSDL suy diễn có dạng:
Q: ? W(x),
trong đó: x là một vector biến và / hoặc các hằng; W(x) là một hội của các literal.
Câu trả lời cho câu hỏi là một tập các giá trị của x sao cho W(x) là đúng và phù hợp với
EBD và IDB trong CSDL.
Thí dụ 4.10. Cho một CSDL suy diễn trong Datalog:
CSDL ‘Gia tộc’
EDB: Các sự kiện cơ sở
- Bố (An, Dương)
- Bố (An, Mai)
- Bố (Giáp, An)
- Bố (Giáp, Hồng)
- Mẹ (Xuân, An)
- Mẹ (Xuân, Hồng)
- Mẹ (Hồng, Giang)
- Mẹ (Giang, Minh)
IDB: Các luật suy diễn
- Cha_mẹ (x, y) Bố (x, y) (Luật R1)
- Cha_mẹ (x, y) Mẹ (x, y) (Luật R2)
- Bà (x, y) Mẹ (x, z) Cha_mẹ (z, y) (Luật R3)
- Tổ_tiên (x, y) Cha_mẹ (x, y) (Luật R4)
- Tổ_tiên (x, y) Cha_mẹ (x, z) Tổ_tiên (z, y) (Luật R5)
3.4.2. Các phương pháp định giá câu trong CSDL suy diễn
Có ba cách tiếp cận cơ bản để tìm câu trả lời cho một câu hỏi Q trong CSDL
suy diễn:
Theo cách tiếp cận này, thủ tục định giá câu hỏi bắt đầu từ những sự kiện cơ sở và áp dụng
tất cả các luật suy diễn để tìm các sự kiện mới (các sự kiện dẫn xuất), cho đến khi không thể suy
ra thêm sự kiện mới nào. Sau đó câu hỏi sẽ được định giá bằng cách so khớp với toàn bộ tập sự
kiện cơ sở và sự kiện dẫn xuất. Cách tiếp cận này còn được gọi tiếp cận dưới-lên.
b.Tiếp cận theo chuỗi lùi (backward chaining):
Theo cách tiếp cận này, thủ tục định giá câu hỏi bắt đầu từ câu hỏi Q, và áp dụng các luật
để tìm những câu hỏi con tương đương với Q gần với các sự kiện cơ sở hơn, cho đến khi tìm
được những câu hỏi con có thể so khớp được với các sự kiện trong EDB, từ đó có câu trả lời cho
câu hỏi Q. Cách tiếp cận này còn gọi tiếp cận trên-xuống.
c.Tiếp cận bằng ma tập (magic sets):
Đây là cách tiếp cận tổ hợp cả hai cách tiếp cận trên, nhằm đạt được các ưu điểm của mỗi
cách tiếp cận.
Chúng ta sẽ trình bày chi tiết các phương pháp định giá câu hỏi trong CSDL suy diễn, dựa
trên các cách tiếp cận trên đây. Các phương pháp này sẽ được minh họa trên CSDL ‘Gia tộc’.
3.4.2.1. Định giá câu hỏi theo tiếp cận chuỗi tiến (forward chaining)
Đây là một thủ tục ngây thơ (the nive procedure) cho việc định giá câu hỏi. Theo cách tiếp
cận này, thủ tục định giá câu hỏi bắt đầu từ những sự kiện cơ sở và áp dụng tất cả các luật suy
diễn để tìm các sự kiện mới cho đến khi không thể suy ra thêm sự kiện mới nào. Sau đó câu hỏi
sẽ được định giá bằng cách so khớp với toàn bộ tập sự kiện cơ sở và sự kiện dẫn xuất.
Thủ tục này gồm hai bước:
- Bước 1: Tính mọi sự kiện là hệ quả logic của các quy tắc suy diễn để mở rộng tập sự
kiện. Điều này được thực hiện nhờ việc áp dụng các luật suy diễn trên tập EDB cho đến khi
không còn sự kiện mới nào được sinh ra. Gọi tập sự kiện mở rộng là EDB’.
3.4.2.2. Định giá câu hỏi theo tiếp cận chuỗi lùi (backward chaining)
Thủ tục này được mô tả như sau:
Cho trước câu hỏi Q, hãy xác định tập câu hỏi con Qi sao cho câu trả lời cho Q chính là
hợp các câu trả lời cho mỗi câu hỏi con Qi. Để có được các câu hỏi con Qi, mỗi tân từ dẫn xuất P
trong Q phải được thay thế bởi thân các luật định nghĩa P. Theo cách đó, các câu hỏi con thu
được sẽ “đơn giản” hơn câu hỏi ban đầu vì chúng được định nghĩa bởi các tân từ “gần hơn” với
các tân từ cơ sở.
Việc thay các câu hỏi bằng các câu hỏi con được lặp lại nhiều lần, cho đến khi nhận được
các câu hỏi chỉ chứa các tân từ cơ sở, khi đó chúng được so khớp với EDB và dễ dàng tìm được
câu trả lời. Các hằng trong câu hỏi Q ban đầu được sử dụng trong quá trình tạo các câu hỏi con,
vì chúng sẽ trỏ tới các tân từ cơ sở có liên quan đến câu hỏi ban đầu.
Thí dụ 4.12. Định giá câu hỏi Q trên CSDL_Gia tộc theo cách tiếp cận chuỗi lùi:
Q: ? Bà (x, Mai)
Thủ tục định giá câu hỏi theo cách tiếp chuỗi lùi sẽ thực hiện như sau:
Bước 1: Dùng luật R3: Bà (x, y) Mẹ (x, z) Cha_mẹ (z, y), thay y = ‘Mai’, câu hỏi Q
được đưa về câu hỏi con:
Q1: ? Mẹ (x, z) Cha_mẹ (z, Mai)
Bước 2: Thay tân từ Cha_mẹ trong Q1 bởi các tân từ gần với các tân từ cơ sở hơn bằng
cách dùng các luật R1 và R2, ta được hai câu hỏi tương đương vói Q1:
Q2a: ? Mẹ (x, z) Bố (z, Mai)
Q2b: ? Mẹ (x, z) Mẹ (z, Mai)
Bước 3: Xét các câu hỏi Q2a và Q2b.
- Với câu hỏi Q2a, so khớp với EDB, ta có sự kiện Bố (An, Mai) là đúng, thay
z = ‘An’, câu hỏi này tương đương với câu hỏi:
Q3: ? Mẹ (x, An)
- Câu hỏi Q2b không có câu trả lời vì trong EDB không có sự kiện nào có thể so khớp
được với Mẹ (z, Mai).
Kết luận: Như vậy, câu hỏi Q ban đầu là tương đương với câu hỏi Q3. Câu hỏi này chỉ
chứa tân từ cơ sở Mẹ (x, y) nên có thể so khớp với các sự kiện trong EDB với y = An, do có một
sự kiện Mẹ (Xuân, An) nên cho câu trả lời là x = Xuân
3.4.2.3. Định giá câu hỏi theo tiếp cận Ma tập (Magic sets)
Tiếp cận ma tập là tổ hợp của hai cách tiếp cận trên, nhằm khai thác những ưu việt của mỗi
phương pháp.
Ý tưởng của phương pháp ma tập: cho một CSDL suy diễn D và câu hỏi Q trên một tân từ
dẫn xuất P, Ta sẽ viết lại các luật của D, trong đó các luật viết lại có tính đến thông tin trong câu
hỏi Q, ta nhận được CSDL tương đương D’, sau đó áp dụng cách tiếp cận dưới-lên trong CSDL
D’. Vì D’ chứa các luật viết lại, cho nên các sự kiện mới tính được chỉ liên quan đến câu hỏi Q.
Mục đích của sự viết lại các luật là đưa sự mô phỏng của tiếp cận trên-xuống vào các luật, làm
cho việc định giá câu hỏi theo phương pháp dưới-lên đỡ tốn công sức tính các sự kiện suy dẫn.
Như vậy, thủ tục định giá câu hỏi bằng ma tập sẽ gồm 2 bước:
Bước 1: Xây dụng CSDL D’ bằng cách viết lại các luật trong D, bằng cách đưa thông tin
của Q vào thân các luật viết lại. Thông tin trong câu hỏi Q được biểu thị bằng một tân từ “ma
ảo”, được coi như một tân từ ngoại diên và được gắn vào thân các luật viết lại.
Bước 2: Áp dụng thủ tục dưới-lên cho CSDL D’ để tìm câu trả lời. Chú ý rằng do CSDL
D’chứa các luật viết lại, cho nên chỉ suy ra các sự kiện liên quan đến câu hỏi Q. Do D là tương
đương D’, kết quả việc định giá câu hỏi Q trên D’ là tương đương với định giá Q trên CSDL ban
đầu.
Thí dụ 4.13. Hãy định giá câu hỏi Q trên CSDL_Gia tộc theo cách tiếp cận ma tập:
Q: ? Tổ_tiên (Hồng, x)
Bước 1: Với CSDL D (CSDL ‘Gia tộc’), xây dựng CSDL D’ bằng cách sửa các luật:
Thêm vào tân từ ma ảo: Magic_Toti (x) với sự kiện Magic_Toti (Hồng). Tân từ này có thể
hiểu đơn giản: x là dòng họ của Hồng, (đương nhiên Hồng là dòng họ
của Hồng!).
Các luật về “Tổ_tiên” R4 và R5 được viết lại như sau:
- Tổ_tiên (x, y) Magic_Toti (x) Cha_mẹ (x, y) (Luật R6)
- Magic_Toti (z) Magic_Toti (x) Cha_mẹ (x, z) (Luật R7)
- Tổ_tiên (x, y) Magic_Toti (x) Cha_mẹ (x, z) Tổ_tiên (z, y) (Luật R8)
Một CSDL suy diễn có thể được cập nhật thông qua một giao dịch tác động vào các sự
kiện cơ sở hoặc các sự kiện dẫn xuất thông qua các khung nhìn. Như vậy, việc cập nhật CSDL
suy diễn có thể thực hiện bằng hai cách:
- Cập nhật CSDL ngoại diên (EDB) thông qua các tân từ cơ sở, hoặc:
- Cập nhật trên các khung nhìn, thông qua tân từ dẫn xuất định nghĩa khung nhìn.
Do sự có mặt của các luật suy diễn cũng như các ràng buộc toàn vẹn nên việc cập nhật có
thể cảm sinh ra nhiều thay đổi trên các thông tin nội hàm, trên các khung nhìn và trên các ràng
buộc toàn vẹn. Chương này sẽ xem xét một số vấn đề quan trọng nhất liên quan đến cập nhật
CSDL suy diễn, bao gồm việc tính toán những thay đổi của các sự kiện dẫn xuất khi cập nhật các
sự kiện cơ sở (cập nhật EDB), những thay đổi của CSDL khi cập nhật khung nhìn và việc đảm
bảo các ràng buộc toàn vẹn khi thực hiện các phép cập nhật.
Tất cả các vấn đề trên được trình bày thông qua một CSDL suy diễn dưới đây:
CSDL_WORKS
EDB: Các sự kiện cơ cở
- Nhan_vien (Duong, Ban_hang)
- Nhan_vien (Anh, Tiep_thi)
- Nhan_vien (Phat, Tiep_thi)
- Truong_phong (Ban_hang, Mai)
- Truong_phong (Tiep_thi, An)
- Trong_do_tuoi (Duong)
- Trong_do_tuoi (Anh)
- Trong_do_tuoi (Phat)
- Trong_do_tuoi (Giap)
IDB: Các luật suy diễn
- Nhan_su (n, p, t) ← Nhan_vien (n, p) Truong_phong (p, t)
- Lam_viec (n)←Nhan_vien (n,p)
- That_nghiep (n)← Trong_do_tuoi (n) Lam_viec (n)
ICs: Các ràng buộc
- IC1 (p, t1, t2) ← Truong_phong (p, t1) Truong_phong (p, t2) (t1# t2)
- IC2 (n) ← Lamviec (n) Trong_do_tuoi (n)
Một CSDL suy diễn có thể được cập nhật thông qua việc áp dụng một tập các giao dịch,
tác động vào các sự kiện cơ sở, tức là CSDL suy diễn có thể được cập nhật bằng việc cập nhật
CSDL ngoại diện (EDB). Hệ quản trị CSDL suy diễn có chức năng quản lý dữ liệu như đối với
mọi CSDL thông thường, do đó sẽ cung cấp chức năng cập nhật này.
Tuy nhiên, do trong CSDL suy diễn có các luật suy diễn, cho nên những cập nhật trên EDB
sẽ cảm sinh nhiều thay đổi trên các thông tin nội hàm, vì vậy ta cần phải tính được những thay
đổi này khi có những cập nhật trên EDB (điều này khác với CSDL thông thường: cập nhật dữ
liệu gì thì chỉ có dữ liệu đó thay đổi).
4.1.1. Tính toán những thay đổi khi cập nhật CSDL ngoại diên
Khi cập nhật các sự kiện cơ sở trong CSDL ngoại diên (EDB), ta cần tính được những thay
đổi của tất cả các sự kiện dẫn xuất của các tân từ dẫn xuất.
Việc tính toán những thay đổi có thể thực hiện bằng cách: tính tất cả các sự kiện dẫn xuất
của các tân từ dẫn xuất trước và sau khi thực hiện phép cập nhật, so sánh các kết quả để tính
được các thay đổi do phép cập nhật.
Thí dụ 5.1. Xét CSDL_Works. Hãy tính toán những thay đổi do phép cập nhật T trên EDB:
T = {insert [Nhân_viên (Giáp, Bán_hàng)]}
Bước 1: Tính các sự kiện dẫn xuất của các tân từ dẫn xuất Nhan_su (n, p, t), Lam_viec (n),
That_nghiep (n), ta có các sự kiện dẫn xuất trước khi cập nhật là:
4.1.2. Các hiệu ứng khi cập nhật CSDL ngoại diên
Việc tính toán các thay đổi theo cách tính trên đây có ưu điểm: đơn giản, luôn tính đúng
những thay đổi do phép cập nhật. Tuy nhiên, nó cũng có nhược điểm là cách tính này kém hiệu
quả, mất nhiều công sức do phải tính cả những sự kiện không liên quan đến phép cập nhật.
Chúng ta có thể tính toán các thay đổi của phép cập nhật một cách hiệu quả hơn, bằng cách
xem xét các thay đổi từ chính phép cập nhật, nhờ áp dụng các luật suy diễn có thân luật chứa tân
từ cơ sở của sự kiện cập nhật. Điều này sẽ tránh phải tính tất cả những sự kiện dẫn xuất không
liên quan đến phép cập nhật. Theo cách này, phải lưu ý các hiệu ứng của việc cập nhật một sự
kiện cơ sở, đó là:
- Một giao dịch cập nhật có thể cảm sinh nhiều thay đổi (như thí dụ 5.1)
- Việc tính toán những thay đổi có thể không đơn điệu (tính đơn điệu: chỉ tăng hoặc chỉ
giảm theo các sự kiện cơ sở được chèn hoặc xóa)
+ Phép chèn một sự kiện cơ sở không chỉ làm tăng mà có thể làm giảm các sự kiện dẫn
xuất.
+ Phép xóa một sự kiện cơ sở không chỉ làm giảm mà có thể làm tăng các sự kiện dẫn xuất.
Nguyên nhân: khi các luật suy diễn có các literal âm (công thức nguyên tố ở dạng phủ
định) thì việc chèn thêm sự kiện cơ sở có thể cảm sinh việc xóa bỏ sự kiện dẫn xuất và ngược lại.
Tính không đơn điệu làm cho việc tính toán những thay đổi khi cập nhật EDB là khá khó
khăn.
- Hiệu ứng tổng hợp của nhiều phép cập nhật: Một giao dịch có thể chứa nhiều phép cập
nhật các sự kiện cơ sở, một cách tiếp cận khá “ngây thơ” là tính các thay đổi cảm sinh của các
cập nhật bằng cách tính toán các thay đổi cho mỗi cập nhật độc lập với nhau và xem kết quả là
hợp của các cập nhật đó. Tuy nhiên điều này chỉ có thể làm được khi không có các literal âm
trong các luật duy dẫn, trong trường hợp cơ bản, cần xem xét các thay đổi thật sự do hiệu ứng
tổng hợp của nhiều phép cập nhật.
Thí dụ 5.2: Với luật “That_nghiep (n) ← Trong_do_tuoi (n) Lam_viec (n)”, do luật
này chứa literal âm [ Lam_viec (n)], nên sẽ cảm sinh những thay đổi không đơn điệu:
- Khi chèn thêm sự kiện cơ sở [Nhân_viên (Giáp, Bán_hàng)] ở thí dụ 5.1, đã cảm sinh
việc xóa bỏ sự kiện dẫn xuất: [That_nghiep (Giap)].
- Khi thực hiện phép cập nhật T để xóa bỏ một sự kiện cơ sở:
T = {delete [Nhan_vien (Duong, Ban_hang)]},
sẽ cảm sinh các thay đổi:
4.1.3. Ứng dụng của việc tính toán những thay đổi
Việc tính toán những thay đổi có những ứng dụng chính sau đây:
Định nghĩa 5.1: Một khung nhìn được gọi là vật thể hóa nếu ngoại diên của nó (là các sự
kiện dẫn xuất xác định bởi tân từ định nghĩa khung nhìn) được lưu trữ vật lý trong CSDL.
Điều này sẽ rất có lợi cho việc xử lí câu hỏi vì có thể sử dụng khung nhìn như một tân từ
cơ sở thay vì phải tính ngoại diên của nó, khi đó việc định giá câu hỏi sẽ nhanh hơn, vì các sự
kiện suy dẫn của khung nhìn đã có sẵn trong CSDL.
Tuy nhiên, ngoại diên của một khung nhìn lại được xác định bởi luật suy diễn, do đó khi
EDB được cập nhật thì ngoại diên mới của khung nhìn vật thể hóa phải được tính lại. Để làm
điều này, thay vì phải áp dụng luật suy diễn cho mỗi khung nhìn vật thể hóa ta chỉ cần xác định
thay đổi đã được tính toán và cập nhật những thay đổi này cho các sự kiện suy dẫn của các
khung nhìn được vật thể hóa một cách thích hợp.
Các ràng buộc toàn vẹn kiểm tra các điều kiện mà mỗi trạng thái CSDL phải được thỏa
mãn. Do đó, khi tính toán các thay đổi do một giao dịch cảm sinh ra, nếu có một kết quả vi phạm
ràng buộc toàn vẹn thì giao dịch đó phải hủy bỏ.
Thí dụ 5.4. Trong CSDL_Works, ta có ràng buộc toàn vẹn IC2:
IC2 (n) ← Lam_viec (n) Trong_do_tuoi (n)
Tức là một người n không trong độ tuổi thì không thể thỏa Lam_viec (n).
Nếu ta chèn thêm sự kiện: insert [Nhan_vien (Nam, Ban_hang)], nhưng không chèn sự
kiện: [Trong_do_tuoi(Nam)]. Khi đó sự kiện dẫn xuất [Lam_viec (Nam)] sẽ được cảm sinh, dẫn
Định nghĩa 5.2: Một CSDL được gọi là tích cực nếu giao dịch có thể được thực hiện
không chỉ từ bên ngoài bởi một yêu cầu của người dùng mà còn được tự động thực hiện từ bên
trong khi một điều kiện nào đó của CSDL được thỏa mãn.
Hành vi tích cực được đặc tả nhờ vào các luật ‘điều kiện-hành động’ (Condition-Action
rule: CA rule), hoặc các luật ‘sự kiện-điều kiện-hành động’ (Event-Condition-Action rule: ECA
rule).
Thí dụ 5.5. CSDL_Works sẽ trở thành một CSDL tích cực nếu thêm vào một luật: ‘sự kiện
– điều kiện – hành động’ như sau:
Event: Insert (Nhan_vien (n, p))
Condiction: Nhan_vien (n, p) Truong_phong (p, Mai)
Action: “Thực hiện giao dịch T”
Giải thích: Khi nhân viên n được liên kết với phòng p thì giao dịch T nào đó (đã cài đặt
sẵn) phải được tự động thực hiện nếu phòng p có Mai là trưởng phòng, mà không cần có sự tác
động từ bên ngoài.
Trong thí dụ này, khi một sự kiện (event) được cập nhật, việc tính toán các thay đổi sẽ cho
phép giám sát các điều kiện (condiction) để quyết định một hoạt động (action) theo luật AC hay
EAC, mà không cần có tác động từ bên ngoài.
Một CSDL không có tính tích cực như trên gọi là CSDL thụ động.
Những ưu điểm của khung nhìn trong CSDL suy diễn chỉ có ý nghĩa thực sự nếu người
dùng không phải phân biệt khung nhìn với một tân từ cơ sở. Và như vậy hệ QTCSDL suy diễn
phải cho phép người dùng có thể cập nhật những sự kiện dẫn xuất của các khung nhìn như là với
các sự kiện cơ sở.
Bài toán cập nhật khung nhìn trên CSDL suy diễn đặt ra như sau:
Cho một CSDL suy diễn và một yêu cầu cập nhật U cho một khung nhìn V, hãy xác định
những thay đổi trên các sự kiện suy dẫn của khung nhìn và các thay đổi trên EDB của CSDL.
Quá trình cập nhật khung nhìn trong CSDL suy diễn có thể được mô tả hình thức như sau:
- Giả sử một khung nhìn được xác định bởi hàm khung nhìn V, với V được định nghĩa bởi
tập các luật suy diễn. Khi đó các sự kiện dẫn xuất trên khung nhìn là V(EDB), trong đó EDB là
CSDL ngoại diên (tập các sự kiện).
V T(U) V
EDB T[U(EDB)]
Trong sơ đồ trên:
- Hàng (1): Khung nhìn và các yêu cầu cập nhật trên khung nhìn;
- Hàng (2): CSDL ngoại diên EDB và các biến đổi trong EDB.
Thí dụ 5.5. Xét CSDL_WORKS và một yêu cầu cập nhật U trên khung nhìn:
[Lam_viec(n)]
U ={delete [Lam_viec (Phat)]};
Yêu cầu cập nhật này được thỏa mãn bởi phép dịch chuyển:
T = {delete [Nhan_vien (Phat, Tiep_thi)]}
Việc áp dụng một phép dịch chuyển có thể cảm sinh ra những cập nhật không mong muốn
lên khung nhìn đang cập nhật hoặc các khung nhìn khác. Tức là có thể xảy ra trường hợp:
U[V(EDB)] V[T(U(EDB))]
Các hiệu ứng phụ này thường người dùng không biết là đã xảy ra.
Thí dụ 5.7. Xét CSDL_Works.
Với yêu cầu cập nhật khung nhìn [Nhan_su (n, p, t)], trong thí dụ 5.6, với phép cập nhật U:
U = {delete[Nhan_su(Phat, Tiep_thi, An)]}
Phép cập nhật này có thể được thỏa bởi dịch chuyển: T1 = {delete[Nhan_vien
(Phat,Tiep_thi)]}, khi đó sẽ cảm sinh ra hiệu ứng phụ:
S1={delete[Lam_viec (Phat)] ; insert[That_nghiep (Phat)]}
Nếu thực hiện phép dịch chuyển: T2 = {delete[Truong_phong(Tiep_thi, An)]} sẽ cảm sinh
ra hiệu ứng phụ:
S2 = {delete[Nhan_su (Anh, Tiep_thi, An)], delete[Nhan_su(Phat,Tiep_thi, An)]}
c. Kết quả cập nhật khung nhìn có thể không đơn điệu
Với sự có mặt của các liberal âm thì kết quả quá trình cập nhật khung nhìn là không đơn
điệu, tức là việc chèn thêm sự kiện dẫn xuất có thể dẫn tới xỏa bỏ một số sự kiện cơ sở và ngược
lại, việc xóa bỏ sự kiện dẫn xuất có thể được thỏa bằng việc chèn thêm sự kiện cơ sở.
Thí dụ 5.8. Xét CSDL_Works. Yêu cầu cập nhật khung nhìn [That_nghiep(n)]:
U = {insert [That_nghiep (Duong)]}
Yêu cầu này có thể được thỏa bằng dịch chuyển:
T = {delete[Nhan_vien (Duong, Ban_hang)]}
Mô hình hướng đối tượng được sử dụng để phát triển phần mềm dựa trên mô hình dữ liệu
trừu tượng và khái niệm lớp để chỉ ra những đặc tính chung các cấu trúc dữ liệu được sử dụng để
mô hình hoá hệ thống. Hệ thống các khái niệm cơ bản của phương pháp hướng đối tượng được
mô tả như trong hình 6.1
Kế thừa
Lớp
Đối tượng
Thông điệp
Đa xạ
Hình 6.1. Những khái niệm cơ bả n của phương pháp hướng đối tượng
Đối tượng là khái niệm cơ sở quan trọng nhất của cách tiếp cận hướng đối tượng. Đối tượng là
một khái niệm, một sự trừu tượng hoá hay một sự vật có nghĩa trong bài toán đang khảo sát. Đó
chính là các mục mà ta đang nghiên cứu, đang thảo luận về chúng. Đối tượng là thực thể của hệ
thống, của CSDL và được xác định thông qua định danh của chúng. Thông thường các đối tượng
được mô tả bởi các danh từ riêng (tên gọi) hoặc được tham chiếu tới trong các mô tả của bài toán
hay trong các thảo luận với người sử dụng. Có những đối tượng là những thực thể có trong thế
giới thực như người, sự vật cụ thể, hoặc là những khái niệm như một công thức, hay khái niệm
trừu tượng, v.v. Có một số đối tượng được bổ sung vào hệ thống với lý do phục vụ cho việc cài
đặt và có thể không có trong thực tế.
Đối tượng là những thực thể được xác định trong thời gian hệ thống hoạt động. Trong giai đoạn
phân tích, ta phải đảm bảo rằng các đối tượng đều được xác định bằng các định danh. Đến khâu
thiết kế, ta phải lựa chọn cách thể hiện những định danh đó theo cách ghi địa chỉ bộ nhớ, gán các
số hiệu, hay dùng tổ hợp một số gái trị của một số thuộc tính để biểu diễn. Theo quan điểm của
người lập trình, đối tượng được xem như là một vùng nhớ được phân chia trong máy tính để lưu
Hệ thống hướng đối tượng là một sưu tập (Collection) các đối tượng (thực thể) tương tác,
trao đổi với nhau để thực thi các nhiệm vụ theo yêu cầu. Khi cần thực hiện một công việc, hệ
thống sẽ tạo ra các đối tượng tương ứng theo thiết kế và hủy bỏ chúng khi không cần lưu giữ
tiếp. Mỗi đối tượng được gắn với một định danh duy nhất (unique identifier) trong CSDL. Định
danh này do hệ thống tự động tạo ra và được gọi là định danh đối tượng (Object oriented
IDentifier, viết tắt là OID). Người dùng, người lập trình hay người làm việc với một công cụ truy
vấn không thể xem được hoặc thao tác được với các định danh đối tượng một cách trực tiếp, nó
được sử dụng bên trong hệ thống để xác định duy nhất một đối tượng và để tạo và quản lý các
tham chiếu bên trong đối tượng.
Các OID thỏa mãn hai tính chất:
1. Giá trị OID không thay đổi trong suốt thời gian tồn tại của một đối tượng, điều này
bảo đảm tính duy nhất của mỗi đối tượng. Do đó, một hệ thống CSDL hướng đối
tượng phải có cơ chế tạo ra các OID và bảo đảm tính không thay đổi của nó.
2. Mỗi giá trị OID chỉ được sử dụng duy nhất một lần; nghĩa là, ngay cả khi một đối
tượng được xóa khỏi CSDL thì OID của nó cũng không được gán cho đối tượng nào
khác.
Từ hai tính chất trên khẳng định rằng OID không phụ thuộc vào bất kỳ giá trị thuộc tính
nào của đối tượng, bởi vì giá trị của thuộc tính có thể thay đổi và chỉnh sửa. Nói chung, OID
cũng không dựa trên địa chỉ vật lý của đối tượng trong kho lưu trữ, bởi vì địa chỉ vật lý có thể
thay đổi sau mỗi lần tổ chức lại CSDL về phương diện vật lý. Tuy nhiên, một số ít hệ thốngvẫn
sử dụng địa chỉ vật lý làm OID để tăng cường hiệu quả trong truy vấn đối tượng. Nếu địa chỉ vật
lý của một đối tượng thay đổi, một con trỏ gián tiếp có thể được thiết lập tại địa chỉ trước đó để
trỏ tới vị trí vật lý mới của đối tượng đó. Phổ biến hơn, người ta sử dụng số nguyên lớn (long
integer) làm OID, sau đó sử dụng một số dạng bảng băm (hash table) để ánh xạ giá trị OID đến
đại chỉ vật lý của đối tượng.
Mô hình CSDL hướng đối tượng trước đây xem mọi giá trị từ đơn giản đến phức tạp đều
như là các đối tượng. Do đó, mọi giá trị cơ sở, giá trị nguyên thủy (thuộc kiểu nguyên thủy), như
các giá trị số (byte, int, short, long, float, double), ký tự (char), xâu (String), hoặc logic (boolean)
đều được xem như là đối tượng nên chúng có định danh. Như vậy, hai giá trị cơ sở sẽ có hai OID
khác nhau, điều này rất hữu ích trong một số trường hợp. Thí dụ, một số nguyên có giá trị 50 có
thể biểu diễn với nhiều ngữ nghĩa khác nhau như trọng lượng (tính bằng kilogram), hoặc khoảng
cách (tính bằng Km), …. Khi đó, hai đối tượng cơ sở với các OID khác nhau có thể được tạo ra,
nhưng cả hai đối tượng đều biểu diễn số nguyên giá trị 50. Điều này mặc dù hữu ích về mô hình
lý thuyết, nhưng rất không thực tế trong cài đặt, vì có thể dẫn đến trường hợp hệ thống tạo ra quá
nhiều OID dẫn tới hệ thống quá phức tạp. Vì vậy, hầu hết các hệ CSDL hướng đối tượng cho
phép biểu diễn phân biệt giá trị với đối tượng. Mỗi đối tượng phải có một OID bất biến, trong
Đối tượng là thể hiện, là một đại diện của một lớp. Lớp là một mô tả về một nhóm các đối
tượng có những tính chất (thuộc tính) giống nhau, có chung các hành vi ứng xử (thao tác gần
như nhau), có cùng mối liên quan với các đối tượng của các lớp khác và có chung ngữ nghĩa
trong hệ thống. Lớp chính là cơ chế được sử dụng để phân loại các đối tượng của một hệ thống
CSDL. Cũng như các đối tượng, lớp có thể là những nhóm thực thể có trong thế giới thực, cũng
có những lớp là khái niệm trừu tượng và có những lớp được đưa vào trong thiết kế để phục vụ
cho cài đặt hệ thống dữ liệu , v.v.
Lớp và mối quan hệ của chúng có thể mô tả trong các biểu đồ lớp biểu đồ đối tượng và một số
biểu đồ khác của UML. Trong biểu đồ lớp, lớp được mô tả bằng một hình hộp chữ nhật, trong
đó có tên của lớp, có thể có các thuộc tính và các hàm (phương thức) như hình 6.2.
a) Tên của lớp b) Tên và thuộc tính c) Tên, thuộc tính và phương thức
Hình 6.2. Các ký hiệu mô tả lớp trong UML
Chúng ta nên đặt tên theo một qui tắc thống nhất như sau:
Tên của lớp thì chữ cái đầu của tất cả các từ đều viết hoa, in đậm. Thí dụ:
SinhVien, HocSinh, KhachHang, v.v.
Tên của đối tượng, tên của thuộc tính thì viết hoa chữ cái đầu của các từ trừ từ đầu
tiên, Thí dụ: hoTen, danhSachSV, v.v.
Tên của hàm (phương thức) viết giống như tên của đối tượng nhưng có thêm cặp ngoặc đơn ‘(‘
và ‘)’, Thí dụ: hienThi(), nhapDiem(), v.v.
Các dữ liệu thành phần của một lớp có thể được bao gói thông qua các đặc tính quản lý sự truy
nhập để phục vụ việc che giấu thông tin của phương pháp hướng đối tượng. Trong UML ta có
thể sử dụng các ký hiệu để đặc tả các thuộc tính đó.
Ký hiệu: ‘+’ đứng trước tên thuộc tính, hàm xác định tính công khai (public), mọi đối tượng
trong hệ thống đều nhìn thấy được. Nghĩa là mọi đối tượng đều có thể truy
nhập được vào dữ liệu công khai.
‘#’ đứng trước tên thuộc tính, hàm xác định tính được bảo vệ (protected), chỉ
những đối tượng có quan hệ kế thừa với nhau nhìn thấy được.
Hệ thống hướng đối tượng là tập các đối tượng tương tác với nhau để thực hiện công việc theo
yêu cầu. Quan hệ là kết nối ngữ nghĩa giữa các lớp đối tượng, trong đó thể hiện mối liên quan về
các thuộc tính, các thao tác của chúng với nhau trong hệ thống. Giữa các lớp có năm quan hệ cơ
bản:
1. Quan hệ kết hợp (Association),
2. Quan hệ kết nhập (Agregation),
3. Quan hệ tổng quát hóa (Generalization), kế thừa (Inheritance),
4. Quan hệ phụ thuộc (Dependency),
5. Hiện thực hoá (Realization).
Ta sẽ xem xét lần lượt các quan hệ trên
1. Sự liên kết và kết hợp giữa các đối tượng
Một liên kết là một sự kết nối vật lý hoặc logic giữa các đối tượng với nhau. Phần lớn các liên
kết là sự kết nối giữa hai đối tượng với nhau. Tuy nhiên cũng có những liên kết giữa ba hoặc
nhiều hơn ba đối tượng. Nhưng các ngôn ngữ lập trình hiện nay hầu như chỉ cài đặt những liên
kết (phép toán) nhiều nhất là ba ngôi, Thí dụ phép.
Một sự kết hợp là một mô tả về một nhóm các liên kết có chung cấu trúc và ngữ nghĩa như nhau. Vậy,
liên kết là một thể hiện của lớp. Liên kết và kết hợp thường xuất hiện ở dạng các động từ trong các tài
liệu mô tả bài toán ứng dụng.
Hình 2-3 mô tả các ký hiệu cho quan hệ liên kết và kết hợp
Làm việc ở
NhanVien CongTy
hoTen Có cổ phần trong tenGoi
nhiemVu taiKhoan
Lưu ý: không nên nhầm lẫn liên kết với giá trị. Giá trị là dữ liệu nguyên thuỷ như là dữ liệu số hoặc
xâu ký tự. Liên kết là mối liên quan giữa hai đối tượng. Trong giai đoạn phân tích ta phải mô hình (xác
định) tất cả các tham chiếu tới các đối tượng thông qua các liên kết và nhận dạng được các nhóm liên
kết tương tự thông qua các quan hệ kết hợp
2. Quan hệ kết nhập
Kết nhập là một loại của quan hệ kết hợp, tập trung thể hiện quan hệ giữa tổng thể và bộ phận.
Kết nhập thường biểu diễn cho quan hệ “có một”, “là bộ phận của” , hoặc “bao gồm”, v.v. thể
hiện mối quan hệ một lớp tổng thể có, gồm, chứa hay liên kết với một hoặc nhiều lớp thành
phần. Người ta chia quan hệ kết nhập thành ba loại:
- Kết nhập thông thường
- Kết nhập chia sẻ và
- Kết nhập hợp thành hay quan hệ hợp thành.
Kết nhập thông thường
Quan hệ kết nhập thông thường, gọi tắt là kết nhập thể hiện mối liên kết giữa hai lớp, trong đó
đối tượng của lớp này bao gồm một số đối tượng của lớp kia, song không tồn tại trong nội tại
của lớp đó. Lớp phía bộ phận cũng chỉ là một bộ phận logic của phía tổng thể và chúng không
được chia sẻ với các lớp khác. Thí dụ: một hạm đội của lớp HamDoi gồm một số (3..10) tàu
HamDoi TauChien
* Text
Window
Text * chứa
Window * Menu
Menu *
DialogBox
* * DialogBo
x
Hình 6.6. Quan hệ kết nhập hợp thành
{abstrac
t}
Hình 6.7. Lớp trừu tượng và cụ thể trong quan hệ tổng quát hoá
Lưu ý:
Quan hệ tổng quát và kết hợp là hai quan hệ liên quan đến hai lớp, nhưng chúng có
những điểm khác nhau. Quan hệ kết hợp mô tả mối liên kết giữa hai hoặc nhiều hơn đối
tượng còn quan hệ khái quát mô tả các phương diện khác nhau của cùng một thể hiện.
Quan hệ kết nhập và tổng quát cũng khác nhau. Cả hai đều làm xuất hiện cấu trúc cây
thông qua bao đóng bắc cầu của quan hệ cơ sở, nhưng quan hệ tổng quát là mối quan hệ
TaiLi Sach
eu
Hình 6.8. Quan hệ tổng quát hoá ngược lại với quan hệ kết nhập
4. Kế thừa bội
Kế thừa bội cho phép một lớp được kế thừa các thuộc tính, các thao tác và các quan hệ kết hợp
từ nhiều lớp cơ sở. Trong quan hệ kế thừa bội có thể dẫn đến sự pha trộn thông tin từ nhiều
nguồn dữ liệu khác nhau từ các lớp được kế thừa. Quan hệ kế thừa đơn, một lớp được kế thừa từ
một lớp trên, thường tạo ra cấu trúc cây, còn kế thừa bội lại tổ chức các lớp thành đồ thị định
hướng phi chu trình. Kế thừa bội là cơ chế mạnh trong mô hình hệ thống, nhưng đồng thời cũng
sẽ tạo ra nhiều sự phức tạp về tính nhập nhằng, không nhất quán dữ liệu.
Kế thừa bội từ những lớp phân biệt
Một lớp có thể kế thừa từ nhiều lớp cơ sở khác nhau.
Thí dụ 6.2. Lớp Nguoi là cơ sở để tạo ra hai lớp con: HDQuanTri (những người trong hội đồng
quản trị) và KinhDoanh (những người kinh doanh). Từ các lớp trên lại xây dựng các lớp
BanGiamDoc, CoDong (những người đóng cổ phần) kế thừa từ lớp HDQuanTri, lớp
NhanVienCT (những người làm việc thường xuyên trong công ty) và NhanVienHD (những
người làm việc theo hợp đồng) kế thừa từ lớp KinhDoanh. Trong Công ty lại có những người
vừa là cổ đông, vừa là nhân viên. Những người đó chính là các đối tượng của lớp
NhanVienCoDong kế thừa từ hai lớp con CoDong và NhanVienCongTy như hình 2-9(a).
Nguoi
HDQuanTri KinhDoanh
NhanVienCoDong
Hình 6.9(a). Kế thừa bội từ hai lớp khác nhau và có lớp cơ sở chung
Kế thừa bội không có lớp cơ sở chung
Kế thừa bội như trên là kế thừa có lớp cơ sở chung (lớp Nguoi). Chúng ta có thể tạo ra lớp kế
thừa bội từ nhiều lớp mà chúng lại không có lớp cơ sở chung. Loại kế thừa này thường xuất hiện
Hình 6.10. Quan hệ phụ thuộc giữa các lớp và các gói
6. Quan hệ hiện thực hoá
Quan hệ hiện thực hoá thể hiện sự kết nối giữa các lớp và giao diện. Quan hệ này thường được
sử dụng với các giao diện và những lớp làm nhiệm vụ cài đặt các dịch vụ (phương thức) đã được
khai báo trong các giao diện. Quan hệ hiện thực hoá được ký hiệu là mũi tên đứt nét như hình
6.11.
setDefault() setDefault()
getChoice(): getChoice():
Choice Button
Hình 6.11. Quan hệ hiện thực hoá
Tập Dom các giá trị nguyên thuỷ là hợp của tất cả các miền giá trị cơ sở của ngôn ngữ lập trình
L. Các phần tử của Dom được gọi là hằng, trong đó nil là một hằng đặc biệt biểu diễn giá trị
không xác định.
Ta ký hiệu Obj = {o1, o2, ...} là tập vô hạn các định danh đối tượng (OID) và Class là tập các
tên lớp, Att là tập các tên thuộc tính.
Với một tập Oid là tập con các định danh đối tượng, Oid Obj, họ các giá trị trên Oid, ký hiệu
Val(Oid), được xác định như sau:
(i) Hằng nil Val(Oid)
(ii) Nếu v Dom thì v Val(Oid)
(iii) Nếu o Oid thì o Val(Oid)
(iv) Tập {vi | vi Val(Oid), (i = 1, ..., n)} Val(Oid) và
(v) Cho tập các giá trị {vi | vi Val(Oid), (i = 1, ..., n)} và tập các tên thuộc
tính khác nhau {Ai | Ai, Aj Att, (i j Ai Aj ), (i, j = 1, ..., n)} thì
bộ [A1 : v1, ..., An : vn] Val(Oid).
Một đối tượng trong hệ thống thường được mô tả bởi một cặp (o, v), trong đó o là định danh đối tượng
và v là trạng thái hay giá trị hiện thời của đối tượng. Trong hệ thống hướng đối tượng, mỗi đối tượng
đều tồn tại ở một trạng thái xác định.
Các đối tượng có cùng tính chất và hành vi được nhóm lại để tạo thành một lớp. Mỗi lớp c có
một kiểu xác định, ký hiệu là (c), là kiểu của các đối tượng trong lớp. Tức là, mỗi đối tượng (o,
v) của lớp c, thì trạng thái hiện thời v của nó là (c).
Với tập tên lớp C đã cho, C Class, họ các kiểu của tất cả các lớp trong C, ký hiệu Types(C),
được xác định như sau:
(i) Tất cả các kiểu nguyên thuỷ: byte, int, long, float, double, char, string, và
boolean Types(C); kể cả kiểu rỗng (void) cũng thuộc Types(C).
(ii) Nếu c C thì (c) Types(C);
(iii) Nếu Types(C), thì tập {} Types(C);
Nếu lớp c1 có thuộc tính Ai với kiểu i và i = c2, mà c2 là một lớp, thì giữa lớp c1 và c2 có một
mối quan hệ kết nhập – các đối tượng của lớp c1 được hợp thành từ các đối tượng của lớp c2 .
Thuật ngữ class được sử dụng để mô tả một định nghĩa kiểu của lớp các đối tương, cùng với các
định nghĩa các tác vụ cho kiểu đó.
Thí dụ 6.3. Cho các lớp đối tượng được định nghĩa như sau:
define class GiaoVien:
type tuple(hoTen: string, gioiTinh: boolean, hocVi: string, khoa: Khoa));
end GiaoVien;
define class Khoa:
type tuple(tenKhoa: string, truongKhoa: GiaoVien, giaoVien: set(GiaoVien));
end Khoa;
Hệ thống có các đối tượng sau:
Ob1 = (o1, [hoTen: “Lê Văn Ba”, gioiTinh: false, hocVi: “Tiến sĩ”, khoa: o99])
Ob2 = (o2, [hoTen: “Nguyên Minh”, gioiTinh: true; hocVi: “Thạc sĩ”, khoa: o99])
Ob3= (o3, [hoTen: “Trần Văn Hùng”, gioiTinh: false, hocVi: “Kỹ sư”, khoa: o99])
Ob4 = (o4, [hoTen: “Ngũ Thiện Huy”, gioiTinh: false, hocVi: “Tiến sĩ”, khoa: o99])
Ob5 = (o99, [tenKhoa: “Công nghệ thông tin”, truongKhoa: o1, giaoVien: {o1, o2, o3, o4}])
Đối tượng Ob1 theo định nghĩa trong lược đồ trên sẽ gồm định danh o1 và một bộ (tuple) các giá trị:
[hoTen: “Lê Văn Ba”, gioiTinh: false, hocVi: “Tiến sĩ”, khoa: o99]. Đối tượng Ob99 có định danh là o99
và một giá trị bộ: [tenKhoa: “Công nghệ thông tin”, truongKhoa: o1, giaoVien: {o1, o2, o3, o4}], trong
đó, thuộc tính tenKhoa có giá trị nguyên thủy, thuộc tính truongKhoa tham chiếu đến đối tượng có định
danh đối tượng là o1, thuộc tính giaoVien có giá trị tập (set) tham chiếu đến các đối tượng với các định
danh đối tượng o1, o2, o3, o4.
Kiểu của lớp GiaoVien là:
(GiaoVien) = [hoTen: string, gioiTinh: boolean, hocVi: string, khoa: Khoa] = 1
Tương tự kiểu của lớp Khoa:
(Khoa) = [tenKhoa: string, truongKhoa: GiaoVien, giaoVien: {GiaoVien}] = 2
Hệ thống có C = {GiaoVien, Khoa}, và
Types(C) = {string, boolean, 1, 2}
Trong mô hình dữ liệu quan hệ, hai bộ (thực thể) bằng nhau nếu tất cả các thuộc tính khoá của hai
bộ có cùng giá trị. Tuy nhiên, trong CSDL hướng đối tượng, cần phân biệt hai khái niệm “đồng
nhất” với “bằng nhau” của các đối tượng như trong thực tế. Hai quan hệ này được định nghĩa như
sau:
Một lược đồ kiểu dữ liệu hướng đối tượng bao hàm một cấu trúc phân cấp ISA giữa các lớp đối
tượng theo quan hệ kế thừa (IS - A). Cấu trúc phân cấp lớp (kiểu) bao gồm 3 thành phần sau: (1)
tập các lớp, (2) các kiểu liên quan đến các lớp, (3) đặc điểm của các quan hệ ISA giữa các lớp.
Một cách hình thức, cấu trúc phân cấp lớp ISA là một bộ ba (C, , ), trong đó, C là tập hữu hạn
tên các lớp, là ánh xạ từ C vào Types(C), là thứ tự bộ phận trên tập các lớp C. Thông
thường thì quan hệ thứ tự bộ phận có tính phản xạ. Lớp c2 là lớp con của lớp c1 hay nói cách
khác lớp c2 kế thừa lớp c1 nếu kiểu của lớp c2 là tinh hơn kiểu của lớp c1, ký hiệu là c2 c1.
Chúng ta sử dụng quan hệ kiểu con () để biểu diễn một kiểu là tinh hơn kiểu khác [6].
Định nghĩa 6.2. Cho (C, , ) là một cấu trúc phân cấp lớp, quan hệ kiểu con trên Types(C) là thứ
tự bộ phận nhỏ nhất trên Types(C), ký hiệu , thỏa mãn các điều kiện sau:
(i) Nếu c c’ thì c c’
(ii) Nếu i i' (1 i n, n m ) thì bộ
NhanSu
SinhVien GiangVien
GVBienChe GVThinhGiang
Hình 6.12. Một phân cấp lớp của CSDL hệ thống quản lý nhân sự.
(iv) Ext ({}) = {{v1, v2, ..., vn}| n 0, vi Ext ({}), i [1, n]}
(v) Ext([A1: 1, A2: 2, .., Ak: k]) = {[A1: v1, A2: v2, ..., Ak: vk] | vi Ext (i), i [1, k]}
Với qui ước (C) = {(c) | c C}, ta có thể dễ dàng chứng minh được định lý.
Định lý 6.1.
1 , 2 (C), 1 ≤ 2 Ext(1) Ext(2)
Phương thức là thành phần mô tả hành vi ứng xử của các đối tượng trong lớp. Các đối
tượng chỉ có thể hành động hay trao đổi thông tin với nhau thông qua các phương thương thức có
trong thân của lớp. Mỗi phương thức có ba thành phần: (1) tên gọi (name), (2) chữ ký
(Signature) và (3) thân (body) của phương thức.
Định nghĩa 6.4. Cho tập M là tập các tên của phương thức và (C, , ) là cấu trúc phân cấp lớp.
Với mỗi lớp c C, 1, 2, 3, ..., n Types(C), và tên phương thức m M, khi đó ánh xạ m : c
1 ... n-1 n là chữ ký của phương thức m.
Chữ ký phương thức liên kết với lớp c; phương thức m áp dụng cho các đối tượng của
lớp c và các đối tượng của các lớp con của c, đó là các lớp c’ C sao cho c ' c . Lưu ý, ở đây
chúng ta chỉ xét những phương thức công khai, nghĩa là những phương thức được phép kế thừa.
Nếu phương thức m được định nghĩa trong lớp c1 và c2 là lớp con trực tiếp của c1, thì định
nghĩa của m với c2 được kế thừa từ c1. Chữ ký của m trong c2 có dạng m : c2 n;
chữ ký của m trong c2 là gần giống với chữ ký của m trên c1, ngoại trừ thành phần thứ nhất c1
được thay bằng c2. Tổng quát, lớp c2 kế thừa phương thức m từ lớp c1 và m đã được định nghĩa
trong c1. Nếu lớp c2 kế thừa phương thức m từ lớp c1, thì thân của m trong c2 là đồng nhất với
thân của m trong c1.
Đối với một cấu trúc phân cấp lớp (C, , ) xác định một tập các chữ ký phương thức của
các lớp trong C, được ký hiệu là MS. Mỗi lớp c của C cũng xác định một tập các chữ ký phương
thức µ(c), là tập các chữ ký phương thức định nghĩa trong c hoặc được lớp c kế thừa từ các lớp
cha của nó, tức là MS = { (c) | c C} .
Tập chữ ký phương thức MS được thiết kế tốt nếu nó thỏa mãn hai luật sau:
Luật 1. (đối biến thể): Các phương thức có tên giống nhau có các chữ ký khác nhau và liên
kết với các lớp khác nhau, nhưng nếu m : c1 n và m : c2 ’p-1 ’p là hai
chữ ký của m và c1 c2, thì n = p và ’i (i = 1, ..., n).
Luật 2. (nhất quán trong thừa kế): Nếu c1 là lớp con của c2, c3 và có một định nghĩa của
phương thức m đối với cả c2 và c3 thì tồn tại một định nghĩa của m đối với lớp con của c2 và c3,
đó cũng chính là định nghĩa của m đối với c1 hoặc lớp cha của c1.
5.2.4. Lược đồ kiểu dữ liệu hướng đối tượng và các thể hiện
Một lược đồ mô tả cấu trúc dữ liệu được lưu trữ trong cơ sở dữ liệu, bao gồm các kiểu kết
hợp với các tên lớp, cấu trúc phân cấp ISA và chữ ký của các phương thức (tức là các giao diện
cung cấp cho các đối tượng trong mỗi lớp).
Định nghĩa 6.5. Một lược đồ kiểu dữ liệu hướng đối tượng là bộ năm S = (C, , , MS, G),
trong đó,
G là tập các các tên gọi, G C =
là một ánh xạ từ G C vào Types(C)
(C, , ) là một cấu trúc phân cấp các lớp
MS là tập các chữ ký phương thức đối với (C, , )
Định nghĩa 6.6. Thể hiện của lược đồ kiểu dữ liệu hướng đối tượng (C, , , MS, G) là bộ bốn
I = (, , , ), trong đó,
: là phép gán định danh đối tượng với O = {(c)| c C}
: là một ánh xạ từ O đến Val(O) sao cho với o (c) thì (o) Ext((c)).
: ánh xạ mỗi tên trong G có kiểu đến một giá trị trong Ext().
: ánh xạ các ngữ nghĩa đến các tên phương thức phù hợp với chữ ký phương thức trong
5.3. CÁC PHÉP TRUY VẤN TRÊN MÔ HÌNH CSDL HƯỚNG ĐỐI TƯỢNG
Trong các hệ thống CSDL hướng đối tượng (OODBS), các câu truy vấn hướng đối tượng
OQL (Object Query Language) được biểu diễn giống như trong SQL. OQL của ODMG [11]
cũng là ngôn ngữ khai báo giống như SQL, nó cung cấp một môi trường phong phú để truy vấn
CSDL đối tượng một cách hiệu quả, kể cả những cơ sở mức cao đối với các tập đối tượng và
những cấu trúc khác. OQL liên quan chặt chẽ với phần truy vấn của SQL-92, nó mở rộng cú
pháp SELECT của SQL-92. OQL cũng bao hàm cả những phần mở rộng đối tượng như định
danh đối tượng, đối tượng phức hợp, biểu thức đường dẫn (path expressions), triệu gọi thao tác
(operation invocation) và kế thừa. Các câu truy vấn OQLcó thể bao gồm cả những phương thức
của ngôn ngữ ràng buộc. OQL duy trì tính toàn vẹn đối tượng bằng cách sử dụng các phương
thức của đối tượng, đúng hơn là những toán tử cập nhật riêng. OQL có thể thực hiện những
phương thức thay đổi trạng thái đối tượng như create(), add(), và delete(), …, giống như
các hàm. Thí dụ,
Person(name: ‘‘Nguyen Long", birthdate: 26/11/1992, salary: 100000)
OQL (Object Query Language) là ngôn ngữ truy vấn đối tượng được ODMG xây dựng để hỗ trợ
mô hình dữ liệu đối tượng chuẩn [4]. Trước khi tìm hiểu về OQL lõi (Core OQL), chúng ta cần
nắm vững các phép toán qui ước như sau.
Các phép toán hai ngôi binop = {and, or, intersect, union, except, =, !=, <, >, <=, >=,
+ -, *, /, ||, mod}
Các phép toán một ngôi unop = {first, last, max, min, avg, sum, count, distinct,
listtoset, element, flatten, abs, not, -}
Văn phạm của OQL có các qui tắc dẫn xuất:
q ::= b | f | i | c |s
|x
| bag(q, …, q) | set(q, …, q) | list(q, …, q) | array(q, …, q)
| dictionary((q, q) , …, (q, q)) | struct(l: q; : : : ; l: q)
| C(l: q, …, l: q) | q:l | (C)q
Hệ truy vấn hạt nhân có các kiểu: kiểu nguyên thuỷ, kiểu hàm n-ngôi, kiểu bội sưu tập, các cấu
trúc và lớp.
Kiểu trong OQL được xây dựng theo cú pháp như sau:
Types ::= int | float | bool | char | string | void
|…
| bag() | set() | list() | array()
| dictionary(,) | struct(l: , …, l: )
|C
Ta sử dụng `' để ký hiệu cho kiểu hàm. Thí dụ int float là kiểu hàm có đối số kiểu nguyên int
và kết quả trả lại là float. Kiểu hàm xuất hiện khi cần thể hiện những phương thức có tham số.
Những kiểu khác có thể tự giải nghĩa. Thí dụ kiểu bag(bool) là kiểu túi (bag) các giá trị logic, và
set(list(string)) là tập các danh sách của các chuỗi ký tự. Kiểu dictionary(string, set(int)) là kiểu
từ điển với từ khoá là xâu ký tự và giá trị tương ứng là kiểu set(int). Kiểu struct(a: int, b: struct(c:
float, d: char)), là kiểu cấu trúc có hai trường, trường đầu có nhãn là a ứng với một số nguyên và
trường thứ hai có nhãn là b ứng với một cấu trúc có hai trường (c và d).
Để tiện lợi ta viết Col() để ký hiệu cho kiểu sưu tập (array, bag, dictionary, list hoặc set), với
các phần tử có kiểu .
Các kiểu char, int, float và string được gọi là những kiểu có thứ tự.
Trong ODMG 3.0, một biểu thức đối tượng trong OQL có thể tham chiếu tới, triệu gọi
các phương thức (Methods invoking) như là các tài sản sẵn có của nó [16]. Những phương thức
này cần phải có kiểu trả lại kết quả phù hợp với các biểu thức OQL mà trong đó chúng xuất hiện
(không triệu gọi được những phương thức có kiểu trả lại là void).
Đối với những phương thức (hàm) không có tham số thì phải xử lý trong ngôn ngữ lập
trình. Thí dụ, hàm age() của lớp Person ở Thí dụ 3.3 là hàm không có tham số. Câu truy vấn tìm
những người sông ở Nam Dinh có tuổi ngoài 20 có dạng.
select count (*)
from persons p
where p.address.city = ‘‘Nam Dinh" and p.age >= 20
Các phương thức này trả lại kết quả là đối tượng phức hợp gồm những đối tượng có quan
hệ với nhau. Lớp Person còn có phương thức auto() để xác định đối tượng Auto của mỗi người.
select count (*)
from persons p
where p.address.city = ‘‘Nam Dinh" and p.age >= 20 and p.auto.model = ‘‘Toyota"
Đối với những phương thức có tham số thì đòi hởi phải tuân theo cú pháp cặp ngoặc đơn
cho các tham số (parentheses syntax for arguments). Thí dụ, hãy tìm tên và tuổi của những người
có ông bà, nghĩa là hasAncestor() có đối tượng của Person trong danh sách tham số.
select p.name, p.age, q.name, q.age
from persons p, persons q
where p.hasAncestor(q)
int float
KhoaHoc
+ten_khoa_hoc : string
+so_hieu_kh : string
SinhVienTN SVChuaTN +DaiHoc : DaiHoc
+luanvan : string +so_nam : int
+gvhd : Khoa
Thí dụ 5.8.
select s.hoten
from Khoa as f
where exists f.gv_hd in (forall KhoaHoc.DaiHoc.ten_nganh = ‘Cong nghe thong tin’)
3. Biến tham chiếu
Biến vùng mô tả cho một biểu thức đường dẫn có thuộc tính cuối cùng là một thuộc tính
phức được gọi là biến tham chiếu. Người ta sử dụng các biến vùng biểu diễn cho các đối tượng
của lớp trong một biểu thức đường dẫn.
Thí dụ 5.9.
select s.hoten
from SinhVienTN as s, s.gvhd as f
where s.tuoi > f.tuoi
Trong đó, f là một biến tham chiếu đến các đối tượng thuộc lớp SinhVienTN.
4. Bộ phận của một phân cấp lớp
Cho C là một siêu lớp của C1, C2, …, Cn. Khi thực hiện một truy vấn trên C, việc tìm
kiếm sẽ được thực hiện với tất cả các đối tượng trong phân cấp lớp có gốc tại C, để truy vấn trên một
vài lớp xác định chứ không phải tất cả các lớp, người ta sử dụng kết hợp các phép toán tập hợp như
union, difference và except trong truy vấn.
5.4.1. Giới thiệu về các hệ quản trị CSDL hướng đối tượng
Trong thập kỷ qua, các hệ quản trị CSDL hướng đối tượng (ODBMS) đã phát triển rất mạnh mẽ,
nhiều hệ thống đã trở thành sản phẩm công nghiệp trên thị trường. Bảng 1 dưới đây liệt kê một
số sản phẩm của OODBMS [18]. Xu thế chung là những sản phẩm của những hãng lớn, đã thành
công sẽ thống trị thị trường OODBMSs giống như đối với RDBMSs.
Bảng 5.1: Danh sách một số hệ quản trị CSDL đối tượng
Tuy nhiên, không phải tất cả những hệ thống này đều hỗ trợ ODL hoặc OQL, mặc dù chúng đều
hỗ trợ các ràng buộc ngôn ngữ ODMG C++ và Smalltalk. Nghĩa là không có một hệ thống nào
Hệ quản trị CSDL hướng đối tượng có những lợi thế sau:
OODBMS có thể xử lý được những sưu tập dữ liệu lớn, phức tạp được định nghĩa bởi
người sử dụng và cho phép bổ sung các kiểu dữ liệu mới dựa vào những kiểu dữ liệu
đã được định nghĩa trước. Như vậy, những kiểu dữ liệu như hợp thành, tham chiếu,
tập hợp, … có thể dùng để hỗ trợ truy cập vào những dữ liệu đa phương tiện như hình
ảnh, âm thanh, video, …
Thuận tiện cho việc thiết kế và sự phát triển phần mềm ứng dụng, có thể giảm thiểu
được việc viết mã chương trình ở nhiều khâu. OODBMS giúp cho việc thiết kế CSDL
và thao tác đơn giản hơn, bởi vì nó không cần biết những kiểu dữ liệu trừu tượng
được định nghĩa bởi người sử dụng ADT (user- defined abstract data types) làm việc
như thế nào.
Hiệu năng của hệ thống được cải tiến đáng kể. OODBMS làm việc rất hiệu quả với
những dữ liệu phức tạp. Nếu chúng ta sử dụng hệ quản trị quan hệ RDBMS và ta cần
phải thay đổi cấu trúc của một đối tượng dữ liệu trong CSDL thì thường ta phải thực
hiện nhiều câu truy vấn. Mỗi câu truy vấn này phải chịu các phí tổn nhất định và dẫn
tới kém hiệu quả. CSDL đối tượng sẽ khắc phục được nhược điểm trên bằng cách
thông qua định danh OID- để hệ thống tìm kiếm những thông tin cần thiết một cách
hiệu quả nhất.
Kết luận
CSDL hướng đối tượng OODB (bao gồm các chuẩn OODB, mô hình OODB, truy vấn OODB,
và quản trị OODBMS) đã được phát triển từ những năm 1980. Các ý tưởng về công nghệ và mô
hình lõi của CSDL hướng đối tượng có tầm quan trọng trong nghiên cứu và triển khai các ứng
dụng CSDL hướng đối tượng. Những chuẩn nổi tiếng như ODMG, OMG, …, đã được đề xuất để
cải tiến những hệ quản trị CSDL hướng đối tượng. Tuy nhiên, nó vẫn chưa thống trị được thị
trường các hệ quản trị CSDL hiện nay hoặc trong tương lai gần, bởi vì một số nguyên nhân thực
tế. Hiện tại, cái mà chúng ta dễ nhận thấy là có sự kết hợp của các hệ quản trị CSDL hướng đối
tượng với CSDL quan hệ truyền thống, đó là những hệ quản trị CSDL quan hệ - đối tượng
ORDBMS. Xu thế chính là kết hợp các hệ thống quản trị CSDL quan hệ với hệ thống quản trị
CSDL đối tượng và sử dụng SQL để quản lý những dữ liệu truyền thống và sử dụng hệ thống
quản trị CSDL hướng đối tượng để quản lý những dữ liệu dữ liệu hướng đối tượng, phức hợp.
6.1.1. Mở đầu
Các hệ CSDL kinh điển, phổ biến nhất là các hệ CSDL quan hệ, hầu như không có khả
năng biểu diễn và xử lý có hiệu quả các thông tin không chính xác và không chắc chắn. Chẳng
hạn, với câu hỏi: “hãy cho biết tên các nhân viên trẻ tuổi và có lương khá cao?” thì một hệ quản
trị CSDL kinh điển dường như không có cách gì để cho câu trả lời thỏa đáng. Mặt khác, chúng ta
luôn phải đối mặt với một sự thật là sự hiểu biết của chúng ta về thế giới thực thường là không
hoàn hảo, vì vậy làm thế nào để duy trì được tính toàn vẹn của một CSDL với những thông tin
thu thập được từ thế giới thực? Có hai lựa chọn:
- Hoặc là giới hạn mô hình CSDL trong phạm vi thế giới thực mà ở đó mọi thông tin có
được là hoàn hảo. Điều này sẽ làm cho phạm vi ứng dụng của hệ thống bị hạn chế rất nhiều, vì
thực tế hầu hết các thông tin ta biết về thế giới thực là không hoàn hảo. Chẳng hạn, với một
CSDL về nhân viên, nếu chỉ chấp nhận các thông tin hoàn hảo thì các bộ ứng với các nhân viên
mà không biết chính xác ngày sinh hay mức lương đều có thể bị loại.
- Hoặc là phát triển các mô hình dữ liệu cho phép biểu diễn, thao tác và xử lý các thông tin
không hoàn hảo và không đầy đủ bằng cách mở rộng ngữ nghĩa dữ liệu hoặc mở rộng miền trị
thuộc tính. Chẳng hạn, chấp nhận thông tin có được về tuổi của một nhân viên là không chính
xác, chỉ biết là trong khoảng từ 30 đến 40. Nếu mô hình CSDL có khả năng biểu diễn và thao
thác trên các khoảng, thì có thể chấp nhận những bộ với thông tin mơ hồ như vậy. Một CSDL
như vậy được gọi là CSDL với thông tin không hoàn hảo.
Giải pháp thứ hai rõ ràng là tốt hơn, vì có thể mở rộng các ứng dụng của CSDL trên cơ sở
cho phép biểu diễn và xử lý các thông tin không hoàn hảo.
Trong những năm gần đây, để đáp ứng các yêu cầu của những ứng dụng cơ sở dữ liệu
không truyền thống, bao gồm CAD/CAM, các hệ thống tự động hóa văn phòng, những thiết kế
kỹ thuật…, nhiều loại thông tin không hoàn hảo khác nhau đã được đưa vào CSDL quan hệ.
Các mô hình CSDL quan tâm tới năm loại thông tin không hoàn hảo dưới đây:
- Thông tin không nhất quán (inconsistent information): Đây là loại thông tin sai lệch,
trong đó cùng một khía cạnh của thế giới thực được biểu diễn nhiều lần trong cùng một CSDL
hay trong những CSDL khác nhau, khi các biểu diễn đó là đối lập quyết liệt không thể hòa hợp
được. Thông tin không nhất quán có thể ảnh hưởng đến tính toàn vẹn của một CSDL, chẳng hạn
có thể phá vỡ một phụ thuộc dữ liệu nào đó. Thông tin không nhất quán thường xuất hiện khi
tích hợp thông tin từ nhiều CSDL.
- Thông tin không chính xác (imprecise information): Là thông tin được ký hiệu bởi một
tập các giá trị có thể, và giá trị thực của thông tin là một phần tử của tập đó. Như vậy thông tin
Mô hình quan hệ do Codd E.F. đề xuất năm 1970 đã đáp ứng được nhu cầu lưu trữ và xử lý
dữ liệu của con người trong một thời gian dài. Tuy nhiên, mô hình này đòi hỏi các thông tin lưu
trữ và xử lý phải là chính xác và hoàn hảo, trong khi các ứng dụng của thế giới thực, thông tin
thường là không hoàn hảo. Như vậy đặt ra vấn đề cần xây dựng một mô hình CSDL mới để lưu
trữ và thao tác với các thông tin không hoàn hảo.
Ta có thể định nghĩa tổng quát cho một mô hình CSDL mờ như sau:
Định nghĩa 6.1: Mô hình CSDL mờ là một mô hình dữ liệu cho phép biểu diễn, thao tác và
xử lý các thông tin không hoàn hảo và không đầy đủ bằng cách mở rộng ngữ nghĩa dữ liệu hoặc
mở rộng miền trị thuộc tính.
Như vậy, một CSDL mà trong đó có chứa một yếu tố liên quan đến các thông tin không
hoàn hảo (các thông tin mờ) thì được gọi là CSDL mờ. Nếu chúng ta chỉ xem xét các mô hình
CSDL quan hệ, biểu diễn bởi tập các bảng thì một cách trực quan có thể thấy nếu một CSDL quan
hệ có chứa ít nhất một bảng có yếu tố mờ thì đó là một CSDL mờ.
Dựa trên các tiếp cận theo logic mờ, người ta đề xuất nhiều phương pháp để lưu trữ và xử
lý thông tin không hoàn hảo dựa trên cơ sở của lý thuyết tập mờ, lý thuyết khả năng và quan hệ
tương tự. Với mỗi cách tiếp cận, có thể xây dựng được các mô hình CSDL quan hệ mờ khác
nhau. Trong giáo trình này, chúng ta giới thiệu một số mô hình CSDL mờ chủ yếu, đó là các mô
hình CSDL quan hệ mờ dựa trên tập con mờ, mô hình CSDL quan hệ mờ dựa trên quan hệ tương
Khái niệm ‘Tập hợp mờ’ (Fuzzy Set) được đề xuất bởi Zadez [11] từ năm 1965, là mở rộng
của khái niệm tập hợp cổ điển, nhằm đáp ứng nhu cầu biểu diễn những tri thức không chính xác.
Trong lý thuyết tập hợp cổ điển (tập hợp rõ-crisp set), quan hệ thành viên của các phần tử đối với
một tập hợp được đánh giá theo kiểu nhị phân một cách rõ ràng: mỗi phần tử u của vũ trụ tham
chiếu U chỉ có thể là chắc chắn thuộc tập A hoặc chắc chắn không thuộc tập A. Như vậy, để xem
một phần tử có là là thành viên của tập A hay không, ta gán cho phần tử đó giá trị 1 nếu phần tử
đó chắc chắn thuộc A, và giá trị 0 nếu nó không thuộc về tập hợp A, tức là ta có thể xây dựng
một hàm thành viên (hay hàm thuộc) để đánh giá một phần tử có thuộc tập A hay không:
1 if u A
u U , A u
0 if u A
Rõ ràng, hàm thành viên A sẽ xác định các phần tử thuộc về tập rõ A chỉ nhận giá trị 0
hoặc 1. Như vậy với tập rõ A thì A: U { 0, 1}.
Ngược lại, lý thuyết tập mờ cho phép đánh giá nhiều mức độ khác nhau về khả năng một
phần tử có thể thuộc về một tập mờ A. Ta cũng dùng một hàm thành viên A để xác định các
mức độ mà một phần tử u thuộc về tập mờ A, hàm này nhận mọi giá trị từ 0 đến 1, tức là: u
U, 0 A(u) 1. Như vậy, với tập mờ A thì A : U [0, 1].
Chẳng hạn, xét vũ trụ tham chiếu là các nhân viên trong một công ty, gọi A là tập ‘những
người có mức lương từ 6 triệu đến 8 triệu đồng, thì A là một ‘tập rõ’, gồm tất cả những người có
mức lương S, mà 6.000.000 S 8.000.000. Rõ ràng ai có lương 5.990.000đ hay 8.010.000đ là
không thuộc tập A. Nếu ta coi mức lương từ 6.000.000 trở lên là mức ‘thu nhập cao’, thì cả
những người có mức lương thấp hơn 6.000.000 vài chục ngàn đến vài trăm ngàn đồng vẫn có thể
được xem là thuộc tập hợp ‘những người có thu nhập cao’. Nếu gọi B là tập: ‘những người có
thu nhập cao’ thì B là tập mờ, mỗi phần tử của vũ trụ tham chiếu đều được gán một giá trị chỉ
mức độ mà phần tử đó thuộc về tập mờ này. Chẳng hạn một nhân viên có mức lương 6.800.000
có độ thuộc vào tập B này là bằng 1 (chắc chắn là người có thu nhập cao), nhưng một người có
mức lương 2.000.000 thì có thể coi là thành viên của tập này với độ thuộc rất thấp, độ thuộc sẽ
tăng dần với những người có mức lương càng cao. Những người có thu nhập dưới 1.000.000 đ
thì không thể xem là có thu nhập cao, chắc chắn không thể thuộc tập B (mức độ là thành viên là
bằng 0).
Ta có định nghĩa hình thức cho một tập con mờ trên một vũ trụ tham chiếu U (là tập hợp
tất cả các phần tử xem xét, còn gọi là ‘tập nền’) như sau:
Định nghĩa 6.2: Tập con mờ A trên tập nền U xác định bởi hàm thuộc A: U [0, 1] gán
cho mỗi phần tử u của U, một giá trị A(u), với 0 ≤ A(u) ≤1, để chỉ mức độ mà phần tử u thuộc
u
về tập mờ A và được xác định: A A i ui U , i 1, 2,..., n
ui
Có thể dùng ký hiệu: A ui , A ui ui U
và chú ý rằng các dấu ‘+’ và ký hiệu phân số trong biểu diễn trên chỉ là một cách ký hiệu cho
mỗi phần tử ui (ở mẫu số) và mức độ thuộc về A của các phần tử đó (ở tử số) chứ không liên quan
gì đến các phép toán.
Nếu hàm A(u) cho kết quả 0 đối với phần tử u U thì phần tử đó không có trong tập mờ
A, kết quả 1 thì phần tử đó hoàn toàn thuộc tập đã cho. Các giá trị trong khoảng mở từ 0 đến 1
đặc trưng cho các phần tử mờ, tức là mức độ là thành viên của phần tử đó đối với tập hợp dã cho.
Trường hợp đặc biệt khi A: U {0, 1}, tức là hàm A(u) chỉ lấy giá trị bằng 0 hay 1, thì
tập con mờ A là một tập con cổ điển của U. Như vậy, tập con cổ điển (tập rõ) là một trường hợp
riêng của tập con mờ.
Thí dụ 6.1. Xét tập U gồm 8 căn hộ được ký hiệu là u1, u2, u3, u4, u5, u6, u7 và u8, mỗi căn
hộ có số phòng tương ứng là 1, 2,…, 8 phòng. Gọi A là tập hợp gồm các căn hộ “rộng”, B là tập
hợp gồm các căn hộ “thích hợp cho 4 người”. Ta xây dựng hàm thuộc cho các tập mờ A và B
như sau:
A : A(u3) = 0,4; A(u4) = 0,5; A(u5) = 0,6; A(u6) = 0,8; A(u7) = 0,9; A(u8) = 1,0
B : B(u3) = 0,4; B(u4) = 1,0; B(u5) = 0,7; B(u6) = 0,5;
đối với các phần tử khác, các giá trị của hàm thuộc là bằng 0.
Như vậy có thể biểu diễn các tập mờ trên như sau:
A = {0,4/u3; 0,5/u4; 0,6/u5; 0,8/u6; 0,9/u7; 1,0/u8}
B = {0,4/u3; 1,0/u4; 0,7/u5; 0,5/u6},
Từ nay về sau, để cho gọn ta có thể dùng “Tập mờ” thay cho “Tập con mờ” mà không gây
ra sai sót và hiểu lầm nào.
Chú ý rằng nếu A là tập rõ thì A(u) = 1 với mọi u thuộc A, tổng trên bằng số phần tử của
A, định nghĩa này là mở rộng của định nghĩa lực lượng của tập hợp cổ điển cho một tập rời rạc.
(5) - nhát cắt của tập mờ A (hay tập mức của A) là tập các phần tử có giá trị hàm
thuộc lớn hơn hoặc bằng , với [0, 1], được ký hiệu và định nghĩa như sau:
A = {u | uU | A(u) }
Chú ý rằng - nhát cắt của tập mờ A là 1 tập “rõ”, các phần tử của A hoàn toàn được xác
định.
Thí dụ 6.2. Xét tập mờ A là các căn hộ rộng, trong thí dụ 6.1:
A = {0,4/u3; 0,5/u4; 0,6/u5; 0,8/u6; 0,9/u7; 1,0/u8}
Khi đó: Giá đỡ, hạt nhân, chiều cao, tập mức của tập mờ A được xác định
như sau:
supp(A) = {u3, u4, u5, u6, u7, u8}
ker(A) = {u8}
h(A) = 1.0
A là tập mờ chuẩn hóa, do có h(A) = 1.
Một số nhát cắt mức = 0,5 của tập mờ A:
A0,5 = {u4, u5, u6, u7, u8};
A0,9 = {u7, u8}
Cho A và B là hai tập con mờ trên vũ trụ tham chiếu U với hàm thuộc tương ứng là A và
B, để so sánh các tập con mờ A, B ta xem xét các hàm thuộc của nó. Ta có:
- Hai tập mờ A và B là bằng nhau: ký hiệu A = B, nếu u U thì A(u) = B(u)
- Tập mờ A chứa trong tập mờ B: ký hiệu A B, nếu u U thì A(u) B (u).
- Tập rỗng có thể xem là tập mờ A, với hàm thuộc A(u) = 0, u U
Các tính chất giao hoán, kết hợp và phân bố của phép hợp và phép giao trong lý thuyết tập
hợp cổ điển vẫn đúng đối với phép hợp, phép giao của các tập con mờ. Tức là nếu A, B, C là các
tập con mờ trên vũ trụ tham chiếu U, ta có các công thức sau:
g. Một số tính chất của phép lấy phần bù các tập mờ:
Đối với các tập con cổ điển trên tập vũ trụ U, ta luôn có A A = và A A = U, nhưng
đối với các tập mờ thì hai tính chất này nói chung không đúng, tức là nếu A là phần bù của tập
mờ A trên U thì:
A A , và
A A U.
Đây là điểm khác nhau quan trọng giữa các tập con cổ điển và các tập con mờ.
Định nghĩa 6.8: Tích Đề các của k tập mờ A1, A2,..., Ak trên các vũ trụ tham chiếu U1,
U2,.., Uk là một tập con mờ ký hiệu là A1 A2 ... Ak trên vũ trụ tham chiếu U1 U2 ... Uk,
với hàm thuộc là A1 A2… Ak được xác định như sau:
A1 A2 ×… Ak (u) = min{A1(u1), A2(u2),..., Ak(uk)},
u = (u1, u2,…, uk) U1 U2 ... Uk.
Các khái niệm về tích Đề các của các tập con mờ là cơ sở để nghiên cứu các quan hệ mờ
trong các phần sau.
R H L D
H 1 0,9 0,3
L 0,9 1 0,1
D 0,5 0,1 1
Ta có thể cho quan hệ mờ R bằng ma trận M(R) = (aij) với aij là mức độ tin cậy của sinh
viên thứ i với sinh viên thứ j, với i, j = 1, 2, 3.
Với các quan hệ cổ điển trên ba tập tham chiếu X, Y, Z, nếu có một quan hệ giữa X và Y,
và một quan hệ giữa Y và Z sẽ cho phép xác định một quan hệ giữa X và Z, quan hệ thứ ba gọi là
hợp thành của hai quan hệ ban đầu. Với các quan hệ mờ cũng vậy, ta có thể xây dụng một quan
hệ mờ là hợp thành của hai quan hệ mờ cho trước, khái niệm quan hệ hợp thành mờ là sự mở
rộng của khái niệm quan hệ hợp thành cổ điển. Chẳng hạn, ta có quan hệ mờ R: chiều rộng của
sản phẩm là nhỏ hơn nhiều so với chiều dài. Quan hệ này xác định một lớp không chính xác các
chiều rộng và chiều dài của các sản phẩm, mà chiều rộng nhỏ hơn nhiều so với chiều dài. Đây là
một quan hệ mờ hai ngôi trên tập XY các cặp số thực là chiều rộng, chiều dài của các sản phẩm
trong vũ trụ tham chiếu. Giả sử ta cũng có quan hệ mờ S: chiều dài của sản phẩm là nhỏ hơn
chiều cao, đây cũng là một quan hệ mờ hai ngôi xác định trên tập YZ các cặp số thực là chiều
dài và chiều cao của các sản phẩm trong vũ trụ tham chiếu đang xét. Như vậy, nếu kết hợp hai
quan hệ mờ này, ta sẽ được một quan hệ mờ giữa các chiều rộng và chiều cao của sản phẩm.
Phép kết hợp đó gọi là phép hợp thành của hai quan hệ R và S.
Định nghĩa 6.11: Hợp thành của quan hệ mờ hai ngôi R trên X Y với hàm thuộc fR(x, y)
và quan hệ S trên Y Z với hàm thuộc fS(y, z) là một quan hệ mờ trên X Z, ký hiệu là R o S (hoặc
đơn giản là RS) và có hàm thuộc được xác định như sau:
(x,z) X Z, fRoS(x, z) = supy Y {min[fR(x, y); fS(y, z)]} (6.1)
Một số trường hợp đặc biệt:
- Nếu X, Y, Z là các tập hữu hạn, hàm thuộc của quan hệ hợp thành được xác định như sau:
(x,z) X Z, fRoS(x, z) = maxy Y {min[fR(x, y); fS(y, z)]} (6.2)
H 1 0,9 0,3
L 0,9 1 0,1
D 0,5 0,1 1
1 0,9 0,3
M R R 0,9 1 0,3 M R .
0,5 0,5 1
Do M(RoR) có phần tử ở hàng 3 cột 2 lớn hơn phần tử tương ứng trong M(R), vậy R không
phải là quan hệ bắc cầu.
Ngoài ra, dễ thấy quan hệ R là phản xạ do các phần tử trên đường chéo đều bằng 1 và R
không phải quan hệ đối xứng vì ma trận của quan hệ R không phải ma trận đối xứng. Rõ ràng là
R không phải quan hệ tương tự.
Thí dụ 6.9. Cho miền trị D gồm các giá trị D = {a, b, c, d}, ta xác định một quan hệ S trên
D như sau:
Bảng 6.2. Quan hệ S trên miền trị D
S a b c d
a 1 0,8 0 0
b 0,8 1 0 0
c 0 0 1 0,7
d 0 0 0,7 1
Ta kiểm tra các tính chất trong định nghĩa 6.12 với quan hệ S:
(1) Với a, b, c, d D, ta có S(a, a) = S(b, b) = S(c, c) = S(d, d) = 1, vậy S là phản xạ.
(2) Với mọi cặp x, y trong D, ta đều có S(x, y) = S(y, x), chẳng hạn S(a, b) = S(b, a) = 0,8,
S(c, d) = S(d, c) = 0,7… vậy tính chất đối xứng thỏa mãn, do đó S là quan hệ
đối xứng.
(3) Để kiểm tra tính bắc cầu max-min, ta cần kiểm tra điều kiện (3) trong định nghĩa quan
hệ tương tự phải thỏa mãn với mọi bộ 3 giá trị a, b, c D. Theo chú ý 6.3.3, có thể thực hiện
việc kiểm tra này bằng việc tính ma trận M(SoS).
Do M(SoS) = M(S) nên theo chú ý 6.3.3, S là một quan hệ bắc cầu max-min. Do S có cả 3
tính chất phản xạ, đối xứng và bắc cầu max-min nên S là một quan hệ tương tự trên D.
S B G R
Blue (B) 1 0,7 0
Green (G) 0,7 1 0
Red (R) 0 0 1
Từ ma trận quan hệ mờ M(S), ta thấy ngay rằng S là quan hệ phản xạ, đối xứng. Ta tính
được ma trận quan hệ hợp thành của S với chính nó là:
1 0, 7 0 1 0, 7 0 1 0, 7 0
M SoS 0, 7 1 0 0, 7 1 0 0, 7 1 0 M S .
0 0 1 0 0 1 0 0 1
Vậy S là quan hệ bắc cầu max-min. Do 3 tính chất trên, S là quan hệ tương tự
trên C.
Với mức = 0,9, ta có quan hệ R0.9 gồm các cặp sau: (H, H), (H, L), (L, H), (L, L), (D,
D), những cặp khác coi như không có liên hệ với nhau (vì mức độ quan hệ dưới ngưỡng cho
trước). Như vậy, các cặp thỏa quan hệ R0,9 là:
R0,9(U) = {(H, H), (H, L), (L, H), (L, L), (D, D)}
Đây là một quan hệ hoàn toàn ‘rõ’ trên U, cũng có biểu diễn quan hệ R0,9 dưới dạng bảng:
R0,9 H L D
H 1 1 0
L 1 1 0
D 0 0 1
Với mức = 0,7: quan hệ S0.7 là một qua hệ tuong đương, có ma trận cho trong hình dưới đây.
Bảng 6.5. Quan hệ S0,7 trên miền trị C
S0,7 B G R
Blue (B) 1 1 0
Green (G) 1 1 0
Red (R) 0 0 1
Mỗi màu chỉ tương đương với chính nó, mỗi lớp tương đương chỉ gồm một màu, các tập
{B}, {G} và {R} là một cách phân cụm của tập C.
Với mức = 0: tất cả các màu đều coi là tương đương với nhau (với mức độ bằng 0), tất cả
các giá trị trong ma trận đều bằng 1. Tất cả tập C là thuộc cùng một lớp tương đương, tức là
không thể phân cụm được tập C.
Thí dụ 6.13. Cho tập nền tham chiếu U = {a, b, c, d} và một quan hệ mờ R hai ngôi trên U
với hàm thuộc cho bởi bảng sau:
Bảng 6.7. Quan hệ R trên miền trị U
R a b c d
a 1 0,3 0,9 0,5
b 0,3 1 0,3 0,3
c 0,9 0,3 1 0,5
d 0,5 0,3 0,5 1
Từ ma trận quan hệ mờ M(R), dễ nhận thấy quan hệ R là phản xạ và đối xứng. Để kiểm tra
tính bắc cầu max-min, ta tính ma trận của quan hệ hợp thành M(RoR):
1 0,3 0,9 0,5 1 0,3 0,9 0,5
0,3 1 0,3 0,3 0,3 1 0,3 0,3
M RoR
0,9 0,3 1 0,5 0,9 0,3 1 0,5
0,5 0,3 0,5 1 0,5 0,3 0,5 1
1 0,3 0,9 0,5
0,3 1 0,3 0,3
M R
0,9 0,3 1 0,5
0,5 0,3 0,5 1
Như vậy, R là bắc cầu max-min. Quan hệ mờ R là quan hệ tương tự trên U.
Ta có thể tính các quan hệ R với các mức khác nhau.
Với = 0.3 (mức tương tự nhỏ nhất giữa các phần tử) thì tất cả các cặp phần tử đều có
quan hệ với nhau với mức độ lớn hơn hoặc bằng mức này, tức là x, y U thì xR0,3 y, vậy ta
có:
Hình 6.4. Cây phân hoạch liên kết với quan hệ tương tự R
Dễ thấy quan hệ này là phản xạ và đối xứng, tuy nhiên không có tính bắc cầu max-min nên
S không phải quan hệ tương tự.
1 0 0
Với = 0,6, quan hệ S0,6 có ma trận quan hệ là: M S0,6 0 1 1
0 1 1
Rõ ràng S0,6 là quan hệ tương đương, có thể phân hoạch tập U theo quan hệ này. Do đó có
thể phân cụm miền U theo mức = 0,6, đó là các cụm: {a} và {b, c}.
Với quan hệ này, giá trị của các thuộc tính là rõ, nhưng với mỗi bộ có thêm giá trị chỉ mức
độ mà bộ đó thuộc về quan hệ mờ đang xét. Loại quan hệ này có thể nhận được từ một quan hệ
thông thường, trên đó các bộ cần thỏa một điều kiện mờ nào đó (chẳng hạn: trẻ và có lương khá
cao).
6.4.2. Mô hình CSDL quan hệ mờ dựa trên dựa trên lý thuyết khả năng
Mô hình này đề xuất bởi Prade và Testermale vào năm 1983 để mở rộng mô hình CSDL
quan hệ kinh điển, theo hướng mở rộng miền trị thuộc tính bằng cách cho phép các thuộc tính
nhận giá trị là các phân bố khả năng thay vì các giá trị thuộc tính đơn. Như vậy, mỗi giá trị của
một thuộc tính có thể là một tập con mờ tương ứng với một phân bố khả năng.
Trong mô hình này, một quan hệ mờ R là một tập con của tích Đề các D1 D2 …
Dn, trong đó:
Di = { | với là một phân bố khả năng của Ai trên Di}
Như vậy, mỗi bộ của một quan hệ trong mô hình này có dạng:
t = <A1, A2,…, Ai,…, An>
với Ai là phân bố khả năng của thuộc tính Ai trên miền trị Di của nó, phân bố khả năng này
được xác định bởi Di. Có thể hiểu Ai là một tập con mờ trên Di xác định bởi hàm thuộc Ai: Di
[0, 1], x Di. Như vậy Ai(x) là khả năng x là giá trị thực sự của t[Ai]).
Đây là hướng mở rộng tổng quát hơn mô hình trên, tuy nhiên cũng đối mặt với khó khăn là
việc biểu diễn dữ liệu khá phức tạp. Dưới đây trình bày một thí dụ đơn giản về một CSDL mờ
dựa trên lý thuyết khả năng.
Với quan hệ này, mỗi bộ t đều chứa cả giá trị rõ và giá trị mờ. Chẳng hạn, với bộ t4, ta có
t4[MaMH] = 012 và t4[TenMH] = ‘Java’ là các giá trị rõ, nhưng t4[Tinchi] = {0.6/3, 0.75/4,
0.85/5} là một tập mờ trên miền trị Dom(Tinchi) = {1, 2, 3, 4, 5, 6}, tập mờ này là một phân bố
khả năng của số tín chỉ đối với môn học Java, trên miền {1, 2, 3, 4, 5, 6}. Với t4[Hocky] cũng có
nhận xét tương tự, tức là t4[Hocky] là tập mờ {0.5/5, 0.7/6, 0.9/7, 0.2/8} cũng là một phân bố khả
năng trên miền Dom(Hocky) = {1, 2, 3, 4, 5, 6, 7, 8}.
Ta có thể xây dựng quan hệ mờ về CAR (xe), với các thuộc tính TYPE (kiểu xe), COLOR
(màu sắc) và PRICE (giá), dựa trên quan hệ tương tự của miền trị COLOR.
- Quan hệ: CAR(TYPE, COLOR, PRICE)
Bảng 6.10. Quan hệ mờ CAR (TYPE, COLOR, PRICE)
STT TYPE (Kiểu) COLOR (Màu sắc) PRICE (Giá)
t1 {Xe thể thao} {Blue, Green} {rất cao}
t2 {Xe con} {Red} {vừa phải}
t3 {Xe thể thao} {Red} {cao }
t4 {Xe con} {Blue} {cao }
t5 {Xe con} {Green} {tương đối }
Trong quan hệ này, chỉ có một miền trị của thuộc tính COLOR được mở rộng thực sự:
COLOR = {{Blue, Green}, {Red}, {Blue}}. Tuy nhiên, tất cả các giá trị đơn của các thuộc tính
đều được hiểu là một tập con của mỗi miền trị, chẳng hạn {Red}, {Blue}, {Green} đều là các tập
con của COLOR, còn các tập một phần tử {rất cao}, {cao}… cũng được hiểu là các tập con của
PRICE.
Ngoài ba mô hình trên còn có hai mô hình nữa là cách tiếp cận mở rộng lý thuyết khả năng
và cách tiếp cận phối hợp tất cả 3 cách trên cũng được một số tác giả nghiên cứu như Kerre
(1988), Chen (1991), những mô hình này bạn đọc có thể tìm hiểu trong các tài liệu [1, 3].
Trong các mô hình CSDL quan hệ kinh điển, để xác định các phụ thuộc dữ liệu cần phải so
sánh hai giá trị thuộc tính xem chúng có bằng nhau hay không. Quan hệ đồng nhất i sẽ phản ánh
điều này, ta có i(x, y) = 1 nếu và chỉ nếu x = y, và i(x, y) = 0 trong trường hợp trái lại. Trong các
mô hình quan hệ mờ có sự mở rộng miền trị của các thuộc tính (chẳng hạn mô hình dựa trên
quan hệ tương tự hoặc dựa trên phân bố khả năng), ta sẽ so sánh 2 giá trị thuộc tính bằng cách đo
lường độ gần nhau giữa 2 giá trị này theo quan hệ tương tự hay theo phân bố khả năng được xác
định trên miền trị của thuộc tính đó.
Trong giáo trình này, chúng ta chỉ nghiên cứu một phụ thuộc dữ liệu phổ biến và quan
trọng nhất, đó là các phụ thuộc hàm mờ. Trong những phần dưới đây, chúng ta sẽ trình bày
những vấn đề lý thuyết liên quan đến phụ thuộc hàm, khóa và các dạng chuẩn của CSDL mờ dựa
trên quan hệ tương tự.
xd1 yd 2
C Ak t1 , t2 min min max S x, y , min max S x, y
xd 2 yd1
với d1, d2 là tập giá trị của bộ t1, t2 trên miền trị Dk ; S(x, y) là quan hệ tương tự trên miền trị Dk,
do 0 < S(x, y) < 1 nên rõ ràng là 0 < C(Ak[t1, t2]) < 1
Định nghĩa 7.2: Mức độ gần nhau của hai bộ t1 và t2 của quan hệ r đối với tập thuộc tính
X được ký hiệu và xác định như sau:
C X t1 , t2 min C Ak t1 , t2
Ak X
Chú ý 7.1.1.
- Mức độ gần nhau của hai bộ C(X[t1, t2]) là một giá trị trong khoảng [0, 1]. Với CSDL rõ
thì d1 và d2 là các giá trị duy nhất, mức độ gần nhau của hai bộ bất kỳ chỉ có thể là 0 (nếu d1 d2)
hoặc 1 (nếu d1 = d2), đây là các trường hợp riêng theo định nghĩa 7.2. Như vậy khái niệm sự gần
nhau của hai bộ trong CSDL mờ là khái niệm tổng quát hơn khái niệm sự bằng nhau của hai bộ
đối với CSDL rõ.
- Nếu C(Ak[t1, t2]) đối với quan hệ r, khi đó hai bộ t1 và t2 của quan hệ r được gọi là
gần nhau trên thuộc tính Ak (hay trên tập thuộc tính X) với mức . (với [0, 1])
Thí dụ 7.4. Cho quan hệ mờ VEHICLE (TYPE, COLOR, PRICE) trong hình 7.5, với các
quan hệ tương tự trên miền Color và Price như trong bảng 7.2 và bảng 7.3.
Hãy tính mức độ gần nhau của hai bộ t2 và t5 đối với thuộc tính PRICE và mức độ gần nhau
của 2 bộ này với tập thuộc tính X = {PRICE, COLOR}.
Bảng 7.1. Quan hệ mờ VEHICLE
VEHICLE (TYPE, COLOR, PRICE)
TYPE COLOR PRICE
t1 {sportcar} {blue, green} {very expensive}
t2 {wagon} {red} {modest, affordable}
t3 {bicycle} {green} {very cheap}
Giải:
(1) Tính mức độ gần nhau của hai bộ t2 và t5 đối với thuộc tính PRICE được xác định theo
công thức ở định nghĩa 7.1 như sau:
- Giá trị của t2 trên miền trị PRICE là: d1 = {modest, affordable} hay d1 = {M, AF}.
- Giá trị của t5 trên miền giá trị PRICE d2 = {modest} hay d2 = {M}.
C(PRICE[t2, t5]) =
= min{min{max{S(M, M)}, max{S(AF, M)}}, min{max{S(M, M), S(M, AF)}}}
= min{min{max{1}; max{0,8}}, min{max{1; 0,8} }
= min{0,8 ; 1,0}= 0,8
(2) Tính mức độ gần nhau của hai bộ t2 và t5 đối với tập thuộc tính X = {PRICE, COLOR}
được xác định theo công thức ở định nghĩa 7.2 như sau:
Ta tính mức độ gần nhau của 2 bộ t2 và t5 đối với từng thuộc tính PRICE và COLOR trong
X:
- Theo kết quả phần (1) ta đã có C(PRICE[t2, t5]) = 0,8
- Ta tính C(COLOR[t2, t5]) theo định nghĩa 7.1:
d1 = {R} là giá trị của bộ t2 trên miền trị COLOR
d2 = {R} là giá trị của bộ t5 trên miền giá trị COLOR
C(COLOR[t2, t5]) = min{min{max{S(R, R)}}, min{max{S(R, R)}}}
= min{min{max{1}}, min{max{1}}}
= min{1, 1} = 1
Thí dụ 7.5 Xét quan hệ mờ VEHICLE 1 cho ở bảng 7.4 dưới đây, với các quan hệ tương tự
trên các thuộc tính COLOR và PRICE đã cho ở hai bảng 7.2 và 7.3.
Bảng 7.4. Quan hệ mờ VIHICLE 1
VIHICLE (TYPE, COLOR, PRICE)
VIHICLE 1 TYPE COLOR PRICE
t1 {sportcar} {blue, green} {very expensive}
t2 {wagon} {red} {modest, affordable}
t3 {motorbile} {green} { modest }
Hãy kiểm tra phụ thuộc hàm mờ COLOR PRICE có thỏa quan hệ mờ 0,6
này không?
Giải: Quan hệ VIHICLE 1 gọi là thỏa phụ thuộc hàm mờ COLOR 0,6
PRICE nếu mọi
cặp bộ đều thỏa phụ thuộc hàm này. Theo định nghĩa FFD, ta cần kiểm tra điều kiện: C(Y[t1, t2])
min { , C(X[t1, t2])}, với X = {COLOR}, Y = {PRICE}, = 0.6.
- Với hai bộ t1 và t2, ta có:
t1 = <{sportcar}, {blue, green}, {very expensive}>, hay t1 = <{S}, {B, G}, {VE}>.
t2 = <{wagon}, {red}, {modest, affordable}>, hay t2 = <{W}, {R}, {M, AF}>.
Ta tính mức độ gần nhau của 2 bộ t1 và t2 đối với từng thuộc tính COLOR
và PRICE:
- Với thuộc tính COLOR
d1 = {B, G} là giá trị của bộ t1 trên miền giá trị COLOR
d2 = {R} là giá trị của bộ t2 trên miền giá trị COLOR
C(COLOR[t1, t2]) = min {min{max[s(B, R), s(G, R)]}, min{max[s(R, B), s(R, G)]}}
= min{min{max[0, 0]}, min{max[0, 0]}}
=0
6.5.3. Quy tắc suy diễn cho các phụ thuộc hàm mờ
Một khái niệm quan trọng có liên quan tới những phụ thuộc dữ liệu là các quy tắc suy diễn.
Cho một quan hệ và một tập phụ thuộc hàm, những quy tắc suy diễn là những phép sinh những
phụ thuộc hàm mới cũng thỏa quan hệ đã cho, và bởi vậy chúng có quan hệ gần gũi với định
nghĩa và ngữ nghĩa của những phụ thuộc hàm. Đối với CSDL quan hệ kinh điển, chúng ta đã biết
hệ tiên đề Armstrong là một tập các quy tắc suy diễn cho các phụ thuộc hàm.
Nhắc lại hệ tiên đề Armstrong và các quy tắc suy diễn:
Hệ tiên đề Armstrong: Cho lược đồ quan hệ R = < U, F >, với U = {A1, A2,..., An} là tập
các thuộc tính
Giả sử X, Y, Z U; ký hiệu XY thay cho XY, ta có các tiên đề sau:
(A1) Tiên đề phản xạ: Nếu Y X thì X Y
COUNTRY A P V N
Australia (A) 1 0 0 0
Philippines (P) 0 1 0 0
Venezuela (V) 0 0 1 0
Nigeria (N) 0 0 0 1
Giả sử lược đồ quan hệ có xác định một phụ thuộc hàm mờ INF 0,6
IND (có nghĩa là:
cơ sở hạ tầng của một quốc gia “ít- nhiều” xác định mức độ công nghiệp hóa của quốc gia đó).
Hãy kiểm tra xem những bộ nào có thể được chèn vào quan hệ, những bộ nào phá vỡ phụ
thuộc hàm mờ đã cho. Trình bày quan hệ cuối cùng với các bộ thỏa phụ thuộc hàm mờ
INF 0,6
IND.
Giải: ta lần lượt chèn các bộ vào r, sau mỗi lần chèn, tính độ gần nhau cho mỗi cặp bộ theo
định nghĩa 7.1 và kiểm tra r có thỏa phụ thuộc hàm mờ theo định nghĩa 7.3. Nếu quá trình chèn
thêm một bộ mà phá vỡ FFD thì loại bộ đó khỏi r.
Bước 1. Chèn bộ t1 vào quan hệ r, vì r chỉ có 1 bộ nên luôn thỏa FFD đã cho, ta có:
r COUNTRY INF IND
t1 {Australia} {normally good, excellent} {very high}
Tính mức độ gần nhau của 2 bộ t1 và t2 với thuộc tính INF và IND:
C(INF[t1, t2]) = 0,1 và C(IND[t1, t2]) = 0,25 C(IND[t1, t2]) > min {0,6, C(INF[t1, t2])}
vậy r thỏa phụ thuộc hàm INF 0,6
IND
Bước 3. Chèn bộ t3 = <{venezuela}, {adaquate, satisfactory}, {fair}> vào quan hệ r:
Bảng 7.8. Quan hệ r sau bước 3
r COUNTRY INF IND
t1 {Australia} {normally good, excellent} {very high}
t2 {Philippines} {adequate} {fair, moderate}
t3 {Venezuela} {adaquate, satisfactory} {fair}
Tính mức độ gần nhau của cặp bộ [t2, t4 ] với thuộc tính INF và với IND:
C(INF[t2, t4]) = 0,75 và C(IND[t2, t4]) = 0 C(IND[t2, t4]) < min {0,6, C(INF[t2, t4])}, như
vậy việc chèn thêm bộ t4 vào đã phá vỡ phụ thuộc hàm mờ INF 0,6
IND, vậy bộ t4 không thể
chèn vào r (Bảng 7.9) và quan hệ r sau bước 4 vẫn chỉ gồm 3 bộ như bảng 7.8.
Bước 5. Chèn bộ t5 = <{Nigeria}, {no infrastructure}, {poor}> vào quan hệ r:
Tính mức độ gần nhau của các cặp bộ [t1, t5 ], [t2, t5] và [t3, t5] với thuộc tính INF và với
thuộc tính IND:
C(INF[t1, t5]) = 0 và C(IND[t1, t5]) = 0 C(IND[t1, t5]) > min {0,6, C(INF[t1, t5])},
C(INF[t2, t5]) = 0 và C(IND[t2, t5]) = 0 C(IND[t2, t5]) > min {0,6, C(INF[t2, t5])},
C(INF[t3, t5]) = 0 và C(IND[t3, t5]) = 0 C(IND[t2, t5]) > min {0,6, C(INF[t3, t5])}.
Vậy việc thêm bộ t5 vào quan hệ r không vi phạm phụ thuộc hàm mờ INF
0,6
IND.
Vậy sau 5 bước chèn các bộ vào r, ta nhận được quan hệ r thỏa phụ thuộc hàm
INF 0,6
IND như trong bảng 7.10.
6.6.1. Khóa mờ
Giống như CSDL kinh điển, các dạng chuẩn mờ được dựa trên khái niệm phụ thuộc hàm
mờ và các khóa mờ.
Trước hết ta nhắc lại một số khái niệm về khóa trong CSDL quan hệ kinh điển:
bao đóng mới là: min{0,7 ; 0,9}= 0,7, vậy bao đóng mới có độ mạnh 0,7, ta được X+(0.7) = {A, B,
C, D}.
Với bao đóng mới, lại quay lại xét các phụ thuộc hàm, không có thêm thuộc tính nào được
kết nạp. Thuật toán kết thúc, bao đóng cuối cùng là A+(0,7) = {A, B, C, D}.
Áp dụng các bước trên, phân tách R được thành hai lược đồ quan hệ ở dạng chuẩn mờ
2NF:
R1 = {A, C} với A là khóa mờ của R1 với độ mạnh 0,9
R2 = {A, B, D} với AB là khóa mờ của R2 với độ mạnh 0,8
Hãy xây dựng các hàm thuộc để biểu diễn các tập AB ; AB và A .
1
2. Cho tập mờ A trên không gian nền X = R, xác định bởi A ( x) , x X .
1 | x 3|
Hãy xác định chiều cao của A, lõi của A.
Tìm nhát cắt A0,5 ; A0,25
c. Xét lược đồ quan hệ mờ R = {A, B, C, D} và tập các phụ thuộc hàm mờ là:
F = { AC
0,8
D, A
0,9
B }. Kiểm tra xem R có thỏa dạng chuẩn mờ thứ hai không?
d. Xét lược đồ quan hệ mờ R = {A, B, C, D}, tập phụ thuộc hàm mờ
F = { BC 0,8
D, C 0,9
A}. Xác định dạng chuẩn cao nhất của lược đồ R. Nếu R chưa ở F2NF
thì hãy tách lược đồ trên thành các lược đồ con ở dạng chuẩn F2NF.
19. a. Phát biểu định nghĩa dạng chuẩn mờ thứ ba (F3NF).
b. Cho lược đồ quan hệ mờ R = {A, B, C, D}, tập phụ thuộc hàm mờ:
F = {B
0,7
A, C
0,9
AD}. Xác định dạng chuẩn cao nhất của lược đồ R
c. Cho lược đồ quan hệ mờ R = {A, B, C, D, E}, và tập phụ thuộc hàm mờ:
F = { AB 0,9
D, AD 0,8
C, C 0,6
E}. Xác định dạng chuẩn cao nhất của lược đồ R, nếu
R chưa ở F3NF thì hãy hãy tách lược đồ trên thành các lược đồ con ở dạng chuẩn F3NF.