2010-04-17 5 views
7

Potresti elencare alcune delle cattive pratiche in SQL, che fanno le persone alle prime armi?Odori con codice SQL

Ho trovato l'uso di "WHILE loop" in scenari che potrebbero essere risolti usando le operazioni set.

Un altro esempio è l'inserimento di dati solo se non esiste. Questo può essere ottenuto usando LEFT OUTER JOIN. Alcune persone scelgono "IF"

Altri pensieri?

Edit: Quello che sto cercando è scenari specifici (come indicato nella domanda), che potrebbe essere raggiunto utilizzando SQL senza usare costrutti procedurali

Grazie

Lijo

+3

Questo dovrebbe (almeno) essere comunità wiki –

+0

notare che un "ciclo while" non è strettamente SQL - è un costrutto in alcune lingue di estensione procedurali. – mkj

+0

@mkj - Sono d'accordo con il tuo punto. Anche la mia domanda è la stessa.Quello che sto cercando sono gli scenari specifici (come menzionato nella mia domanda) che potrebbero essere raggiunti usando SQL senza usare costrutti procedurali. – Lijo

risposta

8

Ecco alcune ho visto:

  • Utilizzo di cursori anziché operazioni di set equivalente (e più veloce) (join ecc.).
  • SQL dinamico per tutto.
  • Codice aperto agli attacchi SQL Injection.
  • Unioni esterne complete anche quando non sono necessarie.
  • Procedure memorizzate enormi (centinaia/migliaia di righe).
  • Nessun commento.
+0

(n) Hibernate esegue join esterni per impostazione predefinita -_- –

+0

Considererei l'inserimento di null come odore di codice per la progettazione dello schema. Se devi controllare tutto per null tutto il tempo, il tuo codice può diventare piuttosto brutto e difficile da seguire. – Stuporman

2

Personalmente per me: tutto ciò che non è un inserto pianura, UPDATE, DELETE o SELECT

Non mi piace la logica in SQL.

+2

Questo è ironico, dato che SQL è basato sulla logica dei predicati. Forse dovresti qualificare questa affermazione (intendevi dire "No cursors" o qualcosa del genere?). –

+0

Immagino che non abbiate lavorato con dataset di grandi dimensioni in un ambiente aziendale. Non che sia completamente in disaccordo, ma a volte è la soluzione migliore. –

+1

Penso che la logica all'interno di SQL sia inevitabile quando si lavora con Reporting. – Lijo

1

Il mio più grande manzo qui è sicuramente SQL ripetitivo. Ad esempio, più stored procedure che eseguono lo stesso identico join ma diversi filtri.

Uso delle viste in questi casi possono rendere la vostra base di dati molto più facile da guardare e lavorare con

+0

Potresti per favore dare un esempio che può essere raggiunto usando query ripetitive, se stiamo usando Stored Proecure? [Lo stesso può essere ottenuto senza ripetizione se usato VIEWS] – Lijo

4

Posizionamento ODBC o SQL dinamico le chiamate in tutto il codice.

Spesso è meglio definire un livello di astrazione dati che fornisce l'accesso ai database. Tutto il codice SQL può nascondersi in quel livello. Ciò evita spesso la replica di query simili e rende più semplice la modifica dei modelli di dati .

0
  1. Creazione di SQL specifico del fornitore, in caso di SQL generico.

  2. Creazione di tabelle dinamicamente in fase di esecuzione (diverse dalle tabelle TEMPORARY).

  3. Lasciando che il codice dell'applicazione abbia i privilegi di creazione di tabelle o di super utente.