Su alcune piattaforme (e anche su versioni), questo dipenderà dal modo in cui i NULL vengono indicizzati.
La mia regola di base del pollice per NULL è:
Non permettere NULL fino giustificato
Non permettere NULL meno che i dati possono davvero essere sconosciuto
Un buon esempio di questo è la modellazione delle linee di indirizzo. Se si dispone di un AddressLine1 e AddressLine2, cosa significa per il primo di avere dati e il secondo di essere NULL? Mi sembra che tu conosca o meno l'indirizzo e che i NULL parziali in un insieme di dati richiedano solo problemi quando qualcuno li concatena e ottiene NULL (comportamento ANSI). È possibile risolvere questo problema con l'abilitazione dei valori NULL e l'aggiunta di un vincolo di controllo: tutte le informazioni sull'indirizzo sono NULL o nessuna.
Cosa simile con iniziale/nome medio. Alcune persone non ne hanno uno. È diverso da ciò che è sconosciuto e ti interessa?
Inoltre, data di morte: cosa significa NULL? Non morto? Data di morte sconosciuta? Molte volte una singola colonna non è sufficiente per codificare la conoscenza in un dominio.
Quindi, per me, sia per consentire valori null dipenderebbero molto dalle semantica dei primi dati - prestazioni sta per essere secondo, perché dopo aver male interpretato i dati (potenzialmente da molte persone diverse) è di solito un molto più costoso problema delle prestazioni.
Potrebbe sembrare una piccola cosa (in SQL Server l'implementazione è una maschera di bit memorizzata con la riga), ma solo consentire NULL dopo la giustificazione mi sembra che funzioni meglio. Cattura le cose nelle prime fasi dello sviluppo, ti costringe ad affrontare le ipotesi e capire il tuo dominio del problema.
fonte
2010-06-19 15:51:19
Almeno in Oracle, una stringa vuota viene anche considerata come 'NULL'. – zneak
La mia esperienza: non sotto MySQL. – MvanGeest
I tuoi esempi non sono gli stessi. O il primo dovrebbe essere 'MyColumn IS NULL', o il secondo dovrebbe essere' MyColumn <> ''. –