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







Linkedin
Flickr
Anobii
Youtube
Lastfm