Quanto pesano i default constraint?

martedì 26 agosto 2008 - 15.23

Fabrizio70 Profilo | Newbie

Tanto, visto che sono nuovo, ciao a tutti e complimenti!

Secondo voi quanto pesano i constraint nell'economia di un database? Cioè a senso inserire un vincolo per attribuire un valore di default a qualunque campo della base dati in modo da eliminare "l'antipatico" problema del null, sopratutto quando si lavora con una base dati di più di 10.000 campi?

In azienda c'è chi spinge verso questa strada, che non mi convince per molto...

Grazie

lbenaglia Profilo | Guru

>Tanto, visto che sono nuovo, ciao a tutti e complimenti!

Ciao Fabrizio,

Benvenuto sui forum di DNH

>Secondo voi quanto pesano i constraint nell'economia di un database?
>Cioè a senso inserire un vincolo per attribuire un valore di
>default a qualunque campo della base dati in modo da eliminare
>"l'antipatico" problema del null, sopratutto quando si lavora
>con una base dati di più di 10.000 campi?
Per quanto riguarda il "peso" in senso stretto, ti posso dire che in pratica non pesano niente dato che vengono chiamati in causa esclusivamente nelle operazioni di INSERT quando non viene specificato alcun valore per una colonna; se invece parliamo di eliminare "l'antipatico" problema del null, i default servono a poco in quanto è sufficiente specificare esplicitamente NULL oppure eseguire un successivo UPDATE per vanificare tutti i tuoi sforzi
L'unico modo per rendere una colonna immune dalla possibilità di essere valorizzata a NULL, è... definirla NOT NULL

>In azienda c'è chi spinge verso questa strada, che non mi convince
>per molto...
Neanche me

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Fabrizio70 Profilo | Newbie

Grazie molte.

Fabrizio70 Profilo | Newbie

>>Tanto, visto che sono nuovo, ciao a tutti e complimenti!
>
>Ciao Fabrizio,
>
>Benvenuto sui forum di DNH
>
>>Secondo voi quanto pesano i constraint nell'economia di un database?
>>Cioè a senso inserire un vincolo per attribuire un valore di
>>default a qualunque campo della base dati in modo da eliminare
>>"l'antipatico" problema del null, sopratutto quando si lavora
>>con una base dati di più di 10.000 campi?
>Per quanto riguarda il "peso" in senso stretto, ti posso dire
>che in pratica non pesano niente dato che vengono chiamati in
>causa esclusivamente nelle operazioni di INSERT quando non viene
>specificato alcun valore per una colonna; se invece parliamo
>di eliminare "l'antipatico" problema del null, i default servono
>a poco in quanto è sufficiente specificare esplicitamente NULL
>oppure eseguire un successivo UPDATE per vanificare tutti i tuoi
>sforzi
>L'unico modo per rendere una colonna immune dalla possibilità
>di essere valorizzata a NULL, è... definirla NOT NULL
>
>>In azienda c'è chi spinge verso questa strada, che non mi convince
>>per molto...
>Neanche me
>
>>Grazie
>Prego.
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

Scusa se ti rompo... ma visto che scrivi che neppure a te convince molto la scelta di portare i constraint su tutta la base dati... che argomentazioni porteresti?

lbenaglia Profilo | Guru

>Scusa se ti rompo... ma visto che scrivi che neppure a te convince
>molto la scelta di portare i constraint su tutta la base dati...
>che argomentazioni porteresti?
Non ho affermato questo, ho semplicemente detto che i default non risolvono il problema della nullability delle colonne.
Mi è parso di aver capito che i default fossero stati proposti come "soluzione" al problema
Ripeto, se non volete gestire il NULL, definite la colonne come NOT NULL, altrimenti gestitelo lato client come è giusto che sia.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Fabrizio70 Profilo | Newbie

allora sono io che ho capito male

E' evidente che le strade sono due. Se la colonna è definita NOT NULL o inserisci un constraint o gestisci il NULL lato applicativo.

Qui il punto è che si vuole utilizzare un constraint per dimenticarsi il NULL lato applicativo, con l'accortezza di attribuire un valore di default a tutto il pregresso di dati cioè, ai vecchi dati viene tolto il NULL con una query, a quelli nuovi ci pensa il constraint.

Quello che a me non convince è il NULL su tutti i dati...

lbenaglia Profilo | Guru

>E' evidente che le strade sono due. Se la colonna è definita
>NOT NULL o inserisci un constraint o gestisci il NULL lato applicativo.
Se la colonna è definita come NOT NULL non potrà mai assumere il (non)valore NULL, quindi non serve gestire il NULL applicativamente.
I default puoi metterli o non metterli (nel caso in cui in fase di INSERT specifichi sempre un valore).

>Qui il punto è che si vuole utilizzare un constraint per dimenticarsi
>il NULL lato applicativo, con l'accortezza di attribuire un valore
>di default a tutto il pregresso di dati cioè, ai vecchi dati
>viene tolto il NULL con una query, a quelli nuovi ci pensa il
>constraint.
E se un comando di INSERT o UPDATE va a valorizzare esplicitamente la colonna a NULL? Il default viene allegramente "bypassato"

>Quello che a me non convince è il NULL su tutti i dati...
Questo è un discorso di progettazione della base dati. Alcuni puristi definiscono tutto NOT NULL, io cerco di usare la ragione: se in una tabella ho un numero *limitato* di colonne che possono non essere valorizzate (che ne so, tipo gli Interessi in una anagrafica) non assegno un default (stringa nulla o altro) ma le definisco come NULL.
Lato applicativo dovrò gestire opportunamente il NULL per tali colonne.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5