[Gfoss] Come impostare in un db una relazione 1:n tra più tabelle padre e una tabella figlio?

a.furieri a lqt.it a.furieri a lqt.it
Mer 26 Set 2012 14:59:19 CEST


On Wed, 26 Sep 2012 14:35:47 +0200, Luca Mandolesi wrote:
> Se ho 2 tabella padre che devono linkarsi a una tabella figlio in
> relazione 1:n è corretto quanto segue (in pseudo linguaggio)?
>
> tab 1
>  field 1 (id primary key)
>  field 2 opt
>
>  ....
>
> tab 2
>  field 1 (id primary key)
>  field 2 opt
>
>  ....
>
> tab 3
>  field 1 (id)
>  field 2 opt
>  id di tab 1 (foreign key tab1.field 1)
>  id di tab 2 (foreign key tab2.field 1)
>  ....
>
> In sostanza nella tabella 3 figlio che viene usata sia da tab 1 che 
> da
> tab 2, è giusto aggiungere 1 campo di foreign key per ogni tabella 
> chi
> gli fa da padre?
>
>
> Spero sia chiaro....ma non ci spero molto...
>

Luca, sei stato chiarissimo :-D

ed hai azzeccato il modo giusto di usare le relazione Primary/Foreign

giusto per fissare meglio le idee in modo piu' fornale, prendi il caso
della gerarchia Comune/Provincia/Regione; ovviamente un comune 
appartiena
sia ad una Provincia che ad una Regione
(lo potresti anche rappresentare a cascata, ma rimaniano sul "doppio 
padre"
per seguire il tuo esempio da vicino).

CREATE TABLE reg (
   id_reg INTEGER NOT NULL PRIMARY KEY,
   nome_reg TEXT NOT NULL);

CREATE TABLE prov (
   id_prov INTEGER NOT NULL PRIMARY KEY,
   nome_prov TEXT NOT NULL);

CREATE TABLE com (
   id_com INTEGER NOT NULL PRIMARY KEY,
   id_reg INTEGER NOT NULL,
   id_prov INTEHER NOT NULL,
   nome_com TEXT NOT NULL,
   CONSTRAINT fk_com_reg FOREIGN KEY (id_reg)
     REFERENCES reg (id_reg),
   CONSTRAINT fk_com_prov FOREIGN KEY (id_prov)
     REFERENCES prov (id_prov));

ciao Sandro



-- 
Il messaggio e' stato analizzato alla ricerca di virus o
contenuti pericolosi da MailScanner, ed e'
risultato non infetto.



Maggiori informazioni sulla lista Gfoss