Anteprima
Vedrai una selezione di 12 pagine su 54
Appunti Informatica Pag. 1 Appunti Informatica Pag. 2
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 6
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 11
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 16
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 21
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 26
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 31
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 36
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 41
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 46
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Appunti Informatica Pag. 51
1 su 54
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Traduzione da modello ER a modello relazionale

L'informatico esperto ha appena concluso la fase concettuale, ovvero ha appena prodotto il modello ER che descrive la nostra realtà di interesse. Non possiamo utilizzare un DBMS a partire dallo schema ER. Il nostro obiettivo è quello di arrivare allo schema relazionale per poter utilizzare il DBMS. Bisogna passare dal processo concettuale a quello logico. Questo passaggio si può compiere attraverso un algoritmo.

L'input è lo schema ER, l'output non è il database, bensì è uno schema di database relazionale, cioè un insieme di schemi di tabelle (come sono fatte le tabelle e i relativi vincoli). Questo schema relazionale, ottenuto per mezzo dell'algoritmo, è un passo concreto verso l'implementazione della nostra base di dati, perché, fatto ciò, prendiamo lo schema e andiamo ad inserirlo all'interno di un database vero e proprio.

Il tuo compito è formattare il testo fornito utilizzando tag html.

ATTENZIONE: non modificare il testo in altro modo, NON aggiungere commenti, NON utilizzare tag h1;

proprio.L’algoritmo riceve in input uno schema ER e produce in output uno schemarelazionale, quindi schemi di relazioni (tabelle) e vincoli.L’algoritmo si compone solo di due passi:

Traduzione delle entità

Traduzione delle relazioni

Questo algoritmo è implementabile e implementato. A questo punto non bisogna piùmettere in discussione la concettualizzazione, ormai lo schema concettuale è statoelaborato.

Il primo passo prevede la traduzione delle entità. Ciascuna entità dello schema ERgenera una tabella nello schema finale relazionale.

Quelli che sono gli attributi delle entità diventano i campi della tabella, con la solaparticolarità delle identificazioni.

Quelle che sono le identificazioni delle entità nello schema ER diventano chiavi dellatabella. Se ci sono più identificazioni, ciascuna di essa diventa una chiave candidata,ma ne verrà scelta solo una che diventerà la chiave primaria

(l'unica o la più rappresentativa). Se nel nostro schema abbiamo un'entità E con due attributi, uno è l'identificazione e l'altro è generico, questo passo prevede che venga aggiunto allo schema del database relazionale lo schema di questa nuova tabella E che ha due campi corrispondenti ai due attributi: E(id,attr). Quella che era l'identificazione dell'entità nello schema ER diventa chiave.

Nella tabella E non bisogna mettere i dati. Lo scopo ora è solo quello di definire come è fatto il database. L'algoritmo ci porterà ad avere uno schema relazionale ben fatto, con tutte le caratteristiche, senza ridondanze, con i vincoli, senza problematiche, ecc.

Il nostro output sarà uno schema relazionale completo.

Altro caso in cui l'identificazione nel modello ER è realizzata non dal singolo attributo ma da più attributi, ida e idb, che insieme costituiscono l'identificazione.

In questo caso, la traduzione diventa E(ida,idb,attr). La chiave primaria è l'unione fra ida e idb: i due campi insieme costituiscono la chiave. Se entrambe le identificazioni rappresentano delle chiavi, queste sono chiavi candidate. Ne scelgo una, non importa, quale, e una diventa la chiave primaria e una diventa la chiave candidata: E(ida,idb,attr). Quando si fa la traduzione bisogna segnare che anche idb è una chiave candidata che non ammetterà valori duplicati. Termina così il passo 1.

Inizia il passo 2, che è la traduzione delle relazioni. Abbiamo delle relazioni, in questo caso quelle binarie, ovvero le più utilizzate. Ci sono quindi due entità, E1 e E2, ciascuno con due attributi (id1, attr1, id2, attr2), e c'è una relazione fra le due entità, la quale è a sua volta dotata di un attributo. Bisogna semplicemente osservare le cardinalità della relazione. Si hanno tre casi a seconda che la relazione sia di tipo:

molti a molti, uno a uno, uno a molti. Si guarda in sostanza, almeno in partenza, soltanto la cardinalità massima di ciascuna delle partecipazioni alla relazione da parte dell'entità. In questo caso (x,y) sono le cardinalità della partecipazione di E1 a R; (u,v) sono le cardinalità della partecipazione di E2 a R. Si guardano solo i simboli y e v, ovvero le cardinalità massime. Le cardinalità ci permettono di classificare le relazioni. Se da entrambe le parti, sia y sia v, abbiamo un valore maggiore di 1 o N (quando non sappiamo quantificarlo), allora la relazione è di tipo molti a molti: ogni elemento di E1 può essere in relazione con più elementi di E2 e viceversa. Quando y è 1 e v è un valore maggiore di 1 o N, si ha una relazione uno a molti: ogni elemento di E1 è in relazione al più con un elemento di E2, mentre ogni elemento di E2 può essere in relazione con più elementi di E1.

Tratta di una relazione asimmetrica. Nel caso in cui sia y sia v valgono uno, si tratta di una relazione uno a uno. È la relazione biunivoca: ogni elemento di E1 è al più in relazione con un elemento di E2 e viceversa. Queste tre tipologie sono tutte quelle possibili, ciascuna prevede un passo diverso dell'algoritmo.

PRIMO CASO: RELAZIONE N:N (molti a molti)

In questo caso il primo passo resta la traduzione delle due entità. Dopodiché bisogna tradurre la relazione R, che è una relazione molti a molti. Essa si traduce creando una nuova tabella, un nuovo schema di relazione R in cui i campi sono la chiave della tabella originata dalla traduzione della prima entità E1, cioè id1, e la chiave della tabella originata dalla traduzione della seconda entità coinvolta E2, cioè id2, e infine metto gli eventuali attributi specifici della relazione (attr).

Quando ho una relazione molti a molti genero una nuova tabella in cui metto:

La chiave

id2 di E2. Questo significa che i valori presenti nella colonna id1 di R devono essere presenti nella colonna id1 di E1, e i valori presenti nella colonna id2 di R devono essere presenti nella colonna id2 di E2. Per implementare questi vincoli, possiamo utilizzare i tag HTML per creare una tabella e definire le colonne e i vincoli di integrità referenziale. Ecco come potrebbe apparire il testo formattato:
Chiave Attributi specifici della relazione
E1 La chiave della prima tabella
E2 La chiave della seconda tabella

Ogni tabella ha una chiave, almeno una. Quindi l'algoritmo ci suggerisce anche qual è la chiave.

Abbiamo una relazione molti a molti. Se la chiave di questa nuova relazione fosse id1, significherebbe non poter avere due tuple nella nuova tabella in cui si ripete il valore di id1, ciò è sbagliato poiché nello schema ER si dice che lo stesso individuo di E1 può avere più relazioni R con elementi anche diversi di E2, perciò deve potersi ripetere lo stesso elemento; stessa cosa per id2, essa non può essere la chiave per lo stesso motivo.

Perciò la chiave della nuova tabella è l'unione di id1 e id2: R(id1, id2, attr).

A questo punto bisogna aggiungere anche i vincoli di integrità referenziale. Abbiamo un vincolo della chiave esterna id1 di R che punta verso id1 di E1, allo stesso tempo modo id2 di R che punta verso id2 di E2. Questo significa che i valori presenti nella colonna id1 di R devono essere presenti nella colonna id1 di E1, e i valori presenti nella colonna id2 di R devono essere presenti nella colonna id2 di E2.

di1 di E1. L'algoritmo ci dice di imporre questi vincoli perché vogliamo avere come valori possibili di id1 solo valori che compaiono già nella tabella E1; il vincolo non è simmetrico, la freccia va messa verso E1 perché sta ad indicare che in R potranno anche non esserci tutti i valori di id1, l'importante è che quelli che ci sono siano anche presenti in E1. Stesso discorso per id2. SECONDO CASO: RELAZIONE 1:N (uno a molti) Da un lato abbiamo cardinalità massima 1, dall'altro N: ciò crea una relazione asimmetrica, i singoli individui appartenenti all'insieme E1 hanno al più un legame solo con un solo elemento di E2, mentre dall'altra parte, il singolo individuo presente nell'insieme E2 potrebbe essere legato a più elementi di E1, non c'è alcun vincolo. Anche qui si fa la traduzione delle due entità: E1 (id1, attr1) e E2 (id2, attr2) con le rispettive chiavi. La traduzione di

Questa relazione può essere fatta in due modi, diversi ma equivalenti, entrambi corretti:

La prima possibilità è molto simile al caso precedente. Creiamo una nuova tabella R (id1, id2, attr), proprio come nel caso molti a molti. La differenza sta nella chiave: in questo caso la chiave è solo id1, perché è la chiave della tabella che abbiamo ottenuto facendo la traduzione di E1, che è l'entità che partecipa con cardinalità massima 1 alla relazione: R (id1, id2, attr). La chiave è quella della tabella relativa all'entità dove c'è la cardinalità massima 1, perché si vuole catturare una situazione in cui, se prendiamo gli elementi di E1, questi saranno in relazione al massimo con un elemento di E2. In termini di tabella questo significa che non dovrò mai ripetere nelle tuple della tabella i valori di E1. Se prendo due tuple nella tabella R che sto definendo, queste due non

potrannoavere lo stesso valore per quanto riguarda id1, poiché se avessimo due tuple che hanno lo stesso valore per id1, significa che abbiamo messo quell'individuo di E1 rappresentato da quel valore di id1 in relazione con due elementi di E2. Mal'ER ci dice che non è così: ogni elemento di E1 deve essere al massimo in relazione con un elemento di E2, perciò nella tabella non si potrà ripetere. I vincoli di integrità referenziale sono uguali al caso molti a molti. Il valore id1 della relazione R con il valore id1 della relazione E1 e lo stesso per id2. Riassumendo, questa prima alternativa prevede soltanto che si faccia la traduzione delle due entità, la creazione di una nuova tabella con le due chiavi id1 e id2 e l'eventuale attributo specifico della relazione, la chiave è solo la chiave id1, che è quella dell'entità che partecipa alla relazione con cardinalità massima 1. I vincoli sono isoliti. C'è una seconda possibilità. Abbiamo tradotto E1 nella tabella E1 (id1, attr1) e E2 (id2, attr2). Si può non creare una nuova tabella, ma si può modificare una delle tabelle esistenti, per tradurre la relazione R. Si va a modificare di nuovo la tabella E1 (perché è quella che partecipa con cardinalità massima 1) e si va a mettere in E1 gli attributi che avremmo messo nella nuova tabella, cioè la chiave dell'altra entità, id2, e gli eventuali attributi specifici della relazione: E1 (id1, attr1, id2, attr). Questo perché si tratta di una relazione asimmetrica. Adottando questa alternativa, non bisogna più pensare alla chiave, che rimane id1. Bisogna solo aggiungere il vincolo di integrità referenziale tra id2 in E1 e id2 in E2. TERZO CASO: RELAZIONE 1:1 (uno a uno) Anche in questo caso, si tratta di una relazione tra due entità che partecipano con cardinalità massima 1. Possiamo rappresentare questa relazione aggiungendo un attributo nella tabella di una delle entità coinvolte. Ad esempio, se abbiamo le entità E1 (id1, attr1) e E2 (id2, attr2), possiamo aggiungere l'attributo id2 nella tabella E1: E1 (id1, attr1, id2). In questo modo, ogni riga della tabella E1 sarà associata ad una riga della tabella E2 tramite l'attributo id2.
Dettagli
Publisher
A.A. 2021-2022
54 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher vlessivv di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Torino o del prof Pozzato Gian Luca.