Salve ragazzi,
sto avendo a che fare con un db Oracle in cui ogni tabella ha una chiave primaria ma non ha chiavi esterne sebbene alcuni campi della tabella siano in relazione con quelli di altre tabelle.
Vi faccio un esempio.
tabella_dipendenti: #matricola, cognome, nome, data_nascita, ...
tabella_posti_dipendenti: #matricola, #data_inizio, data_fine, codice_filiale, codice_centro_di_costo, ...
tabella_filiali: #codice_filiale, #data_inizio_desc_filiale, data_fine_desc_filiale, descrizione_filiale, ...
tabella_centri_di_costo: #codice_cdc, #data_inizio_desc_cdc, data_fine_desc_cdc, descrizione_cdc, ...
Per ogni periodo che un dipendente trascorre in un dato posto viene creata una riga con una data_inizio e una data_fine. Quando finisce un periodo ne inizia un altro (non c'è quindi sovrapposizione tra i periodi).
Filiali e centri di costo hanno descrizioni che possono variare nel tempo. Ogni descrizione ha quindi un periodo di validità compreso tra data_inizio_desc e data_fine_desc (anche in questo caso non c'è sovrapposizione tra i periodi).
Se voglio ad esempio la situazione completa ad una certa <data> del dipendente che una data <matricola> la query è la seguente:
select a.*, c.codice_filiale, c.descrizione_filiale, d.codice_cdc, d.descrizione_cdc
from tabella_dipendenti a, tabella posti_dipendenti b, tabella filiali c, tabella_centri_di_costo d
where a.matricola = b.matricola
and b.codice_filiale = c.codice_filiale
and b.codice_cdc = d.codice_cdc
and <data> between b.data_inizio and b.data_fine
and <data> between c.data_inizio_desc_filiale and c.data_fine_desc_filiale
and <data> between d.data_inizio_desc_cdc and d.data_fine_desc_cdc
and a.matricola = <matricola>;
Poiché la tabelle non sembrano aderire al modello E-R io definirei il db non relazionale. Gradirei però avere un parere da parte degli esperti
Grazie in anticipo e buona giornata a tutti,
flattit82