Le prove di algebra / calcolo relazionali possono essere utilizzate per testare / verificare SQL?


9

È possibile o addirittura possibile utilizzare l'algebra relazionale e / o il calcolo relazionale sotto forma di prove per testare / verificare la correttezza di istruzioni, funzioni e stored procedure SQL?

Mi sembra che dovrebbe essere almeno possibile, ma non so se manchi un dettaglio che rende errato un mapping 1: 1 tra la prova e il codice.

Qualcuno di voi ha provato un metodo come questo? Ha funzionato? Come sono state le tue esperienze?


2
Per favore ripeti dopo di me: SQL non è relazionale.
Deer Hunter,

Risposte:


4

Esistono alcune regole di mappatura note tra operatori di algebra relazionale e istruzioni SQL. Ad esempio, l'operatore Sigma esegue il mapping a un'istruzione SELECT, esiste un mapping uno-a-uno per gli operatori di join, mappe Delta per la selezione di un sottoinsieme di colonne, ecc.

È possibile utilizzare l'algebra relazionale per verificare la correttezza delle istruzioni SQL?

Sì, è possibile. Ovviamente dovrai avere uno schema chiaro del database con tutte le relazioni, le chiavi esterne, ecc. In alcuni casi è ancora più semplice manipolare le istruzioni di algebra relazionale rispetto alle istruzioni di SQL (ci sono regole di trasformazione comprovate per modificare e semplificare le istruzioni) .

D'altra parte, non credo che la verifica delle istruzioni utilizzando l'algebra relazionale sia molto più semplice rispetto al test delle istruzioni SQL, soprattutto quando si dispone di un database pronto in cui è possibile eseguire le query e vedere i risultati.


1
Volevo solo dire: gli operatori relazionali si associano a "SELEZIONA DISTINCT" poiché l'algebra relazionale utilizza insiemi di tuple e quindi non è in grado di gestire i duplicati. Il sigma stesso corrisponde alla clausola WHERE, il pi al SELECT e così via.
contraddetto il

Gli operatori di join non sono 1: 1, le versioni SQL trattano in modo speciale i null e allo stesso modo i predicati non sono booleani.
philipxy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.