- Bài trước: Logic bậc nhất và truy vấn hội
- Bài sau: Thuật toán Yannakakis
Bài trước lược khảo các khái niệm và kết quả của logic bậc nhất và định nghĩa truy vấn hội (conjunctive queries). Một cách vắn tắt, lớp các truy vấn hội là lớp các truy vấn có dạng
trong đó là các biến tự do,
là các biến bị giới hạn, và
là các công thức nguyên tử (atomic formula). Các truy vấn hội tương đương với các phát biểu SQL dạng
select ... from ... where ... mà phần where là hội của các đẳng thức đơn giản. Một cách đơn giản khác để biểu diễn các truy vấn hội là dùng ngôn ngữ datalog: các truy vấn hội biểu diễn bằng datalog có thể viết dưới dạng
trong đó các biến tự do nằm trong phần “đầu” (head) của truy vấn datalog , và
là các nguyên tử (atom) trong phần “thân” (body) của truy vấn. Đa số các truy vấn vào CSDL hiện nay là truy vấn hội, cho nên lớp các truy vấn hội là lớp các truy vấn cực kỳ quan trọng cả về mặt thực tế lẫn lý thuyết.
1. Độ phức tạp của định trị truy vấn hội
Định nghĩa 1 (CQ và BCQ) Bài toán định trị truy vấn hội là bài toán sau đây: cho một cấu trúc
của bộ từ vựng quan hệ
, và một truy vấn hội
, liệt kê tất cả các bộ
sao cho
.
Trường hợp đặc biệt khi
thì
được gọi là truy vấn hội có/không (Boolean conjunctive query). Câu trả lời của một truy vấn hội có/không là có hoặc không: có nếu tồn tại
sao cho
và không nếu điều ngược lại xảy ra.
Để phân biệt trường hợp
và
, ta gọi bài toán cho trường hợp
là bài toán định trị truy vấn hội có/không (Boolean conjunctive query problem, viết tắt là bài toán BCQ), và bài toán cho trường hợp
là bài toán CQ.
Thông thường, trong phân tích độ phức tạp của một bài toán ta trước hết giới hạn bài toán về một phiên bản có/không nào đó (decision version) để tránh ảnh hưởng của kích thước output đến kết quả độ phức tạp. Do đó, đầu tiên ta sẽ xét độ phức tạp của bài toán BCQ. Ngoài bài toán BCQ còn hai bài toán nữa cũng đều rất quan trọng trong CSDL.
Định nghĩa 2 (CQE) Cho hai truy vấn hội
và
, hỏi chúng có tương đương với nhau không? Nghĩa là, có phải là
với mọi cấu trúc
hay không? Bài toán này gọi là bài toán truy vấn hội tương đương (Conjunctive Query Equivalence — viết tắt là CQE).
Tầm quan trọng của bài toán này trong CSDL có lẽ là hiển nhiên; ví dụ một trong những cách tối ưu hoá việc xử lý truy vấn là ta tìm một truy vấn tương đương sao cho định trị nó tốn ít thời gian hơn truy vấn cần định trị.
Định nghĩa 3 (CQC) Cho hai truy vấn hội
và
, bài toán truy vấn hội chứa trong nhau (Conjunctive Query Containment — CQC) hỏi có phải
với mọi cấu trúc
hay không. Nếu
và
là các truy vấn hội có/không thì câu hỏi là có phải
với mọi cấu trúc
hay không?
May mà ta chỉ cần giải quyết một trong ba bài toán BCQ, CQE, và CQC là đủ, tại vì chúng tương đương với nhau. Trước hết, nếu và chỉ nếu
và
. Kế đến,
nếu và chỉ nếu
. Do đó, CQC và CQE là tương đương.
Từ năm 1977, một bài báo kinh điển của Chandra và Merlin (STOC) đã chứng minh rằng bài toán BCQ là NP-đầy đủ, và rằng cả BCQ và CQC đều tương đương với một bài toán khác gọi là bài toán đồng cấu (Homomorphism problem). Ta sẽ định nghĩa bài toán đồng cấu và chứng minh định lý Chandra-Merlin dưới đây.
Lớp các truy vấn hội là tập con của lớp các truy vấn bậc nhất (FO queries), có thể biểu diễn bằng phép tính quan hệ (relational calculus). Từ bài báo của Codd năm 1972 (“Relational Completeness of Data Base Sublanguages”) ta đã biết là lớp các truy vấn bậc nhất tương đương với lớp các truy vấn biểu diển bằng đại số quan hệ (relational algebra). Và, độ phức tạp của chúng là PSPACE-đầy đủ. Do đó, giả sử (hầu hết các nhà lý thuyết đều tin là giả thiết này đúng nhưng chưa chứng minh được), thì ngôn ngữ của các truy vấn bậc nhất và đại số quan hệ hùng mạnh hơn hẳn ngôn ngữ của các truy vấn hội.
Nếu ta xét các truy vấn bậc nhất hoặc các truy vấn của đại số quan hệ thì bài toán truy vấn tương đương là không quyết định được (undecidable). Tại vì, câu hỏi liệu hay không, theo định lý Traktenbrots đã là không quyết định được. (Xem thêm bài trước.)
2. Độ phức tạp biểu thức và độ phức tạp dữ liệu của các truy vấn
Chứng minh rằng bài toán BCQ là NP-khó không phức tạp gì mấy. Ví dụ, ta có thể chuyển giản (reduce) từ bài toán tô 3 màu về bài toán BCQ như sau. Gọi là một đồ thị đơn bất kỳ. Ta xây dựng một cấu trúc
trên miền
với chỉ một quan hệ
Truy vấn hội của ta gồm biến, mỗi đỉnh
của
là một biến. Câu hỏi là
Dễ thấy rằng truy vấn này có câu trả lời có nếu và chỉ nếu đồ thị tô được bằng 3 màu. Bài toán tô 3 màu là bài toán NP-khó, vì thế bài toán BCQ là NP-khó.
Có một điểm hơi khó chịu ở phép chuyển giản trên: cái CSDL (cấu trúc ) rất nhỏ; độ phức tạp của phép truy vấn nằm hoàn toàn ở bản thân phép truy vấn chứ không phụ thuộc vào kích thước của CSDL. Trên thực tế, đa số các phép truy vấn vào CSDL có kích thước nhỏ hơn bản thân CSDL rất nhiều. Ví dụ, một truy vấn SQL có kích thước cùng lắm là vài trăm bytes, còn CSDL thì có thể cả nghìn GB.
Năm 1982, Vardi (STOC) đề xuất rằng ta phải tách biệt độ phức tạp truy vấn và độ phức tạp dữ liệu của một phép truy vấn vào CSDL. Khi xét độ phức tạp truy vấn thì ta giả sử kích thước của CSDL là cố định. Khi xét độ phức tạp dữ liệu thì ta giả sử kích thước phép truy vấn là cố định. Động cơ thực tế là, nếu ta truy vấn vào CSDL dân số, 10 năm làm một lần, thì CSDL là cố định. Nếu ta truy vấn vào CSDL giá cả chứng khoán thì có khả năng là một truy vấn được lập lại nhiều lần trong khi dữ liệu lại thay đổi nhanh. Ngoài ra, do độ phức tạp truy vấn phụ thuộc rất nhiều vào cách mà ta mã hoá cái truy vấn. Ví dụ, truy vấn có kích thước lớn hơn truy vấn
rất nhiều. Do đó, Vardi đề nghị đổi độ phức tạp truy vấn thành độ phức tạp biểu thức (expression complexity) của một truy vấn.
Nếu chỉ dùng phép chuyển giản từ bài toán tô 3 màu ở trên thì rõ ràng là độ phức tạp biểu thức của bài toán BCQ là NP-khó, nhưng phép chuyển giản không chứng minh được rằng độ phức tạp dữ liệu của bài toán BCQ là NP-khó. Thậm chí, Vardi chứng minh rằng độ phức tạp dữ liệu của BCQ nằm trong LOGSPACE (nhớ rằng ), do đó bài toán thuộc lớp P nếu ta giả sử kích thước của truy vấn là hằng số. Còn độ phức tạp dữ liệu của các truy vấn bậc nhất là LOGSPACE-đầy đủ.
Gần đây hơn một chút, năm 1995, Vardi cũng quan sát rằng nếu ta chỉ dùng tổng số biến của truy vấn để đo độ phức tạp thì kết quả khác đi một chút. Ta sẽ quay lại với loại độ phức tạp này sau, khi nào có dịp.
3. Độ phức tạp tham số của các truy vấn
Tất nhiên, giả thiết rằng biểu thức của truy vấn có kích thước cố định cũng không thực tế. Với một truy vấn kích thước vào CSDL
thì một thuật toán chạy trong thời gian
vẫn là thuật toán không khả thi. Năm 1997, Papadimitriou và Yannakakis phân tích độ phức tạp tham số (parameterized complexity) của các truy vấn. Bài báo này được giải thưởng bài báo tốt nhất của hội nghị PODS 1997. Động cơ của việc xét độ phức tạp tham số rất đơn giản: như đã nêu, một thuật toán chạy trong thời gian
rõ ràng là không tốt bằng thuật toán chạy trong thời gian
với
là một hằng số nào đó, kể cả khi ta xem kích thước của truy vấn
là cố định.
Để hiểu rõ độ phức tạp tham số, ta có thể tham khảo Parameterized Complexity của Downey và Fellows, hoặc quyển Parameterized Complexity Theory của Jörg Flum. Xem thêm trang này.
Đại khái, xét bài toán -Clique: cho một đồ thị
, hỏi
có một clique với kích thước
hay không. Bài toán này tất nhiên là giải được trong thời gian
và do đó nếu
là một hằng số thì nó nằm trong lớp P. Tuy nhiên, cũng như trên một thuật toán giải
-clique trong thời gian
với
là một hằng số nào đó và
là một hàm tính được vẫn có thể nhanh hơn thuật toán chạy trong thời gian
nhiều. Một bài toán với tham số
giải được trong thời gian
với một hằng số
được gọi là bài toán khả thi tham số cố định (fixed parameter tractable — FPT). Lưu ý rằng FPT không phải là Food Processing Technologies.
Rõ ràng là, kể cả ở bên ngoài ngữ cảnh của các truy vấn trong CSDL thì việc phân lớp xem bài toán nào thuộc lớp FPT và bài toán nào không là một vấn đề rất quan trọng trong lý thuyết độ phức tạp nói chung. Downey và Fellows giới thiệu một hệ thống cấp bậc (hierarchy) của các lớp bài toán tham số, gọi là \em hệ thống cấp bậc gồm các lớp
Càng lên cao trên hệ thống cấp bậc này thì càng ít khả năng là bài toán thuộc lớp FPT.
Papadimitriou và Yannakakis chứng minh rằng BCQ là -đầy đủ, và lớp các truy vấn bậc nhất là
-đầy đủ với mọi
.
-đầy đủ tương tự như NP-đầy đủ của thế giới các bài toán tham số. Do đó, rất khó có khả năng là tồn tại một thuật toán cho bài BCQ với thời gian chạy
với một hằng số
và hàm tính được
bất kỳ!
4. Bài toán đồng cấu
Xét hai cấu trúc và
trên cùng một bộ từ vựng
. Trong đó, miền của
là tập
và của
là tập
. Một hàm số
được gọi là một đồng cấu (homomorphism) từ
vào
nếu và chỉ nếu, với mọi bộ
và mọi ký hiệu quan hệ
bậc
của
, ta có
Cho một cấu trúc tuỳ ý, định nghĩa truy vấn chuẩn (cannonical query) của
là truy vấn có/không
mà trong đó mỗi thành viên
được xem là một biến số, và nếu
thì ta có một nguyên tử
với các biến
nằm trong phần thân của truy vấn
.
Ví dụ, xét cấu trúc đồ thị với
và
, thì truy vấn chuẩn
là truy vấn có/không
Ngược lại, xét một truy vấn hội có/không với tập biến
và các “conjunct”
, thì ta có thể xây dựng một cấu trúc chuẩn
với miền
và các quan hệ
. Ví dụ, giả sử
thì cấu trúc chuẩn
.
Năm 1977, Chandra và Merlin chứng minh định lý sau đây. Từ định lý và bài tập sau định lý ta thấy rằng bài toán đồng cấu và bài toán CQC là tương đương nhau.
Định lý 4 Cho hai cấu trúc
trên cùng bộ từ vựng
. Ba điều sau đây là tương đương nhau:
- Tồn tại một phép đồng cấu
từ
vào
![]()
, nghĩa là nếu ta truy vấn CSDL
với câu hỏi
thì câu trả lời là có!
![]()
Chứng minh: Trước hết ta chứng minh (1) và (2) là tương đương. Giả sử tồn tại một phép đồng cấu từ
vào
. Ta phải chứng minh rằng truy vấn
vào CSDL
cho câu trả lời là có. Truy vấn này cho câu trả lời có nếu và chỉ nếu có một ánh xạ
từ tập
các biến của truy vấn vào tập miền
của CSDL (hay cấu trúc)
sao cho, với mọi conjunct
của
ta có
. Nhưng đây chính là định nghĩa của phép đồng cấu từ
vào
. Chiều ngược lại cũng rõ ràng là đúng. Nói tóm lại, phát biểu (2) chẳng qua là một cách khác để nói phát biểu (1).
Bây giờ giả sử (1) đúng, ta chứng minh (3). Gọi là một cấu trúc bất kỳ, ta phải chứng minh rằng nếu câu trả lời cho truy vấn
là có thì câu trả lời cho
cũng là có. Khi câu trả lời cho
là có thì tồn tại một ánh xạ
sao cho
nếu và chỉ nếu
. Bây giờ xét ánh xạ
. Giả sử
, thì do
là phép đồng cấu ta có
, và do đó
. Tóm lại nếu
thì
.
Ngược lại, giả sử . Xét CSDL
. Rõ ràng là
dùng phép gán “biến”
sang phần tử
của CSDL. Do đó
.
Bài tập 1 Cho hai truy vấn hội
và
. Chứng minh rằng ba điều sau đây là tương đương nhau:
![]()
- Tồn tại mội phép đồng cấu từ
vào
![]()
, nghĩa là truy vấn
vào CSDL
thì câu trả lời là có!.
Ví dụ, cho một (cấu trúc) đồ thị trên bộ từ vựng
. Nếu tồn tại một phép đồng cấu từ
vào cấu trúc đồ thị
thì đồ thị
có thể tô được bằng ba màu! Ví dụ này cho thấy sức mạnh biểu diễn của phép đồng cấu, và nó cũng cho thấy bài toán tính xem có tồn tại phép đồng cấu giữa hai cấu trúc cho trước hay không là bài toán NP-khó.
Sau này, ở hội nghị PODS 1998, Kolaitis và Vardi chứng minh rằng các bài toán đồng cấu, BCQ, CQC, CQE, đều tương đương với bài toán thoả mãn ràng buộc (constraint satisfaction problem — CSP). Điều này cho thấy các bài toán CSDL ta đã thảo luận thuộc về một lớp các bài toán cực kỳ quan trọng trong KHMT nói chung. Ngoài ra, năm 2004 McMahan et al. dùng các kỹ thuật sẵn có giải quyết cái bài toán CSPs để định trị các truy vấn giao với một số kết quả khả quan.
