SQL is PURE LOGIC

L'amico Itzik ama sempre ripeterlo: "SQL is Pure Logic". Ovviamente non sbaglia :-)

Una buona dimonstrazione è visibile sul forum di UGISS a questo indirizzo:

http://community.ugiss.org/forums/t/927.aspx

Il problema può sembrare complesso e richiedere necessariamente una risoluzione row-by-row. In pratica decidendo di procedere row-by-row ci accontentiamo di un "Brute Force Attack". Se per un attimo però spegnamo il computer e disegnamo su un foglio gli insiemi di dati con cui abbiamo a che fare e le regole che di dobbiamo applicare sopra possiamo scoprire che un algortimo risolutivo esiste. In realtà il più delle volte esiste e lo sappiamo già in quanto insito nelle regole di business che ci vengono date dal commitente o dall'analisi funzionale, però sembra difficile applicarle in pratica.

Dobbiamo ricordarci che il modello relazionale è stato pensato apposta per poter applicare gli algortimi logici necessari per applicare certe regole di business in modo dichiarativo, quindi è sicuramente possibile (nel 99% dei casi) evitare un'approcio row-by-row ed applicare l'algortimo cosi come lo abbiamo definito nella nostra mente.

Quindi tenete sempre presente che SQL è PURA LOGICA e come tale una volta che avete trovato l'algortimo che vi risolve i problemi...dove solo applicarlo.

Non fermativi a valutare soltanto la soluzione apparentemente più semplice ma meno performante in assoluto, ossia l'approcio row-by-row con cicli o cursori!

Published mercoledì 5 dicembre 2007 15.28 by dmauri
Filed under: ,

Comments

# re: SQL is PURE LOGIC

venerdì 7 dicembre 2007 10.42 by AlessandroD

Basta che la pura logica non porti a soluzioni perfette e performanti di cui però solo pochi al mondo ne capiscono il funzionamento... :-)

Nel senso che, a soluzione creata, ci deve essere un bel lavoro di documentazione sopra (e mi riferisco ai commenti dentro il T-SQL) per renderla capibile anche agli stessi autori a distanza di tempo.

E altra cosa, soluzioni eleganti ma complesse da un punto di vista logico, possono anche essere difficilmente debuggabili rispetto al classico ciclo passo-passo fatto tramite cursori.

A questo proposito sarebbe bello se, durante la risoluzione di una query, si potesse attivare su SQL una modalità di debug per poter ispezionare i suoi resulset intermedi per verificare che sta succedendo, non tanto per scovare bachi sul piano di esecuzione in se, ma quanto per capire come mai non si ottiene il risulato finale che noi vogliamo avere ma che invece non esce, non so se mi spiego.... una specie di debugger orientato ai DB...

# re: SQL is PURE LOGIC

venerdì 7 dicembre 2007 11.42 by dmauri

>E altra cosa, soluzioni eleganti ma complesse da un punto di vista logico, possono anche essere difficilmente debuggabili rispetto al classico ciclo passo-passo fatto tramite cursori.

mmmm....ma scusa, se T-SQL è l'implementazione dell'algortimo in modo dichiarativo quello che tu stai chiedendo è un debbuger dell'algortimo! Ergo l'algortimo che stai cercando di applicare non è chiaro nella tua mente e quindi è bene - come scrivevo - spegnere il computer e fare tutto usando semplicemente un foglio di carta e la propria mente per verificare che l'algortimo funzioni.

# re: SQL is PURE LOGIC

venerdì 7 dicembre 2007 11.58 by AlessandroD

A me personalmente gli algoritmi si chiariscono mentre lavoro sui dati e vedo che succede.

Quindi volendo lavorare per dataset sarebbe bello avere un modo più agevole rispetto ad ora per vedere che succede sui dati, visto che di fatto non si possono mettere break-point o print nelle strutture dati interne che SQL crea per risolvere le query. Tocca star li a spezzare la query per affrontarla pezzo per pezzo fino a capire qual'è il punto che logicamente non tiene.

Se tu sei capace di simulare su carta i vari casi per produrre da subito un algoritmo che tiene, tanto di cappello!