Newsgroup: it.comp.software.database
Titolo: disegno struttura

ho la situazione seguente:
per una cura ho 6 tipologie (ci potrebbero stare nessuna, 1,..tutte);
quindi nel form di inserimento ho messo una checkbox per poterle
selezionare anche tutte (e non un radio);
Il problema è a livello di database, infatti ho pensato a 2 possibilità:
1 - inserisco 6 campi booleani nella tabella 'cure', se poi una cura ha
solo 1 tipologia, avrei 5 campi a false e solo 1 a true, ma in ogni caso
per ogni cura avrei sempre 6 campi;
2 - creo un altra tabella separata 'tipCur' relazionata a 'cure' 1 : n (
non avrei i campi booleani in 'cure' come nel caso 1) , in maniera tale
che se una cura prevede solo 1 tipologia avrei 1 record in 'tipCur';
secondo voi quale sarebbe la soluzione migliore?
la scelta dipende da il numero di cure? dal numero di select, insert,
update e delete?
ciao
Ale
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 update e delete?
Per comodità inserimento e ricerca, se i campi rimangono 6 puoi metterli
nella tabella cure.
Per fare le cose fatte più precise forse dovresti fare una tabella
TipiCura
  IdTipoCura numerico
  DescTipoCura Varchar
Poi fai una tabella
  CureUtenti
    idCuraUtente Contatore
    IdCure 'tua chiave della tabella cure
    IdTipoCura ' tua chiave tabella tipi Cura
A questo punto ad ogni rigo di cure corrisponderanno da 0 a #n righi di
tipologie cure.
Poi i dati li leggi
SELECT * FROM CURE LEFT JOIN CUREUTENTI ON CURE.IDCURA=CUREUTENTI.IDCURE
Se vuoi anche la descrizione la prendi con una join con TipiCura

 update e delete?
Assolutamente no, la scelta di quale schema usare dipende
esclusivamente dalle specifiche concettuali e dal modello applicato,
e prescinde totalmente dal "come" verrà usato.

  DescTipoCura Varchar
"più precise" ?!?
Hai una tabella fatta nella prima colonna di un valore generato al
momento, nella seconda di una opaca stringa narrativa non
interpretabile da un qualsiasi modello di dati che non sia il
babel fish.
La sola cosa che un computer può fare con tabelle come questa è
dumpare bovinamente i dati sullo schermo, nell'UNICA speranza che
l'utente sappia cosa farsene; si tratta in pratica di una moderna
forma di fotocopiatura, solo senza usare carta. [cit.]

The man with two watches ha scritto:



mi hanno consigliato su it.comp...php di creare nella tabella cure un
campo stringa lunghezza 6 di 0 e 1, cioè contenente valori del tipo
100100, in questo caso significherebbe che la cura ha le seguenti diagnosi
associate: la 1° e la 4°; poi dovrei splittare il campo per fare le varie
operazioni...
ora vedo
grazie a tutti


 forma di fotocopiatura, solo senza usare carta. [cit.]
Scusa non ho ben capito.
Siamo daccordo che TipoCure deve essere una nuova tabella che sarà in
relazione 1->n con Cure.
Ora mettiamo che la tabella cure possa avere un 10.000 records e una media
di 3 record in TipoCure.
Ciò vorrà dire che in TipoCure ci saranno 30.000 records.
La chiave di collegamento fra Cure e TipoCure presumo sia numerica.
Magari questi TipiCure hanno un nome (o descrizione) di un 100 caratteri e
non "Preventiva" o che.
Io non scrivere 30.000 varchar(100) in TipoCure, ma farei una tabella con
tutte le tipologie di cure possibili (in questo caso 6), con ID, Codice
Breve e magari un Descrizione.
In TipiCure avrò
Cont	IDCURA	IDTIPOCURA
1	1	1		'1="Prevenzione"
2	1	3		'2="Normale"
3	1	4		'4="Pippo e paperino"
Sinceramente lo preferisco ad avere (se ho capito bene cosa chiedeva o cosa
intendevi)
Cont	IDCURA	IDTIPOCURA
1	1	"Prevenzione"
2	1	"Normale"
3	1	"Pippo e paperino"
Anche perchè se poi è necessario correlare altri campi ad un tipo di cura
basta aggiungere un campo su 6 record e non su 30.000
A quel punto meglio aggiungere NColonne sulla taballa cure, o aggiungere un
campo Char(6) come gli hanno consigliato e in caso di aumento basta
aumentare il campo Char(n).

 Siamo daccordo che TipoCure deve essere una nuova tabella che sarà
Mi stai facendo tutta una serie di considerazioni di convenienza,
che poco hanno a che vedere col problema principale di cui sopra.
Ripeto e sintetizzo: la tabella che hai presentato è senza
chiave primaria valida, il che non sembra turbarti.
Il design è quello solito fatto a contatori ID, di cui ho svariate
volte scritto, ed in questo caso particolarmente eclatante.
Riguardati la tabella, perché è senza significato:
TipiCura
  IdTipoCura numerico   - un contatore
  DescTipoCura Varchar  - una descrizione testuale
Praticamente un array di stringhe.

 operazioni...
E per caso ti hanno detto anche che violeresti una delle regole
fondamentali dei database (valori atomici)?
Per valutare la qualità del consiglio, ti dico che di solito la
regola si può trovare entro le prime 5 pagine di un testo di
normalizzazione.

 Praticamente un array di stringhe.
In pratica si, ma nel caso di espansione della tabella con altre
informazioni (cosa che accade tutt'altro che raramente), avendo una tabella
dedicata imho si gestisce meglio.
Mettiamo che debba essere aggiunto un campo "PrezzoCura". Perchč devo
aggiungerlo in TipiCura (quella di "30 mila record" per capirci) quando
posso aggiungerlo nella tabella con i soliti 6 tipi di cura e riprenderlo
da lě all'evenienza?
Non č polemica la mia, ma č solo per capire come sarebbe meglio fare e
perchč.

 In pratica si, ma
Ti rimando alla lettura di un buon testo sul data modeling.

 
La seconda che hai scritto.
Alla prossima.
	MAX

 Googla un po' sui miei post passati su questo ng.
Ok, appena ho un po' di tempo ci do' un occhio.
Tnx

 Ti rimando alla lettura di un buon testo sul data modeling.
hai gentilmente un buon libro da consigliarci? possibilmente in italiano?
grazie e ciao,
alcina
==============================================================
 Posted with Hogwasher. Mac first, Mac only:
 
http://www.asar.com/cgi-bin/product.pl?58/hogwasher.html
 
==============================================================

 hai gentilmente un buon libro da consigliarci? possibilmente in italiano?
Col tempo mi sono reso conto che consigliare un libro è come
consigliare un vestito a una persona che non conosci.
Persino io stesso sto cambiando diametralmente i miei gusti.
Invece ti consiglio di non accettare consigli :-)
Leggilo prima di comperare, perdici almeno 15-20 minuti per ogni testo.