Mon exemple préféré est un résultat classique de 1977 d' Ashok Chandra et Philip Merlin. Ils ont montré que le problème de confinement des requêtes était décidable pour les requêtes conjonctives. Le problème de confinement des requêtes conjonctives se révèle être équivalent à décider s'il y a un homomorphisme entre les deux requêtes d'entrée. Cela reformule un problème sémantique, impliquant la quantification sur un ensemble infini, en un problème syntaxique, ne nécessitant que la vérification d'un nombre fini d'homomorphismes possibles. Le certificat d'homomorphisme est uniquement de taille linéaire et donc le problème est en NP.
Ce théorème fournit l'un des fondements de la théorie de l'optimisation des requêtes de base de données. L'idée est de transformer une requête en une autre, plus rapide. Cependant, on veut avoir l'assurance que le processus d'optimisation ne crée pas une nouvelle requête qui ne donne pas de réponses sur certaines bases de données où la requête d'origine a produit des résultats.
Formellement, une requête de base de données est une expression de la forme , où est une liste de variables libres, est une liste de variables liées, et est une formule de premier ordre avec les variables et d'une langue avec des symboles de relation. La requête peut contenir des quantificateurs existentiels et universels, la formule peut contenir la conjonction et la disjonction d'atomes relationnels, et la négation peut également apparaître. Une requête est appliquée à une instance de base de données , qui est un ensemble de relations. Le résultat est un ensemble de tuples; quand tuplex y Q ( x , y ) x y Q I t x Q ( t , y ) Q 1 Q 2 Q 1 I Q 2 Ix.Q(x,y)xyQ(x,y)xyQIt dans le résultat est remplacé par alors la formule peut être satisfaite. On peut alors comparer deux requêtes: est contenue dans si chaque fois que appliqué à une instance de base de données arbitraire produit des résultats, puis appliqué à la même instance, produit également des résultats. (C'est OK si Q 1 ne produit pas de résultats mais Q 2 le fait, mais pour le confinement, l'implication doit tenir pour chaque instance possible.) Le problème de confinement des requêtes demande: étant donné deux requêtes de base de donnéesxQ(t,y)Q1Q2Q1IQ2IQ1Q2 et Q 2 , Q 1 est-il contenu dans Q 2 ?Q1Q2Q1Q2
Il n'était pas du tout clair avant Chandra-Merlin que le problème était décidable. En utilisant uniquement la définition, il faut quantifier sur l'ensemble infini de toutes les bases de données possibles. Si les requêtes ne sont pas restreintes, alors le problème est en fait indécidable: soit une formule toujours vraie, alors Q 1 est contenue dans Q 2 si Q 2 est valide. (Il s'agit du problème Entscheidungs de Hilbert , montré indécidable par Church et Turing en 1936.)Q1Q1Q2Q2
Pour éviter l'indécidabilité, une requête conjonctive a une forme plutôt limitée: ne contient que des quantificateurs existentiels, et la négation et la disjonction ne sont pas autorisées. Donc Q est une formule existentielle positive avec seulement une conjonction d'atomes relationnels. Il s'agit d'un petit fragment de logique, mais il suffit d'exprimer une grande proportion de requêtes de base de données utiles. L' instruction classique en SQL exprime des requêtes conjonctives; la plupart des requêtes des moteurs de recherche sont des requêtes conjonctives.QQSELECT ... FROM
Q1Q2Q1Q2Q2Q1
- Ashok K. Chandra et Philip M. Merlin, Mise en œuvre optimale des requêtes conjonctives dans les bases de données relationnelles , STOC '77 77–90. doi: 10.1145 / 800105.803397
ΠP2