|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2005
Città: Messina
Messaggi: 15648
|
[DB] - Valore null
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 ![]()
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
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) |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: May 2005
Città: Messina
Messaggi: 15648
|
Quote:
Credi che a livello di "leggerezza" non cambi nulla?
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
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 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1677
|
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. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2005
Città: Messina
Messaggi: 15648
|
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
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:30.