Ví dụ yêu thích của tôi là kết quả kinh điển năm 1977 của Ashok Chandra và Philip Merlin. Họ đã chỉ ra rằng vấn đề ngăn chặn truy vấn là có thể quyết định đối với các truy vấn kết hợp. Vấn đề ngăn chặn truy vấn kết hợp hóa ra tương đương với việc quyết định xem có sự đồng hình giữa hai truy vấn đầu vào hay không. Điều này định nghĩa lại một vấn đề ngữ nghĩa, liên quan đến định lượng trên một tập hợp vô hạn, thành một cú pháp, chỉ yêu cầu kiểm tra một số hữu hạn các cấu trúc đồng nhất có thể. Chứng chỉ đồng hình chỉ có kích thước tuyến tính và do đó, vấn đề nằm ở NP.
Định lý này cung cấp một trong những nền tảng của lý thuyết tối ưu hóa truy vấn cơ sở dữ liệu. Ý tưởng là để chuyển đổi một truy vấn thành một truy vấn khác, nhanh hơn. Tuy nhiên, người ta muốn đảm bảo rằng quy trình tối ưu hóa không tạo ra một truy vấn mới mà không đưa ra câu trả lời trên một số cơ sở dữ liệu nơi truy vấn ban đầu đã tạo ra kết quả.
Chính thức, một truy vấn cơ sở dữ liệu là một biểu thức có dạng , trong đó x là danh sách các biến tự do, y là danh sách các biến bị ràng buộc và Q ( x , y ) là công thức bậc nhất với các biến x và y của ngôn ngữ có ký hiệu quan hệ. Truy vấn Q có thể chứa các bộ lượng tử tồn tại và phổ quát, công thức có thể chứa kết hợp và phân tách các nguyên tử quan hệ và phủ định cũng có thể xuất hiện. Một truy vấn được áp dụng cho một cơ sở dữ liệu Ix.Q(x,y)xyQ(x,y)xyQI, đó là một tập hợp các mối quan hệ. Kết quả là một bộ các bộ dữ liệu; khi tuple trong kết quả được thay thế cho x thì công thức Q ( t , y ) có thể được thỏa mãn. Sau đó, người ta có thể so sánh hai truy vấn: Q 1 được chứa trong Q 2 nếu bất cứ khi nào Q 1 áp dụng cho một trường hợp cơ sở dữ liệu tùy ý tôi tạo ra một số kết quả, thì Q 2 được áp dụng cho cùng một trường hợp tôi cũng tạo ra một số kết quả. (Sẽ ổn nếu Q 1 không tạo ra kết quả nhưng Q 2txQ(t,y)Q1Q2Q1IQ2IQ1Q2không, nhưng để ngăn chặn, hàm ý phải giữ cho mọi trường hợp có thể xảy ra.) Vấn đề ngăn chặn truy vấn hỏi: đưa ra hai truy vấn cơ sở dữ liệu và Q 2 , có phải Q 1 có trong Q 2 không?Q1Q2Q1Q2
Không rõ ràng trước Chandra-Merlin rằng vấn đề là có thể quyết định được. Chỉ sử dụng định nghĩa, người ta phải định lượng qua tập hợp vô hạn của tất cả các cơ sở dữ liệu có thể. Nếu các truy vấn không bị hạn chế, thì thực tế, vấn đề là không thể giải quyết được: hãy để là một công thức luôn luôn đúng, thì Q 1 được chứa trong Q 2 iff Q 2 là hợp lệ. (Đây là Entscheidungspropet của Hilbert , được hiển thị không thể giải quyết được bởi Church và Turing năm 1936.)Q1Q1Q2Q2
Để tránh tính không ổn định, truy vấn kết hợp có dạng khá hạn chế: chỉ chứa các bộ lượng tử tồn tại, không được phép phủ định và phân biệt. Vì vậy, Q là một công thức tồn tại tích cực chỉ với sự kết hợp của các nguyên tử quan hệ. Đây là một đoạn logic nhỏ, nhưng nó đủ để thể hiện một tỷ lệ lớn các truy vấn cơ sở dữ liệu hữu ích. Câu lệnh cổ điển trong SQL diễn tả các truy vấn kết hợp; hầu hết các truy vấn công cụ tìm kiếm là truy vấn kết hợp.QQSELECT ... FROM
Người ta có thể định nghĩa đồng cấu giữa các truy vấn theo cách đơn giản (tương tự như đồng cấu đồ thị, với một chút ghi sổ kế toán bổ sung). Định lý Chandra-Merlin nói: đưa ra hai truy vấn kết hợp và Q 2 , Q 1 được chứa trong Q 2 iff có một phép đồng hình truy vấn từ Q 2 đến Q 1 . Điều này thiết lập tư cách thành viên trong NP, và thật đơn giản để chỉ ra rằng đây cũng là NP-hard.Q1Q2Q1Q2Q2Q1
- Ashok K. Chandra và Philip M. Merlin, Thực hiện tối ưu các truy vấn kết hợp trong các cơ sở dữ liệu quan hệ , STOC '77 77 Đố90. doi: 10.1145 / 800105.803397
Khả năng quyết định ngăn chặn truy vấn sau đó đã được mở rộng thành các hiệp hội truy vấn kết hợp (truy vấn tích cực tồn tại khi cho phép phân tách), mặc dù việc cho phép phân tách làm tăng độ phức tạp lên - hoàn thành. Các kết quả có thể quyết định và không thể xác định cũng đã được thiết lập cho một hình thức ngăn chặn truy vấn tổng quát hơn , liên quan đến việc định giá theo ngữ nghĩa xảy ra khi đếm số lượng câu trả lời, khi kết hợp các chú thích trong xuất xứ hoặc khi kết hợp các kết quả truy vấn trong cơ sở dữ liệu xác suất.ΠP2