PDA

View Full Version : [DB] - Valore null


rizzotti91
01-01-2013, 18:14
Salva ho una curiosità riguardo il valore null nei dataBase.
La cosa che mi chiedevo è: se in un textbox ho l'assenza di informazioni, finora faccio memorizzare nel DB una stringa vuota (nei campi di tipo string) e "null" nei campi di tipo numerico. Per il DB è più "leggero" gestire il valore null piuttosto del ""?
Quando ho una tabella con oltre 300.000 righe avrei qualche vantaggio nell'avere i campi con "null" piuttosto che ""?
Spero di essermi saputo spiegare, grazie :)

idoido
01-01-2013, 19:17
normalmente i dbms per gestire i campi che tu definisci nullable aggiungono un bit per dire se è memorizzato null oppure no.

sta a te decidere se un campo string accetta null oppure no, dipende dalla logica della tua applicazione, però se accetti null hai 3 "stati"
NULL
stringa vuota
e stringa con n caratteri

una stringa vuota è diverso da NULL, quindi se il campo non lo fai nullable hai meno controlli da eseguire.

riguardo alla leggerezza del db, si dovrebbero eseguire dei test, ma dubito che con 300.000 righe puoi notare delle differenze in termini di prestazioni (poi se hai delle query con outer join tra più tabelle è un altro paio di maniche)

rizzotti91
01-01-2013, 21:01
normalmente i dbms per gestire i campi che tu definisci nullable aggiungono un bit per dire se è memorizzato null oppure no.

sta a te decidere se un campo string accetta null oppure no, dipende dalla logica della tua applicazione, però se accetti null hai 3 "stati"
NULL
stringa vuota
e stringa con n caratteri

una stringa vuota è diverso da NULL, quindi se il campo non lo fai nullable hai meno controlli da eseguire.

riguardo alla leggerezza del db, si dovrebbero eseguire dei test, ma dubito che con 300.000 righe puoi notare delle differenze in termini di prestazioni (poi se hai delle query con outer join tra più tabelle è un altro paio di maniche)

Ciao, forse non ho ben distinto l'assenza di informazioni... in ogni faccio molto uso di join con 6-8 tabelle la volta, per un totale di mezzo milione di record..
Credi che a livello di "leggerezza" non cambi nulla?

idoido
01-01-2013, 21:35
ora non vorrei scrivere una cazzata e non so quale dbms stai usando.

ma con un campo string nullable

se ad esempio hai i valori sui campi id, valore

1, [NULL]
2, ''
3, 'questa è una stringa non vuota'

facendo una query del tipo SELECT * FROM tabella1 WHERE valore == '' ti dovrebbe restituire solo il record con id 2

EDIT:
riguardo ai join che fai, se sono di tipo INNER JOIN con clausole di tipo uguale non farti troppi problemi, ma join tra 6 tabelle forse sono indice di una struttura non ottimizzata, dipende sempre dal dominio dell'applicazione

Enriko81
02-01-2013, 17:29
a livello teorico mettere un null vuol dire che non sai cosa inserirci, se metti una stringa vuota è un update dove diciamo che azzeri un valore stringa predentemente inserito....
tuttavia se il database non è coerente e proviene da terze parti potresti trovarti colonne stringhe vuote e null sui campi "ignoti", in tal caso sai gia che è meglio fare un controllo con un "or" nel where della select.

rizzotti91
02-01-2013, 20:38
Ma come è meglio gestire l'assenza di informazioni? Memorizzo una stringa vuota o null? Possibile che a livello di prestazioni non cambi nulla?

Inviato dal mio GT-I9300 con Tapatalk 2