Newsgroup: it.comp.software.database
Titolo: campo con piu' valori

ho creato un database, con una tabella che consiste in un elenco di persone.
 
Per ogni persona si devono specificare:
-nome
-cognome
-email
 
Adesso se ad esempio una persona ha più indirizzi email, come si fa ad 
inserirli?
 
Per il momento sto usando un sistema semplice: separo i vari indirizzi 
email, con un punto e virgola.
 
Però vorrei sapere se, invece del normale campo di tipo 'TEXT', 
esisterebbe ad esempio un tipo 'multi-text', 'multi-line', 'multi-memo', 
'array', o roba del genere...
 
Mi sono spiegato?

 ho creato un database,
 
Oracle, MySQL, sqlite, PostgreSQL, SQLServer, firebird, Access ecc ecc ?
 
-- 
Never try to teach a pig to sing.
It wastes your time and annoys the pig.


Se il db supporta gli array puoi usarli
Se il db supporta le tabelle annidate puoi usarle
Se il db non supporta nessuno dei due, allora fai un' altra tabella e la 
metti in relazione n a 1 con la tabella principale
Altre modalità non me ne vengono in mente
 
 

 inserirli?
 
La logica relazionale suggerisce di usare una chiave 1:n, poi dipende da 
come vuoi fare te le cose (e.g. per queste cose e` interessante usare un 
JSON da salvare su campo dedicato o su di un campo stringa senza limiti)
 
Enrico

 metti in relazione n a 1 con la tabella principale
 
e come devo strutturare la 2� tabella?
Una spiegazione pi� pratica?
 
C'� un tizio che si chiama Salvatore Guidi, ed ha tre email.
Qual'� il sistema pi� corretto per registrare i tali dati?


 
mysql su server apache
 

 Qual'č il sistema piů corretto per registrare i tali dati?
 
naturalmente le email possono essere anche cinque, dieci, un miliardo...

 Qual'è il sistema più corretto per registrare i tali dati?
 
Nella tabella principale gli metti una colonna ID come chiave primaria e 
la associ ad una sequenza
 
Nella tabella secondaria puoi fare in due modi
 
1)
    metti una colonna ID come chiave primaria e lo associ ad una sequenza
    metti una colonna ID_persona  che punta all' ID della tabella 
primaria (in termine tecnico è chiamato foreign key)
 
2)
    metti una colonna ID_persona  che punta all' ID della tabella 
primaria (foreign key)
    metti una colonna SEQ che dà la sequenza delle email da 0..N
    metti come chiave primaria ID_persona + SEQ
 
 
 
 
 


 
cosa intendi per sequenza?
 


 
Se non sbaglio usi mysql
In mysql non esiste un generatore di sequenze come in Oracle o Postgesql
Si aggiunge semplicemente l' attributo auto_increment alla colonna voluta
 
 

 Si aggiunge semplicemente l' attributo auto_increment alla colonna voluta
 
e purtroppo continuo a non capire...
 
Torniamo alle origini:
si deve creare una tabella (usando il motore sql), per registrare alcuni 
utenti.
 
Ogni utente deve avere:
-nome
-cognome
-indirizzi email (sottolineo "indirizzi" con la 'i' finale...)
 
E' difficile realizzare una struttura di questo tipo?

 E' difficile realizzare una struttura di questo tipo?
 
in Postgres ... penso che in MySQL sia simile
 
CREATE TABLE persona (
 id serial unique,
 nome text,
 cognome text,
 ...
);
 
CREATE TABLE email (
 id serial unique,
 persona_id integer not null references persona(id),
 email text
);
 
personalmente trovo che sia la cosa piu' pulita ... piu' facile da gestire.
dopo varie prove con ARRAY e strutture strane sono sempre tornato su questo.
 
parere personalissimo !


 dopo varie prove con ARRAY e strutture strane sono sempre tornato su questo.
 
beh vab�... nella seconda tabella hai messo un campo email di tipo text, 
ma quindi se volessi specificare pi� email, come faccio?
Le potrei separare con una virgola, ma a questo c'ero gi� arrivato...
Io vorrei un vero e proprio campo di tipo "list-box", per potervi 
inserire pi� valori, pi� voci, pi� item...
Ma a questo punto penso che con mysql questa cosa non esista...
 

 Ma a questo punto penso che con mysql questa cosa non esista...
 
no aspe' ... mi sono spiegato male io
 
ad una voce della TABLE persone corrispondono PIU' voci della TABLE email
cioe' hai una riga nella table persone a cui puntano piu' righe della
TABLE email ... es:
 
persona
    id: 120
    cognome: rossi
    nome: aldo
    ...
 
email:
    id: 44 
    persona_id: 120
    email: 
aldo....@gmail.com
 
 
email:
    id: 350
    persona_id: 120
    email: 
a.r...@tiscali.it
 
 
email:
    id: 430
    persona_id: 120
    email: 
al...@miaditta.com
 
 
ecc ecc ... cosi' facendo non hai limiti al numero di mail, cancelli o vari
una mail in maniera semplicissima, senza fare strani parsing di 
stringhe ecc ecc.
 
ho usato un campo text per mantenermi sul generico ... poi puoi usare varchar 
o simili, se vuoi limitare il numero di caratteri da usare ... e postgres ha 
anche un tipo dato email, se non erro (e comunque non e' standard SQL) ... 
mysql non so.


> inserire più valori, più voci, più item...

Perfetto, mai hai dimenticato l' autoincrement per assegnare un id 
univoco alle colonne ID  a meno che in mysql non  ci sia un altro modo 
(mysql non è un db che uso spesso)
 
 
 

 (mysql non è un db che uso spesso)
 
idem ;-) cmq nell'altro post avevo messo il "metodo PostgreSQL"
 
    id serial unique
