41 messaggi dal 10 agosto 2001
Salve a tutti,
ho un quesito.
Sto sviluppando un nuovo progetto in sqlserver.
Prima di cominciare, visto che i clienti vogliono un aggeggio dalle prestazioni elevate mi sono documentato per quando ho potuto su come miglioreare le prestazioni del DB. Come costruire delle relazioni e delle tabelle per rendere il sistema + veloce.
Dunque come inviatava il manuale stesso di sqlserver ho tolto tutti i campi la possibilità di essere NULL. Ho assegnato quindi dei valori di default. Ai campi char, nvarchar, text... una stringa vuota '' ai valori bit, interi ... i valori 0 o 1 in base ai vari casi.

Tutto funziona correttamente tranne il fatto che per alcune tabelle a cui dovrei assegnare delle relazioni attraverso l'ID incrementale, la relazione non è possibile perchè trova il valore 0 di default e quindi c'è una violazione del vincolo.

Quindi arrivo al sodo. E' più performante per voi avere una tabella con moltissime righe che permetta una colonna NULL e avere la relazione tra le tabelle oppure al contrario non avere relazione e mantenere la colonna NOT NULL?

Spero che si capisca + o - quello che volevo dire.

Grazie in anticipo.

Lelex
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
lelex ha scritto:

Spero che si capisca + o - quello che volevo dire.


...quello che si capisce è che hai le idee (molto) confuse e non è leggendo qua e la qualche tip che lo si può legare alla rinfusa con altri ed ottenere così le migliori prestazioni.
La decisione se un campo debba ammettere valori NULL o meno esula da tutte le considerazioni che hai fatto e metterci dei valori a caso non cambia lo status delle cose riguardo alle prestazioni.
Un campo NULL lo si implementa quando il valore è SCONOSCIUTO o NON APPLICABILE. In questi casi NULL è NULL. Sicuramente NULL non è 0 o ''.

Bye
Modificato da l.bianchi il 02 febbraio 2006 13.37 -
41 messaggi dal 10 agosto 2001
Probabilmente si, ho le idee confuse.
Ripeto che non è una cosa che ho inventato così ma era scritta in un manuale. Comunque la mia domanda era: se le prestazioni migliarano di +
- nel caso citato dal manuale ma senza relazione
- con campo NULL ma con relazione.
Mi sembra di aver intuito dalla tua gentile risposta che debba impostare il campo NULL comunque.

Grazie 1000.

Lelex
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
lelex ha scritto:

Ripeto che non è una cosa che ho inventato così ma era scritta in un manuale.


E non ho ragione di dubitarne, così come non ho ragione di dubitare di ciò che indica questo "manuale" senza sapere quale sia (qual'è?) e, cosa più importante di tutte le altre, il contesto in cui è calato ciò che hai molto (troppo) sinteticamente riportato


Comunque la mia domanda era: se le prestazioni migliarano di +
- nel caso citato dal manuale ma senza relazione
- con campo NULL ma con relazione.


Una relazione non ha nulla a che vedere con le prestazioni. E' fuori discussione il fatto che la sola presenza di un vincolo di integrità referenziale penalizza le prestazioni in fase di inserimento/modifica dei dati in quanto il vincolo deve essere preventivamente validato, ma non puoi subordinare la presenza di un vincolo ai requisiti prestazionali che ti si chiede di assicurare.
Partendo dal presupposto che se non ti fosse stato richiesto di assicurare tali "requisiti prestazionali" (come sono misurati e quantificati? su quali baseline?) dubito che avresti scritto un'applicazione prescindendo dalle normali best practice, non puoi subordinare l'integrità dei dati a qualunque altra funzionalità. Altrimenti sarebbe come svitare tutte le lampadine di casa al fine di risparmiare energia elettrica.
La presenza di un vincolo (sia esso di integrità referenziale che un vincolo "di dominio" come la possibilità o meno di ammettere valori NULL) derivano dall'analisi dei requisiti che la base dati deve soddisfare. Al requisito "prestazionale" si affianca quello funzionale e a seconda della fase progettuale in cui ti trovi assume maggior rilevanza uno piuttosto che l'altro.
Ed in quest'ottica la ricerca delle migliori prestazioni la vedo alla fine del ciclo di sviluppo; quella della definizione del modello logico dei dati all'inizio.
Bada bene che ciò non significa che in questa fase puoi fare tutte le cappellate che vuoi tanto alle prestazioni ci pensi dopo. Significa seguire (ma soprattutto applicare) un metodo e non uno zibaldone di tips (seppur validi) nell'ordine in cui ti vengono in mente...

Bye
41 messaggi dal 10 agosto 2001
Ti ringrazio ancora per la risposta, mi sei stato molto utile.

Grazie.

Lelex

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.