Prima: Considerare attentamente i diversi semantica di NULL e Vuoto-String.
- La prima è meglio interpretato come qualcosa di simile a:
C'è un valore valido per questo campo, ma tale valore non è ancora noto.
- Il secondo indica sempre:
Il valore valido per questo campo è noto ed è esattamente "".
Seconda: Riconoscere che l'indicizzazione e filtraggio funziona meglio e in modo più efficiente su Vuoto-String che su NULL, in modo da non utilizzare questi ultimi quando si ha realmente dire l'ex.
Terzo: Riconoscere che tutte le espressioni che utilizzano NULL sono sensibili alla non intuitività di tre valori logica a meno che il NULL viene religiosamente fusero per Vuoto-String (o qualche altro valore contestualmente validi) prima . In particolare, la legge del medio escluso non si applica più, quindi l'espressione A o ~ A non è più tautologicamente vera ogni volta che la valutazione di A richiede la valutazione di un termine NULL . Dimenticarlo può portare a bug molto sottili e difficili da localizzare.
Il non-uguale operatore espone con frequenza:
When A has the value NULL:
The expression A = 0 returns false;
The expression A <> 0 returns false; and
The expression A OR NOT A returns false!
Aggiornamento:
Credo che l'essenza del mio punto è che non sono la stessa creatura, ma piuttosto molto diverse bestie. Ognuno ha il suo posto. Un secondo campo indirizzo deve essere sempre non nullo (a meno che non si intenda consentire l'immissione di indirizzi parziali o incompleti) e il suo valore predefinito dovrebbe sempre essere il valore valido e noto di Empty-String. NULL deve essere limitato ai casi in cui un valore valido e noto verrà fornito in un momento successivo e in effetti o segnalerà una sorta di errore di convalida che deve essere risolto.
Da OP seguito:
Una riga non verrà aggiornata. All'inserimento c'è un indirizzo IP o non ce n'è (perché non è stato possibile risolverlo).
Risposta:
Poi mi consiglia di utilizzare Vuoto-String come predefinito, e rendere il campo non nullo. Utilizzare solo NULL quando è necessario, in quanto ha sottili svantaggi.
fonte
2013-05-05 15:46:33
Questo è un po 'soggettivo, ma NULL trasporta il significato di "non applicabile" che sembra il più naturale qui. L'efficienza non dovrebbe essere un fattore. –
@Jack Bene, l'efficienza è sempre un fattore;) – user2352129
Gli hostname devono essere unici? Ti aspetti mai più indirizzi IP da risolvere sullo stesso hostname? –