Können relationale Algebra- / Kalkülbeweise zum Testen / Verifizieren von SQL verwendet werden?

9

Ist es möglich oder sogar möglich, relationale Algebra und / oder relationale Berechnungen in Form von Beweisen zu verwenden, um die Richtigkeit von SQL-Anweisungen, -Funktionen und gespeicherten Prozeduren zu testen / zu verifizieren?

Es scheint mir, dass es zumindest möglich sein sollte, aber ich weiß nicht, ob mir ein Detail fehlt, das eine 1: 1-Zuordnung zwischen dem Beweis und dem Code falsch macht.

Hat jemand von euch eine solche Methode ausprobiert? Hat es funktioniert? Wie waren deine Erfahrungen?

Robert Winslow Dalpe
quelle
2
Bitte wiederholen Sie nach mir: SQL ist nicht relational.
Deer Hunter

Antworten:

4

Es sind einige Zuordnungsregeln zwischen relationalen Algebraoperatoren und SQL-Anweisungen bekannt. Beispielsweise ordnet der Sigma-Operator einer SELECT-Anweisung zu, es gibt eine Eins-zu-Eins-Zuordnung für die Join-Operatoren, Delta-Zuordnungen zur Auswahl einer Teilmenge von Spalten usw.

Ist es möglich, relationale Algebra zu verwenden, um die Richtigkeit von SQL-Anweisungen zu überprüfen?

Ja, es ist möglich. Natürlich benötigen Sie ein klares Schema der Datenbank mit allen Beziehungen, Fremdschlüsseln usw. In einigen Fällen ist es sogar einfacher, relationale Algebra-Anweisungen zu manipulieren als SQL-Anweisungen (es gibt bewährte Transformationsregeln zum Ändern und Vereinfachen von Anweisungen). .

Andererseits denke ich nicht, dass das Überprüfen von Anweisungen mithilfe der relationalen Algebra viel einfacher ist als das Testen von SQL-Anweisungen, insbesondere wenn Sie eine Datenbank bereit haben, in der Sie die Abfragen ausführen und die Ergebnisse anzeigen können.

superM
quelle
1
Ich wollte nur sagen: Relationale Operatoren werden "SELECT DISTINCT" zugeordnet, da die relationale Algebra Sätze von Tupeln verwendet und daher keine Duplikate verarbeiten kann. Das Sigma selbst entspricht der WHERE-Klausel, das pi dem SELECT und so weiter.
widersprach
Die Join-Operatoren sind nicht 1: 1, die SQL-Versionen behandeln Nullen speziell und Prädikate sind ebenfalls nicht boolesch.
Philipip