So che questo argomento è un po 'controverso e ci sono molti articoli / opinioni fluttuanti su Internet. Sfortunatamente, la maggior parte di loro presume che la persona non sappia quale sia la differenza tra NULL e stringa vuota. Quindi raccontano storie di risultati sorprendenti con join / aggregati e generalmente tengono lezioni SQL un po 'più avanzate. In questo modo, mancano assolutamente il punto e sono quindi inutili per me. Quindi spero che questa domanda e tutte le risposte si sposteranno un po 'in avanti.
Supponiamo di avere una tabella con informazioni personali (nome, nascita, ecc.) In cui una delle colonne è un indirizzo e-mail con tipo varchar. Partiamo dal presupposto che per qualche motivo alcune persone potrebbero non voler fornire un indirizzo e-mail. Quando si inseriscono tali dati (senza e-mail) nella tabella, sono disponibili due opzioni: impostare la cella su NULL o impostarla su stringa vuota (''). Supponiamo di essere a conoscenza di tutte le implicazioni tecniche della scelta di una soluzione rispetto a un'altra e di poter creare query SQL corrette per entrambi gli scenari. Il problema è anche quando entrambi i valori differiscono a livello tecnico, sono esattamente gli stessi a livello logico. Dopo aver visto NULL e '' Sono giunto a una conclusione: non conosco l'indirizzo e-mail del ragazzo. Inoltre, non importa quanto ci abbia provato, Non sono stato in grado di inviare un'e-mail utilizzando NULL o stringa vuota, quindi apparentemente la maggior parte dei server SMTP là fuori concordano con la mia logica. Quindi tendo a usare NULL dove non conosco il valore e considero una stringa vuota una cosa negativa.
Dopo alcune intense discussioni con i colleghi sono arrivata con due domande:
ho ragione nel dare per scontato che l'uso di una stringa vuota per un valore sconosciuto stia facendo "mentire" un database sui fatti? Per essere più precisi: usando l'idea di SQL di ciò che è valore e cosa non lo è, potrei giungere alla conclusione: abbiamo un indirizzo e-mail, solo scoprendo che non è nullo. Ma più tardi, quando provo a inviare e-mail, giungerò a una conclusione contraddittoria: no, non abbiamo un indirizzo e-mail, che il database @! # $ Deve aver mentito!
Esiste uno scenario logico in cui una stringa vuota '' potrebbe essere un buon vettore di informazioni importanti (oltre al valore e nessun valore), che sarebbe problematico / inefficiente da memorizzare in qualsiasi altro modo (come colonna aggiuntiva). Ho visto molti post che affermano che a volte è bene usare una stringa vuota insieme a valori reali e NULL, ma finora non ho visto uno scenario logico (in termini di progettazione SQL / DB).
PS Alcune persone saranno tentate di rispondere, che è solo una questione di gusti personali. Non sono d'accordo Per me è una decisione di progettazione con conseguenze importanti. Quindi mi piacerebbe vedere le risposte in cui l'opion su questo è supportato da alcuni motivi logici e / o tecnici.
''
anche in Oracle, non è lo stesso di NULL
. Ad esempio, assegnando una CHAR(1)
colonna il valore ''
si tradurrà in ' '
(cioè uno spazio), no NULL
. Inoltre, se Jacek stesse usando Oracle, probabilmente questa domanda non verrebbe nemmeno sollevata :-)
'' IS NULL
valutato true
in PL / SQL.