Newsgroup: it.comp.software.database
Titolo: campi booleani o stringa?

ho scritto un software in ambiente WAMP per la gestione di un questionario.
nel questionario ci sono tante domande con risposta vero - falso che io ho
tradotto nel software con delle checkbox.
nel DB queste risposte le ho tradotte con un campo di tipo enum (0,1)
assegnando 0 se falso e 1 se vero.
Cos� come � fatto va bene, per� ora mi sorge un dubbio allo scopo di
migliorare l'efficienza del programma: 
dato che queste domande nel questionario sono tutte vicine e sono
abbastanza (supponiamo 5), potrei invece che fare un campo per ogni
risposta, cio� 5 campi di tipo enum (0,1), farne uno unico di tipo char(5)
dove inserirei i 5 valori 0 o 1, 
cio� per esempio invece di avere 5 campi cos�:
c1 enum(0,1),c2 enum(0,1),c3 enum(0,1),c4 enum(0,1),c5 enum(0,1)
potre averne 1 solo cosi:
c varchar(5)
cos� invece di avere: 
c1='1'
c2='0'
c3='0'
c4='1'
c1='0'
avrei:
c='10010'
tanto poi MySQL contiene delle funzioni di testo per estrapolare da un
campo il 3 carattere e cos� via...
secondo voi cosa conviene fare?
una tabella di un DB per essere efficiente quanti campi non deve superare
(come numero)?
cioa e grazie
alessandro
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 abbastanza (supponiamo 5)
Se ti riferisci all'efficienza dei dati immagazzinati lascia che pensi 
il db. Poi cinque campi, avessi detto centocinquanta… 
Invece che estrapolare il significato dalle stringhe tieniti il 
programma leggibile in modo che quando lo riprendi tra un anno per fare 
una piccola modifica non ti verrà la tentazione di scagliare il monitor 
al suolo.

 campo il 3 carattere e cos� via...
Lascia perdere, meglio una struttura db pulita.

 (come numero)?
Non c'e' un hard limit, dipende da che dati stai trattando e da che
risorse hai a disposizione. A occhio direi che puoi stare tranquillo,
prima di preoccuparti dell'efficienza del DB ne hai da riempire di
questionari...
bye!

grazie 1.000 a tutti!!


 secondo voi cosa conviene fare?
Andrebbe specificato innanzitutto cosa s'intende per efficienza del
programma:
- dal punto di vista del codice che dovrai scrivere, c'e`
un netto peggioramento di complessita` e leggibilita` causato
dal fatto che dovrai usare funzioni di decodifica della stringa
- dal punto di vista dello schema del db, si perde l'indirizzamento
a livello di singolo attributo
- dal punto di vista teorico, il db non e` neppure in prima forma
normale (ha piu` valori in una singola cella), oltre che violare
l'indipendenza dei dati (non si accede piu` tramite il nome
dell'attributo, ma tramite la posizione del bit: pensa a quale
effetto avrebbe sul resto del codice il cancellare una colonna
dal centro della stringa)
- dal punto di vista delle prestazioni del dbms, perdi la
possibilita` di ricercare ed indicizzare i singoli attributi, con
conseguente possibile calo di velocita` in alcune query
- dal punto di vista dell'occupazione di spazio, non credo che
1 VARCHAR(5) debba essere granche' piu' corto di 5 CHAR(1);
inoltre l'uso del VARCHAR nel caso di stringhe a lunghezza fissa,
specie se corte, e` errato 

sei stato chiarissimo, manterr� i campi separati
