Traduzione in schema relazionale
Traduzione di un'associazione multipla
In caso di associazione multipla, l’entità centrale può presentare più chiavi esterne, che puntano a chiavi primarie di tabelle diverse.
Traduzione di un'associazione ricorsiva
Un’associazione ricorsiva è un’associazione che non unisce due entità ma ritorna in se stessa. In un’associazione di questo genere la chiave esterna punta alla chiave primaria dell’entità stessa da cui proviene.
Traduzione di più associazioni ricorsive
In una stessa tabella possono essere presenti più associazioni ricorsive. Esse si traducono indipendentemente, con tante chiavi esterne quante sono le associazioni e ciascuna che punta alla chiave primaria dell’entità stessa da cui proviene.
Traduzione di attributi strutturati
Se ci sono attributi strutturati si procede creando per ogni attributo un campo separato (perché creando un singolo campo per l’attributo strutturato dopo saremmo limitati nel caso in cui dovessimo aggiornare o ricercare singole parti di esso).
Traduzione di attributi multivalore
Se ci sono attributi multivalore si procede creando una nuova tabella con la chiave esterna che fa riferimento alla chiave primaria della tabella madre e l’attributo in questione.
Traduzione di attributi strutturati multivalore
Se ci sono attributi strutturati multivalore si procede creando una nuova tabella con chiave esterna che fa riferimento alla chiave primaria della tabella madre e accanto ad essa saranno presenti i vari attributi composti.
Traduzione dei vincoli
Una chiave esterna, al contrario di una chiave primaria, può assumere valori nulli e valori ripetuti. Il programmatore, però, può imporre dei vincoli su di essa.
La differenza tra i due esempi è che nel primo [Madre, ha, Figlio] è presente la totalità da entrambi i lati in quanto una madre, per essere tale deve necessariamente avere un figlio, e un figlio, per essere tale, deve avere necessariamente una madre; mentre nel secondo [Donna, ha, Figlio] manca la totalità dal lato dell’entità Donna in quanto non è detto che una donna debba necessariamente avere un figlio per essere tale, mentre la totalità dal lato dell’entità Figlio è presente per il motivo di cui sopra.
Vincolo di obbligatorietà
Per esprimere il vincolo di obbligatorietà (esiste una sfumatura di significato col vincolo di totalità anche se spesso i due termini sono usati intercambiabilmente) si usa il comando NOT NULL. Esso è particolarmente interessante quando applicato a chiavi esterne.
Ad esempio: CF Madre NOT NULL
In questo esempio, praticamente, si sta imponendo che tutti i figli hanno necessariamente una madre (in quanto si sta imponendo che i codici fiscali delle madri non possono essere nulli e che quindi, ogni figlio, deve avere una madre). Si badi che con l’obbligatorietà delle chiavi esterne si può esprimere il vincolo di totalità solo dal lato N, e quindi non lo si può esprimere dal lato 1 (cioè dal lato [Madre, ha]).
Vincolo distinct o unique
Un altro vincolo interessante che può essere applicato sulle chiavi esterne è il vincolo distinct o unique. Esprime il fatto che non ci possono essere valori ripetuti per un attributo. Quindi, ad esempio CF Madre DISTINCT si sta imponendo che una madre può avere un solo figlio in quanto il codice fiscale della madre non può essere ripetuto più volte per quanti figli ha.
In definitiva con le chiavi esterne si può rappresentare la totalità della diretta ma non la totalità dell’inversa.
Vincoli di integrità referenziale
Per quanto riguarda i vincoli di integrità referenziale il dominio della chiave esterna è incluso nel dominio della chiave primaria cioè: ⊆aDom (FK) aDom (PK). Non può quindi succedere che la chiave esterna della tabella punti ad un valore non esistente nella tabella a cui fa riferimento.
Ad esempio, non può essere inserito una chiave esterna CFMADRE nella tabella figlio se prima non è inserita la chiave primaria CFMADRE della tabella madre.
Traduzione delle molteplicità
Molteplicità 1:1 senza totalità
In questo caso si procede inserendo la chiave esterna indifferentemente in una delle due tabelle.
Molteplicità 1:1 con totalità
In questo caso è preferibile inserire la chiave esterna dove c’è la totalità, in questo modo la chiave esterna non presenterà valori nulli e quindi non causerà uno spreco di spazio.
Molteplicità 1:N
In questo caso si procede inserendo la chiave esterna dove c’è la N, in questo modo non si producono tuple ripetute.
Molteplicità M:N
In questo caso si procede creando una nuova tabella inserendo le chiavi esterne delle due tabelle derivanti e eventualmente gli attributi che presenta l’associazione.
Traduzione dei vincoli di specializzazione e generalizzazione
Siccome non è possibile rappresentare direttamente i vincoli di specializzazione e generalizzazione col modello relazionale, occorre adattarli, comprimerli nello schema relazionale operando delle scelte di compromesso. Per effettuare la traduzione si può scegliere tra 3 metodi diversi, ognuno dei quali presenta vantaggi e svantaggi. I 3 metodi sono:
- Creazione di una tabella unica
- Tecnica del partizionamento verticale
- Tecnica del partizionamento orizzontale
1° Metodo: Tabella unica
In questo metodo si crea un’unica tabella che contiene gli attributi della superclasse, gli attributi di tutte le sottoclassi e uno o più discriminatori che serviranno per specificare a quale sottoclasse appartiene la tupla.
Se siamo in presenza di disgiunzione (come nell’esempio [Studente, Matricole, Laureandi]) si procede inserendo un solo attributo discriminatore capace di rappresentare separatamente le 2 sottoclassi. L’attributo Discriminatore, in questo caso, è un attributo booleano che specifica se la tupla appartiene alla sottoclasse Matricole o all’altra sottoclasse Laureandi.
Se invece non c’è disgiunzione (come nell’esempio [Studente, Maggiorenne, Patentato]) allora non può essere usato un solo discriminatore in quanto non si possono rappresentare le 2 sottoclassi separatamente perché esse si sovrappongono. Gli attributi Maggiorenne e Patentato, in questo caso, sono degli attributi discriminatori booleani che specificano se la tupla appartiene alla sottoclasse Matricola o all’altra sottoclasse Laureando.
Vantaggi:
È conveniente usare questo metodo quando gli attributi specifici (cioè gli attributi delle sottoclassi) sono pochi.
Svantaggi:
- Il primo svantaggio è che bisogna creare 1 o più discriminatori.
- Il secondo svantaggio è che nelle tuple potrebbero esserci molti campi vuoti (in quanto ogni tupla appartiene ad una solamente delle sottoclassi, di conseguenza gli attributi delle altre sottoclassi rimarranno vuote).
2° Metodo: Partizionamento verticale
Utilizzando la tecnica del partizionamento verticale non si fa altro che creare, oltre alla tabella della superclasse, anche una tabella per ogni sottoclasse contenente:
- Gli attributi specifici della sottoclasse stessa
- Una chiave esterna comune alle tabelle delle sottoclassi (che funge anche da chiave primaria).
Vantaggi:
Questo metodo conviene quando ci sono molti attributi specifici delle varie sottoclassi.
Svantaggi:
- Il primo svantaggio è che utilizzando questo metodo si ha una suddivisione dei dati (quindi i dati vengono sparsi) ed, eventualmente, servirà ricostruirli se si necessita di una visione completa.
-
Teoria risposte domande frequenti esame Basi di Dati
-
Basi di Dati - Domande e Risposte
-
Domande esame
-
Domande esame II Ragioneria