我最喜欢的例子是1977年Ashok Chandra和Philip Merlin 的经典作品。他们表明查询约束问题对于联合查询是可决定的。联合查询包含问题证明等同于确定两个输入查询之间是否存在同构。这将一个语义问题重新定义为一个语法问题,该语义问题涉及将无限集合上的量化量化为一个句法问题,只需要检查有限数量的可能同态即可。同态证书仅具有线性大小,因此问题出在NP。
该定理提供了数据库查询优化理论的基础之一。这个想法是将查询转换为另一个更快的查询。但是,需要确保优化过程不会创建新查询,而该查询无法在某些原始查询确实产生结果的数据库上给出答案。
形式上,数据库查询是形式的表达式,其中是自由变量列表,是绑定变量的列表,而是一阶公式,其语言变量和具有关系符号。查询可能包含存在量词和通用量词,公式可能包含关系原子的合取和分合,并且还可能出现负数。将查询应用于数据库实例,它是一组关系。结果是一组元组。当元组x y Q (x,y)x y Q I t x Q (t,y)Q 1 Q 2 Q 1 I Q 2 I Q 1 Q 2 Q 1 Q 2 Q 1 Q 2x.Q(x,y)xyQ(x,y)xyQIt替换为则可以满足公式。然后可以比较两个疑问:包含在如果每当应用于任意数据库实例产生了一定的效果,然后应用到同一个实例也产生了一定的成果。(如果不产生结果但产生结果,可以,但是对于包含,隐含必须包含在每个可能的实例中。)查询包含问题询问:给定两个数据库查询xQ(t,y)Q1Q2Q1IQ2IQ1Q2Q1和,包含在?Q2Q1Q2
在钱德拉-梅林面前还不清楚这个问题是可以决定的。仅使用定义,就必须量化所有可能数据库的无限集合。如果查询不受限制,那么问题实际上是:让为始终为真的公式,则包含在如果有效)。(这是希尔伯特的Entscheidungsproblem问题,由Church和Turing在1936年确定无法确定。)Q 1 Q 2 Q 2Q1Q1Q2Q2
为了避免不确定性,联合查询的形式相当有限:仅包含存在量词,并且不允许取反和析取。因此,是一个只有关系原子的合取的正存在公式。这只是逻辑的一小部分,但足以表达大部分有用的数据库查询。SQL中的经典语句表示联合查询。大多数搜索引擎查询是联合查询。QQQSELECT ... FROM
可以以一种直接的方式定义查询之间的同构(类似于图同构,需要额外的簿记)。Chandra-Merlin定理说:给定两个联合查询和,如果存在从到的查询同态,则包含在。这建立了NP的成员资格,并且很容易证明这也是NP困难的。Q1Q2Q1Q2Q2Q1
查询容确定性后来扩展到了合并查询的并集(允许分离的现有肯定查询),尽管允许分离将复杂性提高到 -complete。还针对更普遍形式的查询包含建立了可判定性和不可判定性结果,涉及在计算答案数量,在来源中组合注释或在概率数据库中组合查询结果时发生的半环评估。ΠP2