paolo@bimodesign.com | +34 608 61 64 10

DB Relational

        

Creare una relazione tra tabelle

Ipotizziamo di dover archiviare dei dati riferiti all'anagrafica delle aziende e le mail di pubblicita' che di volta in volta inviamo a loro.

La tabella di Anagrafica dell'azienda

La creiamo nel seguente modo.

Note: I valori di storage sono di esempio e non mi soffermerò in quanto non sono l'obiettivo di questa spiegazione. Lo stesso dicasi per l'inserimento dei commenti, pero' estremamente utili per capire il contenuto della tabella e dei singoli campi in essa contenuti, delle sequence da associare ai campi codi_, inseriti sempre come primo campo della tabella e delle PRimary Key sugli stessi campi Codi_

Ancora una cosa.

I Campi che sono tra loro in relazione devo essere dello stesso tipo e della stessa lunghezza.

CREATE TABLE  ANAGAZIE(
  Codi_Azie		 Number(9)	Not Null,
  Desc_Azie		 Varchar2(50)   Not Null,
  Desc_Resp		 Varchar2(50)   Not Null,
  Desc_Viaa		 Varchar2(100)  Not Null,
  Desc_Nume_Civi	 Varchar2(10)   ,
  Desc_Emai		 varchar2(50)   Not Null,
  Desc_Sito_Webb	 Varchar2(100)  ,
  Codi_Comu		 Number(9)      Not Null,
  Codi_Area_Comm	 Number(9)      Not Null)
STORAGE (initial  500K
            next  500K
     pctincrease  0
      minextents  1
      )
PCTFREE  10
PCTUSED  80
INITRANS 1
MAXTRANS 255
TABLESPACE TS_XXXXX;

COMMENT ON TABLE ANAGAZIE IS 'Contiene i dati anagrafici di una azienda';
COMMENT ON COLUMN
  ANAGAZIE.Codi_Azie IS 'Codice Azienda univoco';
COMMENT ON COLUMN
  ANAGAZIE.Desc_Azie IS 'Descrizione Azienda';
COMMENT ON COLUMN
  ANAGAZIE.Desc_Resp IS 'Nome e cognome del responsabile';
COMMENT ON COLUMN
  ANAGAZIE.Desc_Viaa IS 'Descrizione della via';
COMMENT ON COLUMN
  ANAGAZIE.Desc_Nume_Civi IS 'Descrizione del numero civico. Puo contenere lettere';
COMMENT ON COLUMN
  ANAGAZIE.Desc_Emai IS 'Descrizione dell'indirizzo di mail';
COMMENT ON COLUMN
  ANAGAZIE.Desc_Indi_Webb IS 'Descrizione home page azienda';
COMMENT ON COLUMN
  ANAGAZIE.Codi_Comu IS 'Codice del comune. Relazionato con la tabella dei comuni';
COMMENT ON COLUMN
  ANAGAZIE.Codi_Area_Comm IS 'Codice della area commerciale. Relazionato con la tabella delle tipologie delle aree commerciali';

La tabella di Anagrafica Mail nel seguente modo In questo caso non ripeto ne' i parametri di Storage ne' i commenti, che pero' vi invito ad inserire al momento della creazione della tabella.

CREATE TABLE  ANAGEMAI(
  Codi_Emai		 Number(9)   Not Null,
  Desc_Ogge		 Varchar2(50)   Not Null,
  Desc_Text		 BLOB  Not Null,
  Desc_path_atta	 Varchar2(200)  Not Null)

La tabella di Relazione tra Azienda e Email.

Lo scopo di questa tabella e quello di evitare di duplicare le righe presenti sulla tabella di anagrafica delle aziende, visto che quest'ultima puo' ricevere n-mail. Nel caso fosse una sola ed unica mail, non sarebbe necessario creare questa tabella ma basterebbe mettere in relazione il campo codi_emai con il campo (in questo esempio non presente) della tabella AnagAzie.

In alternativa, duplicare le righe sulla tabella AnagAzie, comporta una serie di inconvenienti, tutt'altro che banali.

- Aumento dello spazio fisico
- Aumento dei tempi di estrazione dei dati dalla tabella AnagAzie
- Difficolta nel eseguire una modifica (ad esempio aggiunta di un campo) su AnagAzie

Insomma, e' fondamentale crearla e strutturla in questo modo. Notare che e' comunque presente un campo codi_rela_azie_emai, a cui va associata la relativa Sequence. Inoltre, il nome della tabella, presenta, come indicato nel post relativo alla qualita' della nomenclatura di una base dati, una descrizione "parlante". Infatti "RELA" ci dice che e' una tabella di Relazione tra la tabella "AZIE"nda e "Email"

CREATE TABLE  RELAAZIEEMAI(
  Codi_Rela_Azie_Emai	 Number(9)	Not Null,
  Codi_Azie		 Number(9)	Not Null,
  Codi_Emai		 Number(9)	Not Null)

Creaiamo le relazioni

Arriviamo al punto fondamentale. Mettiamo in relazione le tabelle, in maniera tale di assicurarci che la congruenza dei dati tra le tre.

In teoria non e' obbligatorio crearle, ma vi sconsiglio di seguire questa strada.

Relazione tra Relazieemail e AnagAzie

ALTER TABLE RELAAZIEENTI ADD
	CONSTRAINT FK_RELAAZIEENTI_CODIAZIE
	FOREIGN KEY (CODI_AZIE)
	REFERENCES ANAGAZIE (CODI_AZIE)

Relazione tra Relazieemail e AnagEmai

ALTER TABLE RELAAZIEENTI ADD
	CONSTRAINT FK_RELAAZIEENTI_CODIEMAI
	FOREIGN KEY (CODI_EMAI)
	REFERENCES ANAGEMAI (CODI_EMAI)

Questo e' tutto

Ricordo di non dimenticare di inserire

  • Dati di Storage
  • Commenti
  • Primary Key
  • Sequence