SQL Database: Tabella con numero campi sconosciuto
Ciao a tutti,
ho un problema: devo progettare una tabella dove si potranno memorizzare un numero arbitrario di informazioni.
Un esempio potrebbe essere .. i lavori svolti da una persona nella sua carriera. Potrebbero essere 1, 2 oppure anche 10, 20 o di piu' ...
io a priori non lo so... come posso progettare una tabella efficace?
Creare una tab con un numero di colonne alto (ad esempio 20) non mi sembra molto ... giusto!
Quindi nulla del tipo:
Consigli? Grazie.
ho un problema: devo progettare una tabella dove si potranno memorizzare un numero arbitrario di informazioni.
Un esempio potrebbe essere .. i lavori svolti da una persona nella sua carriera. Potrebbero essere 1, 2 oppure anche 10, 20 o di piu' ...
io a priori non lo so... come posso progettare una tabella efficace?
Creare una tab con un numero di colonne alto (ad esempio 20) non mi sembra molto ... giusto!
Quindi nulla del tipo:
TABELLA persona { nome:string; cognome:string; lavoro1:string; lavoro2:string; lavoro3:string; ... lavoroN:string; }
Consigli? Grazie.
Risposte
Credo che tu non abbia per niente compreso l'idea di base delle relazioni. Quello che si fa normalmente in un database in questo caso è quello di avere una relazione per la persona come la seguente:
persona(pid INT PK, nome STRING, cognome STRING, ...)
e una seconda relazione per i lavori in cui i lavori di una persona sono memorizzati in righe diverse:
lavori(pid INT, lavoro STRING, (pid, lavoro) PK)
Questo è quello che si fa di solito quando si hanno un numero arbitrario di informazioni dello stesso tipo come questa. Si usano delle righe e non i campi delle tabelle.
Ovviamente, se si avesse un numero massimo di informazioni dello stesso tipo si possono anche usare dei campi e settare alcuni di questi a NULL.
persona(pid INT PK, nome STRING, cognome STRING, ...)
e una seconda relazione per i lavori in cui i lavori di una persona sono memorizzati in righe diverse:
lavori(pid INT, lavoro STRING, (pid, lavoro) PK)
Questo è quello che si fa di solito quando si hanno un numero arbitrario di informazioni dello stesso tipo come questa. Si usano delle righe e non i campi delle tabelle.
Ovviamente, se si avesse un numero massimo di informazioni dello stesso tipo si possono anche usare dei campi e settare alcuni di questi a NULL.
avevo pensato a questo pero' in questo caso dovrei avere una cosa di questo genere:
PERSONA -----(N)- SVOLGE -(M) ----- LAVORO
Quindi avrei 2 tabelle date da "persona" e da "lavoro" e in piu', dato che la relazione è Molti-Molti avro' anche una terza tabella "svolge" che fa da collante . Giusto?
Giusto?
PERSONA -----(N)- SVOLGE -(M) ----- LAVORO
Quindi avrei 2 tabelle date da "persona" e da "lavoro" e in piu', dato che la relazione è Molti-Molti avro' anche una terza tabella "svolge" che fa da collante . Giusto?
PERSONA: id_persona: ...; //primary key attrib_persona: ...; ...ecc LAVORO: id_lavoro: ...; //primary key altri_attributi: ...; ...ecc PERSONA: id_persona: ...; //foreign key id_lavoro:...; //foreign key
Giusto?
Sì, è giusto.