Les preuves relationnelles d'algèbre / calcul peuvent-elles être utilisées pour tester / vérifier SQL?

9

Est-il possible ou même possible d'utiliser l'algèbre relationnelle et / ou le calcul relationnel sous forme de preuves pour tester / vérifier l'exactitude des instructions, fonctions et procédures stockées SQL?

Il me semble que cela devrait être au moins possible, mais je ne sais pas s'il manque un détail qui rend incorrecte une correspondance 1: 1 entre la preuve et le code.

Avez-vous essayé une méthode comme celle-ci? Cela a-t-il fonctionné? Quelles ont été vos expériences?

Robert Winslow Dalpe
la source
2
Veuillez répéter après moi: SQL n'est pas relationnel.
Deer Hunter

Réponses:

4

Il existe des règles de mappage connues entre les opérateurs d'algèbre relationnelle et les instructions SQL. Par exemple, l'opérateur Sigma est mappé à une instruction SELECT, il existe un mappage un à un pour les opérateurs de jointure, Delta mappe pour sélectionner un sous-ensemble de colonnes, etc.

Est-il possible d'utiliser l'algèbre relationnelle pour vérifier l'exactitude des instructions SQL?

Oui c'est possible. Bien sûr, vous aurez besoin d'avoir un schéma clair de la base de données avec toutes les relations, les clés étrangères, etc. Dans certains cas, il est encore plus facile de manipuler les instructions d'algèbre relationnelle que les instructions SQL (il existe des règles de transformation éprouvées pour modifier et simplifier les instructions) .

Mais d'un autre côté, je ne pense pas que la vérification des instructions à l'aide de l'algèbre relationnelle soit beaucoup plus facile que de tester des instructions SQL, en particulier lorsque vous avez une base de données prête où vous pouvez exécuter les requêtes et voir les résultats.

superM
la source
1
Je voulais juste dire: les opérateurs relationnels sont mappés sur "SELECT DISTINCT" car l'algèbre relationnelle utilise des ensembles de tuples et ne peut donc pas gérer les doublons. Le sigma lui-même correspond à la clause WHERE, le pi au SELECT et ainsi de suite.
contredit le
Les opérateurs de jointure ne sont pas 1: 1, les versions SQL traitent spécialement les valeurs nulles et, de même, les prédicats ne sont pas booléens.
philipxy