vuoi
o PayPal
tutte le volte che vuoi
TOP DOWN:
partendo da uno schema astratto che riassume l’intero modelli in pochi costrutti
si applicano trasformazioni per precisare il modello, utilizzando anche i design
pattern.
Recensione:requisiti soddisfatti e visione globale dello schema ma non si presta
al lavoro di gruppo e devi partire con una chiara visione di insieme.
BOTTOM UP:
si modellano concetti elementari per poi iterativamente fonderli tra di loro per
schemi più complessi.
Recensione: anche se si presta bene ad un lavoro di gruppo presenta delle
difficoltà nell’aggregazione degli schemi.
INSIDE OUT:
porre al centro il core della base dati ed espandersi a macchia d’olio per definire
la periferia dello schema.
Recensione: si presta bene al lavoro di gruppo e semplifica notevolmente
l’aggregazione degli schemi.
Come si procede alla traduzione?
Per poter utilizzare il modello concettuale deve essere tradotto in una forma più vicina
a quella usata dai DBMS; ciò comporta l’inesistenza di alcuni costrutti e necessità di
garantire prestazioni ottimali.
Si deve procedere alla riorganizzazione del modello concettuale che soddisfi efficienza
e traducibilità.
Come calcolare l’efficienza?
Attraverso la quantità di memoria occupata e al tempo necessario per
rispondere alle interrogazioni. Esse si calcolano rispettivamente con
l’occupazione di memoria( quantità di spazio occorrente per memorizzare) e col
costo di esecuzione( numero di entità e relazioni coinvolte).
Come stimare l’occupazione della memoria?
Attraverso la tavola dei volumi che stima per ogni costrutto la taglia, ovvero il
peso che occupano i vari record al suo interno.
Come stimare l’efficienza del tempo?
Attraverso la tavola delle operazioni si osservano le operazioni da eseguire
osservando la frequenza, l’entità coinvolte e se è procrastinabile o meno.
Come muoversi in queste situazioni per ottimizzare il modello concettuale?
Affidarsi alla regola dell’80-20; cioè?
La riorganizzazione di un modello concettuale deve essere
prevalentemente finalizzata all'ottimizzazione delle operazioni più
pesanti(80% del carico applicativo) che in pratica sono solo una parte di
tutte le operazioni (il 20% delle operazioni).
Come individuare queste operazioni critiche?
Attraverso la tavola degli accessi che ha il compito di riportare il
costrutto( entità o relazione) e il tipo di accesso( scrittura o lettura) per
una certa operazione.
Come ristrutturare il modello concettuale?
Analisi delle ridondanze:
se un dato è presente più volte allora è ridondante implicitamente o
esplicitamente.
Anche se all’apparenza è un concetto negativo gode della possibilità di accesso
diretto ad un informazione evitando di appesantire un’operazione frequente.
In questi casi posso pensare di tenere questa ridondanza se le operazioni su
quel particolare dato son altamente frequenti e calcolarla passando da altri
costrutti porterebbe un costo di esecuzione troppo elevato.
Per calcolare la convenienza sfrutto le tabelle prima introdotte.
a) Attributi derivabili da altri attributi.
b) Attributi derivabili da attributi di altri concetti.
c) Attributi derivabili mediante conteggio delle occorrenze di una relazione.
d) Attributi derivabili mediante partecipazioni a relazioni ridondanti( due
percorsi per arrivare allo stesso risultato).
Eliminazione delle generalizzazioni:
Il modello relazionale non può rappresentare direttamente le generalizzazioni
per compensare a ciò ci sono tre strade:
Accorpamento delle figlie nella generalizzazione del genitore:
l’entità padre acquista la somma degli attributi delle figlie e le distingue
tra di loro con un attributo.
Recensione: va ad ottimizzare le operazioni svolte su tutte le istanze ma
occupa molto spazio ed ammette dati inutili o impossibili.
Accorpamento dell’entità padre nelle entità figlie:
si va ad eliminare l’entità padre con le sue proprietà( attributi e
partecipazioni a relazioni) che sono replicate su ciascuna entità figlia.
Recensione: va ad ottimizzare operazioni svolte sulle singole entità figlie
ed occupa poco spazio perché evita attributi vuoti ma di contro aumenta
la complicatezza delle relazioni e penalizza operazioni su tutte le istanze.
Sostituzione della generalizzazione con una relazione:
trasformo la generalizzazione in relazioni 1 a 1 con ciascun delle entità
figlie con struttura che rimane immutata.
Recensione: ottimizza operazioni sugli attributi comuni e sugli attributi
specifici di una entità figlia; ma rende complicate le operazioni miste tra
attributi comuni e attributi specifici.
Partizionamento/accorpamento di entità e associazioni:
il tempo di esecuzione di una operazione è proporzionale al lavoro da fare per
circoscrivere una certa regione di dati in una tabella. Come è possibile
ottimizzare questo lavoro?
Attraverso un partizionamento dell’entità con decomposizione verticale;
ovvero? Dividere gli attributi dell’entità mettendo in evidenza gli attributi
richiesti frequentemente per poi associarli con relazioni 1 a 1.
Quando è che si parla di decomposizione orizzontale? Nel caso in cui sono
interessato solo su un sottoinsieme di istanze con un dato attributo
cosicché divida l’entità in tante entità quante sono le forme con cui
questo attributo si manifesta.
Il tempo di esecuzione di una operazione è proporzionale al numero di concetti
coinvolti. Come è possibile ottimizzare questo lavoro?
Attraverso un accorpamento delle entità; ovvero? Fonde due entità in una
sola nella quale le occorrenze della prima entità sono fuse con le
occorrenze della seconda entità con cui erano in relazione.
Ciò risulta utile quando esistono operazioni che accedono
simultaneamente agli attributi di entrambe le entità cosicché l’operazione
venga svolta accedendo ad una sola entità.
Tuttavia le istanze dell’entità accorpata si ripetono per ogni istanza
precedentemente associata, non risulta un problema per relazioni 1 a 1
ma è inapplicabile per relazioni 1 a N o N a N.
Come per l’entità lo stesso ragionamento si applica con le relazioni.
Scelta degli identificatori primari:
La traduzione dal modello concettuale al modello logico richiede, per ciascuna
entità, la traduzione in chiave primaria di uno degli identificatori.
Come passare al modello logico?
Una volta ottimizzato questo modello concettuale bisogna tradurlo nel modello logico;
vediamo come può essere strutturato questo modello logico:
per capire il modello relazionale bisogna prima introdurre i concetti matematici
di relazione ed ennupla.
Dati due domini il prodotto cartesiano è definito come l’insieme di tutte le
possibili coppie tra elementi dei due domini( ogni singola combinazione è detta
ennupla). Un sottoinsieme ordinato di questo prodotto cartesiano è definito
relazione matematica che deve rispettare delle stringenti proprietà:
Non esiste un ordinamento tra diverse ennuple.
Ciascuna ennupla è distinta in almeno un campo da un’altra.
Ciascuna ennupla è ordinata secondo i vari domini.
Detto ciò possiamo osservare la limitatezza di questo sistema dal momento in
cui è la posizione a determinare il ruolo del dominio, quindi se si ignora il
significato delle diverse posizioni si stravolge il significato dell’informazione.
Per facilitare ciò si è ideato il modello relazione che, dalla fine degli anni 70, è il
modello logico maggiormente diffuso.
Su cosa si basa?
Ciascuna relazione può essere rappresentata attraverso una tabella, e
viceversa. Inoltre i riferimenti tra dati in tabelle diverse sono espressi per mezzo
di valori, cosicché sia trasferibile facilmente anche su diversi archivi.
Andiamo a osservare nel dettaglio questo modello relazione:
data una tabella per prima cosa associamo ad essa un nome( esso identifica la
relazione) e per ogni colonna, e quindi per ogni dominio, associamo un nome
distinto( esso identifica l’attributo).
In comune con la relazione matematica si può osservare come non esiste un
ordinamento tra diverse ennuple e come ciascuna di esse sia distinta in almeno
un campo da un’altra. In più questo modello relazione ha la qualità che la
struttura può essere alterata cambiando l’ordine delle colonne.
Il ruolo delle ennuple cambia radicalmente; infatti esse diventano delle funzioni che
associano a ciascun attributo un valore del proprio dominio di appartenenza.
Identifichiamo con schema di relazione di nome R un insieme di attributi e lo
indichiamo :
R rappresenta il nome della relazione ed i diversi A sono gli attributi della
relazione R. Essa rappresenta la parte intensionale della relazione ed ha il
compito di descrive i nomi degli attributi.
Identifichiamo con relazione un insieme di r ennuple.
Essa rappresenta l’informazione presente nella relazione ed è anche detta parte
estensionale.
Identifichiamo con schema di base di dati un insieme di schemi di relazione; mentre
identifichiamo con istanza di base di dati un insieme di relazioni.
Quando è necessario l’utilizzo di tabelle multiple?
Nel caso in cui i dati da rappresentare facciano riferimento a concetti diversi è
preferibile rappresentarli utilizzando più tabelle, tra loro collegate. Tuttavia La
strutturazione in tabelle multiple deve però essere realizzata senza perdita di
informazione ed è necessario ipotizzare di mettere in correlazione dati di tabelle
diverse.
Numerosi modelli logici prevedono dei puntatori espliciti per creare dei
riferimenti tra diverse tabelle, ciò rende difficoltoso il trasferimento della
base dati in un diverso archivio.
Nel modello relazionale i riferimenti sono espressi implicitamente
mediante l’uso di valori, cosicché sia possibile determinare la riga di
un’altra tabella cui si intende fare riferimento.
Quali valori scegliere?
Un insieme di attributi che identifica univocamente una ennupla è definito super
chiave, ovviamente possono esistere più super chiavi in una relazione( ad
esempio dati degli attributi che rappresentano una super chiave,
aggiungendone un altro attributo rimane comunque un super chiave).
Formalmente: r non contiene due ennuple distinte t1 e t2 tali che i valori
che t1 assume sugli attributi K (t1[K]) sono identici ai valori che t2
assume sugli attributi K (t2[K]) .
Identifichiamo con chiave di una relazione una super chiave che non contiene al
suo interno un’altra super chiave.
Non esistendo