Index

Related


Quantificatore Esistenziale

Fino ad ora abbiamo utilizzato query che implicavano l’utilizzo di condizioni equivalenti al quantificatore esistenziale.

Questo tipo di interrogazioni sono facili da rispondere, basta controllare in modo sequenziale (una tupla alla volta) se la tupla verifica o meno la condizione.

Quando si incontra una tuple che soddisfa le condizioni, questa viene inserita nel risultato

Esempio

Un esempio di query che utilizza il quantificatore esistenziale è:


Quantificatore Universale

Le condizioni delle query possono anche richiedere la valutazione di gruppi interi di tuple prima di decidere se inserirerle o meno nel risultato.

In questo caso la condizione equivale a valutare il quantificatore universale:

Esempio

Un esempio di query che utilizza il quantificatore universale è:

Negazione dell'operatore universale

La negazione di “per ogni” non è “per nessuno” ma:

Ovvero: La negazione di TUTTI non è NESSUN ma NON TUTTI (almeno uno)


Risoluzione di Query con Operatore Universale

Risolvere delle query con operatore universale può essere meno intuitivo rispetto a risolvere query con operatore universale.

Infatti prima di poter scegliere se inserire o no una tupla nel risultato dobbiamo valutare tutte le altre tuple.

Il problema è che non esiste un operatore che prima di inserire una tupla nel risultato controlla tutte quelli precedenti.

Soluzione

Visto che non c’è un operazione immediato dobbiamo risolvere il problema in più passaggi

  1. Eseguiamo la query con la condizione negata
  2. Troviamo gli oggetti che ALMENO una volta soddisfano la condizione CONTRARIA
  3. Eliminiamo gli oggetti ottenuti nel passaggio 2 dalla risposta con l’operatore di differenza