Basi di Dati
prof. A. Longheu
6 – Progettazione Logica
Cap. 7 “Basi di dati” Atzeni – Ceri – Paraboschi - Torlone
Progettazione Logica
• Obiettivo della Progettazione Logica e’ quello di
costruire uno schema logico ,in un determinato
modello (ad es. relazionale), che descriva in maniera
corretta ed efficiente tutte le informazioni contenute
nello schema E-R prodotto dalla progettazione
concettuale.
• Non si tratta di una semplice traduzione
• Nel seguito, il termine entità è lo stesso del modello
e-r, il termine associazione è la relazione del modello
e-r, per non confonderla con la relazione del modello
relazionale (che è una semplice tabella).
Progettazione Logica
La progettazione logica si articola in due fasi:
• Ristrutturazione dello schema E-R: e’
una fase indipendente dal modello logico e si
basa su criteri di ottimizzazione dello schema
e di successiva semplificazione.
• Traduzione verso il Modello Logico: fa
riferimento ad un modello logico (ad es.
relazionale) e puo’ includere ulteriore
ottimizzazione che si basa sul modello logico
stesso (es. normalizzazione).
Progettazione Logica
Ristrutturazione - 1
L’input ed output della fase di ristrutturazione
dello schema E-R sono:
• Input: Schema Concettuale E-R iniziale,
Carico Applicativo previsto (in termini di
dimensione dei dati e caratteristica delle
operazioni)
• Output : Schema E-R ristrutturato che
rappresenta i dati e tiene conto degli aspetti
realizzativi
Ristrutturazione – 2
Determinazione Carico Applicativo
• L’input della ristrutturazione è lo schema E-R, ricavato
dalla fase di progettazione concettuale, ed il carico
applicativo.
• Per determinare il carico applicativo vengono
definiti degli indici di prestazione per
la
valutazione di schemi E-R. Tali indici sono due:
• Costo di un’operazione: in termini di numero di
occorrenze di entita’ ed associazioni che mediamente
vanno visitate per rispondere a quella operazione
sulla base di dati
• Occupazione di memoria: viene valutata in termini
dello spazio di memoria (misurato in byte) necessario
per memorizzare i dati del sistema.
Ristrutturazione – 3
Determinazione Carico Applicativo
• Per studiare questi indici abbiamo bisogno di
conoscere:
• Volume dei dati: a) numero (medio) di
occorrenze di ogni entita’ ed associazione b)
dimensioni di ciascun attributo
• Caratteristiche delle operazioni: a) tipo di
operazione (interattiva o batch) b) frequenza
(esecuzioni/tempo) c) dati coinvolti (entita’ e
o associazioni)
Ristrutturazione – 4
Determinazione Carico Applicativo
Esempio:ditta con sedi in citta’ diverse
Ristrutturazione – 5
Determinazione Carico Applicativo
Operazioni dell’esempio
• Operazione 1: assegna un impiegato ad un
progetto
• Operazione 2: trova i dati di un impiegato, del
dipartimento nel quale lavora e dei progetti in cui e’
coinvolto
• Operazione 3: trova i dati di tutti gli impiegati di un
certo dipartimento
• Operazione 4: per ogni sede, trova i dipartimenti
con il cognome del direttore e l’elenco degli
impiegati.
Ristrutturazione – 6
Determinazione Carico Applicativo
TABELLA DEI VOLUMI
TABELLA DELLE OPERAZIONI
Concetto
Tipo Volume
Sede
E
10
Concetto Tipo Frequenza
Dipartimento
E
80
Op. 1
I
50 al giorno
Impiegato
E
2000
Op. 2
I
100 al giorno
Progetto
E
500
Composizione
R
80
Op. 3
I
10 al giorno
Afferenza
R
1900
Op. 4
B
2 a settimana
Direzione
R
R
80
6000
Partecipazione
Ristrutturazione – 7
Determinazione Carico Applicativo
• Avendo a disposizione il volume dei dati (tabella dei
volumi) e le caratteristiche delle operazioni (tabella
delle operazioni), e’ possibile calcolare gli indici di
prestazione.
• Partendo dalla stima dei costi di ogni operazione,
tale indice si determina contando il numero di accessi
alle occorrenze di entita’ e relazioni necessario per
eseguire l’operazione.
• Prendiamo per esempio l’operazione 2 e facciamo
riferimento allo schema di operazione
Ristrutturazione – 8
Determinazione Carico Applicativo
Lo schema di operazione in figura mostra (tramite delle frecce) le entità e
le relazioni effettivamente coinvolte nell’esecuzione dell’operazione (trova
i dati di un impiegato, del dipartimento nel quale lavora e dei progetti in
cui e’ coinvolto)
Ristrutturazione – 9
Determinazione Carico Applicativo
Dobbiamo
accedere ad un’occorrenza di
Impiegato e di Afferenza e quindi di
Dipartimento. Successivamente , per avere i
dati dei progetti a cui lavora, dobbiamo
accedere (in media) a tre occorrenze di
Partecipazione e quindi a tre entita’ Progetto.
Tutto viene riassunto nella tavola degli accessi,
che costituisce una stima del costo
Ristrutturazione – 10
Determinazione Carico Applicativo
TAVOLA DEGLI ACCESSI
CONCETTO
Impiegato
COSTRUTTO ACCESSI TIPO
Entita'
1
L
Afferenza
Relazione
1
L
Dipartimento
Entita'
1
L
Partecipazione Relazione
3
L
Progetto
3
L
Entita'
Ristrutturazione – 11
Determinazione Carico Applicativo
Per valutare il secondo indice, l’occupazione di
memoria, è sufficiente utilizzare la tabella dei
volumi da cui prelevare il numero di occorrenze,
aggiungere la dimensione della singola
occorrenza ed ottenere quindi l’occupazione di
memoria di tutte le entità e relazioni.
Ristrutturazione – 12
• Una volta determinato il carico applicativo, ed
avendo dalla progettazione concettuale lo
schema
E-R,
tutti
gli
input
della
ristrutturazione sono noti.
• Si passa quindi alla ristrutturazione vera e
propria,
per
determinare
lo
schema
ristrutturato (output)
• La ristrutturazione consta di quattro fasi:
analisi delle ridondanze, eliminazione delle
generalizzazioni,
partizionamento/accorpamento di entità ed
associazioni, e scelta degli identificatori
principali (chiavi)
Ristrutturazione – 13
Ristrutturazione – 14
• Analisi delle Ridondanze: si decide se eliminare o
no eventuali ridondanze.
• Eliminazione delle Generalizzazioni: tutte le
generalizzazioni vengono analizzate e sostituite da
altro.
• Partizionamento/Accorpamento di entita’ ed
associazioni: si decide se partizionare concetti in
piu’ parti o viceversa accorpare.
• Scelta degli identificatori primari: si sceglie un
identificatore per quelle entita’ che ne hanno piu’ di
uno
Ristrutturazione – 15
Analisi delle ridondanze
•
•
•
•
Una Ridondanza in uno schema E-R è la presenza
di un attributo che può essere ricavato da altri. In
particolare, (vedi esempi nelle tabelle seguenti):
Attributi derivabili da altri attributi della stessa entita’
(importo lordo nella tabella fattura)
Attributi derivabili da attributi di altre entita’(o
associazioni) (Acquisto: Importo totale da Prezzo )
Attributi derivabili da operazioni di conteggio (Citta’:
Numero abitanti contando il numero di Residenza )
Associazioni derivabili dalla composizione di altre
associazioni in presenza di cicli. (Docenza da
Frequenza ed Insegnamento). Tuttavia i cicli non
necessariamente generano ridondanze (Tesi al posto
di Docenza).
Ristrutturazione – 16
Analisi delle ridondanze
Ristrutturazione – 17
Analisi delle ridondanze
• Vantaggi nell’avere e mantenere un dato
derivabile: riduce gli accessi per calcolare il
dato derivato.
• Svantaggi : occupazione di memoria e
necessita’ di effettuare operazioni aggiuntive
per mantenere il dato aggiornato
• Decisione: mantenere o eliminare? Basta
confrontare i costi di esecuzione delle
operazioni sull’oggetto
Ristrutturazione – 18
Analisi delle ridondanze
• Consideriamo l’esempio Citta’-Persona per
l’anagrafica di una regione.
• Operazione 1: memorizza una persona nuova
con la relativa citta’.
• Operazione 2: stampa tutti i dati di una
citta’(incluso il numero di abitanti).
• Valutiamo gli indici di prestazione per
l’attributo Numero Abitanti
Ristrutturazione – 19
Analisi delle ridondanze
• Si effettua una prima valutazione in presenza della
ridondanza:
• Assumendo che il numero di abitanti richieda 4 byte il
dato richiede 4*200 = 800 byte. L’operazione 1
richiede un accesso in scrittura a Persona uno in
scrittura a Residenza ed uno in lettura ed uno in
scrittura (per incrementare il numero di abitanti) a
Citta’ ripetuto 500 volte si hanno 1500 accessi in
scrittura e 500 in lettura. L’operazione 2 richiede un
solo accesso in lettura a Citta’ 2 volte al giorno .
Supponendo che la scrittura ha un costo doppio
rispetto ad una lettura si hanno 3500 accessi al
giorno in presenza della ridondanza.
Ristrutturazione – 20
Analisi delle ridondanze
• Si effettua una seconda valutazione in assenza
della ridondanza:
• Per l’operazione 1 ,un accesso in scrittura a Persona
ed uno in scrittura a Residenza per un totale di 1000
accessi in scrittura al giorno.Per l’operazione 2
abbiamo bisogno di un acceso in lettura a
Citta’(possiamo trascurare) e 5000 accessi in lettura a
Residenza in media (persone/citta’) per un totale di
10.000 accessi in lettura al giorno. Il totale e’ di
12000 accessi in lettura al giorno. Quindi 8500 in piu’
rispetto al caso di ridondanza contro meno di un solo
Kbyte di memoria in piu’. D’altra parte se l’operazione
2 fosse stata richiesta solo 1 volta ogni 4 settimane
avremmo avuto 3500*24=84000 accessi ogni 4
settimane con ridondanza contro 58000 in assenza.
Ristrutturazione – 21
Eliminazione delle generalizzazioni
• Il modello relazionale non permette di rappresentare
gerarchie quindi conviene trasformarle in altri concetti.
Ristrutturazione – 22
Eliminazione delle generalizzazioni
La prima soluzione prevede l’accorpamento dei figli nel
padre: le entita’ figlie vengono eliminate e le loro proprieta’
(attributi, associazioni, generalizzazioni) vengono aggiunte
al padre, che deve avere in più un attributo (TIPO) per
distinguere le entità figlie.
Ristrutturazione – 23
Eliminazione delle generalizzazioni
La seconda soluzione prevede l’accorpamento del padre
nei figli: l’entita’ padre viene eliminata e per ereditarieta’ i
suoi attributi, identificatori e relazioni vanno ai figli.
Ristrutturazione – 24
Eliminazione delle generalizzazioni
La terza soluzione prevede la sostituzione: la
generalizzazione si trasforma in associazioni uno ad uno che
legano padre e figli
Ristrutturazione – 25
Partizionamento/accorpamento
• I principi generali sono:
• gli accessi si riducono separando attributi
di uno stesso concetto che vengono
acceduti da operazioni diverse
• gli accessi si riducono raggruppando
attributi di concetti diversi che vengono
acceduti dalle medesime operazioni
Ristrutturazione – 26
Partizionamento/accorpamento
Esempio di partizionamento:
Ristrutturazione – 27
Partizionamento/accorpamento
• Nell’esempio precedente vengono create due
entita’ e gli attributi vengono divisi:
partizionamento verticale
• Se invece si suddivide in due entita’ con gli
stessi attributi (ad esempio Analista e
Venditore) con operazioni distinte sulle due si
ha il partizionamento orizzontale
Ristrutturazione – 28
Partizionamento/accorpamento
• Un caso particolare di partizionamento è quello
necessario per l’eliminazione di attributi multivalore,
generalmente non supportati dal modello relazionale
Ristrutturazione – 29
Partizionamento/accorpamento
Esempio di partizionamento di associazione:
Ristrutturazione – 30
Partizionamento/accorpamento
Esempio di accorpamento:
Ristrutturazione – 31
Partizionamento/accorpamento
L’accorpamento e’ giustificato se le operazioni
piu’ frequenti su Persona richiedono sempre i
dati relativi all’appartamento e quindi vogliamo
risparmiare gli accessi alla relazione che li lega.
Normalmente gli accorpamenti si fanno su
relazioni uno ad uno, raramente su uno a molti
mai su molti a molti.
Ristrutturazione – 32
Scelta degli identificatori
• Gli identificatori con valori nulli non possono essere
principali (non garantiscono l’accesso a tutti i record).
• Un identificatore semplice (pochi attributi) e’ da
preferire (indici piccoli fanno risparmiare memoria e
facilitano la programmazione).
• Un identificatore interno e’ preferibile ad uno esterno
(stesso motivo del precedente)
• Un identificatore usato da molte operazioni per
accedere alle occorrenze di un’entita’ e’ da preferire
(in quanto ottimizza il maggior numero di operazioni)
Traduzione – 1
Associazione molti a molti (m-n)
• Nel caso di associazione molti a molti, la
traduzione segue le regole:
• Ogni entita’ coinvolta si traduce in una
relazione (tabella) con lo stesso nome
dell’entità, avente i suoi stessi attributi e per
chiave il suo identificatore.
• La relazione si traduce in una relazione
(tabella) con lo stesso nome avente gli stessi
attributi e come chiave l’insieme di tutti gli
identificatori delle entita’ coinvolte.
Traduzione – 2
Associazione molti a molti (m-n)
Esempio:
• Impiegato(Matricola,Cognome,Stipendio)
• Progetto(Codice,Nome,Budget)
• Partecipazione(Matricola,Codice,Data inizio)
Traduzione – 3
Associazione molti a molti (m-n)
• Nell’esempio, esistono vincoli referenziali fra
Matricola,Codice di Partecipazione e gli
omonimi di Impiegato e Progetto.
• Per rendere piu’ comprensibile lo schema si
possono
rinominare
gli
attributi
di
partecipazione con Partecipazione(Impiegato,
Progetto,
Data inizio)
Traduzione – 4
Associazione molti a molti (m-n)
In caso di relazioni ricorsive, la ridenominazione può essere
indispensabile, come mostrato nell’esempio:
• Prodotto(Codice,Nome,Costo)
• Composizione(Composto,Componente,Quantita’)
• Esiste un vincolo referenziale tra Composto,Componente e
l’attributo Codice di Prodotto.
Traduzione – 5
Associazione molti a molti (m-n)
Esempio di associazione molti a molti con più di due entità
coinvolte (le regole sono le stesse):
• Fornitore(PartitaIVA,NomeDitta)
• Prodotto(Codice,Genere),
• Dipartimento(Nome,Telefono)
• Fornitura(Fornitore,Prodotto,Dipartimento,Quantita’)
Traduzione – 6
Associazione uno a molti (1-n)
• Nel caso di associazione uno a molti, la traduzione
segue le regole:
• L’entita’ partecipante con cardinalità (1,1) si traduce
in una relazione (tabella) con lo stesso nome
dell’entità, avente i suoi stessi attributi, per chiave il
suo identificatore e che ingloba anche la chiave della
entità che partecipa con cardinalità (1,n) (tale
attributo diventa quindi una chiave esterna), più tutti
gli eventuali attributi della associazione (che non avrà
quindi una tabella distinta come nel caso m-n).
• L’entita’ partecipante con cardinalità (1,n) si traduce
in una relazione (tabella) con lo stesso nome
dell’entità, avente i suoi stessi attributi, per chiave il
suo identificatore
Traduzione – 7
Associazione uno a molti (1-n)
Giocatore(Cognome,DataNascita,Ruolo,NomeSquadra,Ingaggio)
Squadra(Nome,Citta’,ColoriSociali)
Vincolo di integrita’ referenziale tra Nomesquadra di Giocatore e
Nome di Squadra.
Traduzione – 8
Associazione uno a molti (1-n)
Esempio di entità con identificatore esterno
(la regola ed il risultato sono ancora gli stessi):
Studente(Matricola,NomeUniversita,Cognome,AnnoIscrizione)
Universita(Nome,Citta,Indirizzo)
Vincolo referenziale fra NomeUniversita e Nome.
Traduzione – 9
Associazione uno a uno (1-1)
• Nel caso di associazione uno a uno con
partecipazione obbligatoria per entrambe le
entità (non (0,1) ma (1,1)), la traduzione segue le
regole:
• Una delle entita’ si traduce in una relazione (tabella)
con lo stesso nome dell’entità, avente i suoi stessi
attributi, per chiave il suo identificatore e che ingloba
anche la chiave della altra entità (tale attributo
diventa quindi una chiave esterna), più tutti gli
eventuali attributi della associazione (come nel caso
1-n, l’associazione non avrà una tabella distinta).
• L’entita’ restante si traduce in una relazione (tabella)
con lo stesso nome dell’entità, avente i suoi stessi
attributi, per chiave il suo identificatore
Traduzione – 10
Associazione uno a uno (1-1)
In base alle regole, sono possibili due soluzioni:
Direttore(Codice,Cognome,Stipendio,DipartimentoDiretto,InizioDirezione)
Dipartimento(Nome,Telefono,Sede)
oppure
Direttore(Codice,Cognome,Stipendio)
Dipartimento(Nome,Telefono, Sede, Direttore, InizioDirezione)
Esiste in teoria l’opzione di fondere tutto in un’unica tabella; tale opzione viene però
scartata perché se in sede di progettazione concettuale era stato deciso di avere
due entità legate da una relazione, diventa inopportuno tornare indietro in sede di
progettazione logica.
Traduzione – 11
Associazione uno a uno (1-1)
Qualora una delle entità partecipi alla associazione con cardinalità (0,1)
ossia è un’entità con partecipazione opzionale, delle due soluzioni si
preferisce quella in cui la associazione viene inglobata dall’altra entità
(quella che partecipa con cardinalità (1,1)), questo per evitare i valori nulli
che figurerebbero negli attributi relativi all’associazione qualora venissero
inglobati nell’entità che partecipa con cardinalità (0,1):
Impiegato(Codice,Cognome,Stipendio)
Dipartimento(Nome,Telefono,Sede, Direttore,InizioDirezione)
Traduzione – 12
Associazione uno a uno (1-1)
Per entrambe le entità con partecipazione opzionale,
l’associazione può essere tradotta in una tabella distinta
(come per il caso m-n):
Impiegato(Codice,Cognome,Stipendio)
Dipartimento(Nome,Telefono,Sede)
Direzione(Direttore,Dipartimento,DataInizioDirezione)
Questo sempre per evitare valori nulli negli attributi relativi
all’associazione.
Lo svantaggio è avere una tabella in più, quindi questa
soluzione conviene solo se le entità partecipano “poco”
all’associazione, in tal caso infatti sarebbero molti i valori nulli
e quindi è meglio avere una tabella distinta per l’associazione,
altrimenti l’associazione può essere inglobata sull’entità che
partecipa di più (per ridurre il numero dei valori nulli).
Traduzione – 13
Schema
Riassuntivo
delle
traduzioni
Traduzione – 14
Schema
Riassuntivo
delle
traduzioni
Traduzione – 15
Il risultato della progettazione logica è l’insieme di schema logico (elenco
tabelle), vincoli di integrità (che si accompagnano alle tabelle), e della
documentazione.
I vincoli di integrità possono essere rappresentati in maniera grafica:
Esempio di progettazione logica - 1
Esempio di progettazione logica - 2
Elenco delle operazioni:
• Operazione 1 :inserisci un nuovo partecipante con dati.
• Operazione 2 :assegna partecipante a corso.
• Operazione 3 :inserisci docente con dati e corsi che puo’ insegnare.
• Operazione 4 :assegna un docente abilitato ad un’edizione di corso.
• Operazione 5 :stampa informazioni su edizioni correnti di un corso
con titolo,orari lezioni e numero partecipanti.
• Operazione 6 :stampa tutti i corsi offerti con informazioni sui docenti
che possono insegnarli.
• Operazione 7 :per ogni docente trova i partecipanti a tutti i corsi da
lui insegnati.
• Operazione 8 :effettua una statistica su tutti i partecipanti ad un corso
con tutte le informazioni su di essi, sull’edizione alla
quale hanno partecipato e la relativa votazione.
Esempio di progettazione logica - 3
Ristrutturazione:
• Analisi delle Ridondanze
• Eliminazione delle gerarchie
• Partizionamento/Accorpamento
• Scelta degli identificatori
• Traduzione verso il Relazionale
Esempio di progettazione logica - 4
Esempio di progettazione logica - 5
Esempio di progettazione logica - 6
Analisi delle ridondanze:
• Numero di Partecipanti in Edizione Corso puo’
essere
derivato
dall’associazione
Partecipazione Attuale.
• Questo richiede 4* 1.000 = 4.000 bytes
• Le operazioni che coinvolgono Numero di
Partecipanti sono 2,5 e 8 (trascurabile
perche’non frequente e batch)
Esempio di progettazione logica – 7
Analisi delle ridondanze:
Con Ridondanza: per l’operazione 2 si hanno 2*50 =
100 accessi in lettura ed altrettanti in scrittura (che
valgono doppio) al giorno, mentre per la 5, 19*10 =
190 in lettura al giorno per un totale di 490 accessi in
lettura .
• Senza Ridondanza: per l’operazione 2 si hanno 50
accessi in lettura ed altrettanti in scrittura al giorno,
mentre per la 5, 29*10 = 290 in lettura al giorno per
un totale di 440 accessi in lettura .
• Quindi si elimina la ridondanza.
Esempio di progettazione logica - 8
Eliminazione delle gerarchie:
• Docenti: le operazioni che li riguardano (3,6 e 7) non fanno
riferimento al fatto che sia Collaboratore o Dipendente quindi si
accorpano i figli nel padre
• Partecipanti: le operazioni che li riguardano (1, 8) non fanno
distinzioni tra professionisti e dipendenti (pubblici o privati).
Tuttavia dalla tavola dei volumi risulta che la maggior parte dei
partecipanti sono dipendenti privati e che gli altri due tipi hanno
attributi propri. Quindi per risparmiare memoria e’ opportuno:
1) Eliminare Dipendente Privato aggiungendo un attributo
Privato
a
Partecipante
2) Lasciare le due entita’ Dipendente Pubblico e Professionista
aggiungendo due associazioni uno-ad-uno con Partecipante.
Cosi’ si evita di avere attributi nulli su Partecipante .
Esempio di progettazione logica - 9
Partizionamento/Accorpamento:
• Edizione di Corso: l’operazione 5 riguarda solo le edizioni
attuali;Docenza Attuale e Partecipazione Attuale fanno riferimento
solo a queste edizioni. Quindi si potrebbe pensare di partizionare
orizzontalmente in edizioni attuali e passate.Tuttavia le associazioni
Composizione e Tipologia andrebbero duplicate e le operazioni 7 ed
8 che non fanno distinzione fra le varie edizioni risulterebbero piu’
costose (raddoppio delle entita’).Quindi non partizioniamo.
• Docenza Passata e Docenza Attuale , Partecipazione
Passata e Partecipazione Attuale: le operazioni 7 ed 8 non
fanno differenza. Inoltre non e’ necessario, quando termina
un’edizione di corso, trasferire le occorrenze di un’associazione
(attuale) all’altra (passata). Per l’accorpamento delle partecipazioni
c’e’ solo l’inconveniente che Votazione si applica solo alle passate e
provoca valori nulli. Tuttavia la tabella dei volumi ci dice che
sprechiamo solo 4*500 bytes = 2Kbytes. Decidiamo di accorpare
le due relazioni.
Esempio di progettazione logica - 10
Scelta degli identificatori:
• Solo Partecipante ha due identificatori:codice fiscale e codice
interno. Scegliamo il secondo perche’ richiede solo 3
byte(deve distinguere 5000 elementi) invece che 16.
• Osserviamo (pragmaticamente) che Edizione Corso e’
identificata da Data Inizio e dall’entita’ Corso. Questo
pesante identificatore deve essere usato per realizzare due
associazioni (Partecipazione e Docenza) con molte
occorrenze. Tuttavia ogni corso ha un codice e che in media
il numero di sue edizioni e’ 5. Quindi basta aggiungere una
cifra al codice di un corso per avere anche l’edizione. Quindi
definiamo un nuovo identificatore per Edizione Corso che
sostituisce quello esterno.
Eliminiamo infine l’attributo multivalore Telefono dall’entita’
Docente introducendo un’opportuna relazione (Interesse)
Esempio di progettazione logica - 11
Esempio di progettazione logica – 12
Schema logico (elenco tabelle):
• Edizione(Codice,DataInizio,DataFine,CodCorso)
• Lezione (Ora,Aula,Giorno,CodEdCorso)
• Docente(CF,Cognome,Eta’,Citta’Nascita,Tipo)
• Telefono (Numero,CFDocente)
• Corso(Codice,Nome)
• Docenza (CodEdCorso,CFDocente)
• Abilitazione (CodCorso,CFDocente)
• Partecipante (Codice,CF,Cognome,Eta’,Citta’Nascita,Sesso,Societa’)
• Societa’(Nome,Telefono,Indirizzo)
• Dipendenza (CodPartecipante,NomeSocieta’)
• Professionisti (CodPartecipante,Area,Titolo)
• DipPubblici (CodPartecipante,Livello,Posizione)
Scarica

Progettazione Logica