So che questo argomento è un po 'controverso e ci sono molti articoli / opinioni che galleggiano su Internet. Sfortunatamente, molti di loro presumono 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 eseguono lezioni SQL un po 'più avanzate. Facendo questo, perdono assolutamente il punto e sono quindi inutili per me. Quindi spero che questa domanda e tutte le risposte si sposteranno un po 'più avanti.
Supponiamo di avere una tabella con informazioni personali (nome, nascita, ecc.) in cui una delle colonne è un indirizzo email con tipo varchar. Supponiamo che per qualche motivo alcune persone potrebbero non voler fornire un indirizzo email. Quando si inseriscono tali dati (senza e-mail) nella tabella, ci sono due scelte disponibili: imposta la cella su NULL o imposta la stringa vuota (''). Supponiamo di essere a conoscenza di tutte le implicazioni tecniche della scelta di una soluzione rispetto a un'altra e di 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 osservato NULL e '' sono giunto a una conclusione: non conosco l'indirizzo email del ragazzo. Inoltre, non importa quanto sia stato difficile provarlo, non sono stato in grado di inviare una e-mail utilizzando NULL o una stringa vuota, quindi apparentemente la maggior parte dei server SMTP è d'accordo con la mia logica. Quindi tendo ad usare NULL dove non conosco il valore e considero la stringa vuota una cosa negativa.
Dopo alcune intense discussioni con i colleghi sono arrivato con due domande:
-
ho ragione nel presumere che l'uso di una stringa vuota per un valore sconosciuto sta causando un "bugiardo" del database sui fatti? Per essere più precisi: usando l'idea di SQL di ciò che è valore e cosa non lo è, potrei arrivare alla conclusione: abbiamo un indirizzo e-mail, solo scoprendo che non è nullo. Ma più tardi, quando provo ad inviare e-mail, arriverò a conclusioni contraddittorie: no, non abbiamo un indirizzo e-mail, che @! # $ 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), il che sarebbe problematico / inefficiente da memorizzare in qualsiasi altro modo (come ulteriore colonna). Ho visto molti post che affermano che a volte è bene usare una stringa vuota insieme a valori reali e valori NULL, ma finora non abbiamo visto uno scenario che sarebbe stato logico (in termini di progettazione SQL / DB).
P.S. Alcune persone saranno tentate di rispondere, che è solo una questione di gusto personale. Non sono d'accordo Per me è una decisione di progettazione con conseguenze importanti. Quindi mi piacerebbe vedere le risposte in cui un'opinione su questo è supportata da alcuni motivi logici e / o tecnici.