SQL Database: Tabella con numero campi sconosciuto

BoG3
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:
TABELLA persona {
      nome:string;
      cognome:string;
      lavoro1:string;
      lavoro2:string;
      lavoro3:string;
      ...
      lavoroN:string;
}


Consigli? Grazie.

Risposte
apatriarca
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.

BoG3
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?

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?

apatriarca
Sì, è giusto.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.