Il modello Entità - Relazioni di Giuseppe Sacco
Primo approccio alla realizzazione di una base di dati
Nel momento in cui si vuole realizzare una base di dati da gestire al calcolatore
si deve innanzitutto analizzare approfonditamente il problema per capire
quali sono le entità in gioco e quili le relazioni tra le entità.
Questa fase permette di realizzare il modello (o schema) della base di
dati, cioè un disegno simile a quello proposto qui sopra per il
problema del calcetto.
La scelta delle entità e delle relazioni deve essere determinata
sostanzialmente dal tipo di operazioni che ci si vogliono fare. Non ci
si dovrebbe a questo livello fare influenzare dalle caratteristiche del
programma che si vuole utilizzare, casomai si dovrebbe scegliere il programma
da utilizzare solo successivamente al disegno del modello. (Queste considerazioni
in realtà andrebbero fatte solo in presenza di attività critiche
e non delle normali basi di dati che normalmente una singola persona può
avere bisogno di realizzare.)
Definire i dati
Una volta definito lo schema si passa alla realizzazione dello stesso tramite
un DBMS. In genere questi programmi mettono a disposizione un linguaggio
per la realizzazione degli schemi che si chiama SQL Structured Query
Language. Tramite questo linguaggio è possibile creare la tabella
socio
tramite questo comando:
CREATE TABLE Socio (
tessera NUMBER CONSTRAINT pk_tessera PRIMARY KEY,
nome VARCHAR2(20) CONSTRAINT nn_nome NOT NULL,
cognome VARCHAR2(40),
dataiscr DATE DEFAULT SYSDATE,
datainizio DATE,
datafine DATE);
Questo comando crea una tabella che ha cinque campi. Sul primo campo
è stato messo un vincolo (CONSTRAINT) che lo fa divenire
chiave primaria, sul secondo il vincolo che non sia mai un campo nullo.
Sul quarto campo è stato definito un valore di default. Ad ogni
campo è ovviamente associato un tipo.
Vediamo ora la definizione della tabella squadra che presenta
anche delle chiavi esterne:
CREATE TABLE Squadra (
nome VARCHAR2(20) CONSTRAINT pk_nome PRIMARY KEY,
portiere NUMBER CONSTRAINT fk_portiere REFERENCES Socio(tessera),
difdx NUMBER CONSTRAINT fk_difdx REFERENCES Socio(tessera),
difsx NUMBER CONSTRAINT fk_difsx REFERENCES Socio(tessera),
attdx NUMBER CONSTRAINT fk_attdx REFERENCES Socio(tessera),
attsx NUMBER CONSTRAINT fk_attsx REFERENCES Socio(tessera));
Si vede che di nuovo c'è solo il vincolo di chiave esterna (REFERENCES.)
Definire gli operatori
Una volta definito lo schema in maniera completa si passa a definire gli
operatori, vale a dire delle funzioni che permettano di ricercare, aggiungere
o modificare i dati memorizzati nelle tabelle. Ad esempio, vediamo come
scrivere una funzione che permetta di avere l'elenco di tutte le squadre
impegnate in un certo torneo.
CREATE PROCEDURE SquadreInTorneo (nometorneo IN VARCHAR2(20))
AS BEGIN
SELECT DISTINCT squadra.nome
FROM squadra, incontro
WHERE incontro.torneo = nometorneo AND
(incontro.squadra = squadra.nome OR
incontro.squadraavversaria = squadra.nome)
END;
Ottimizzare
Una volta che avete terminato la definizione dello schema e avrete "nascosto"
la vostra applicazione tramite una interfaccia grafica accattivante si
arriverà all'utilizzo Dopo parecchio tempo noterete che il sistema
non è più sufficientemente veloce per i vostri gusti. Niente
paura! Non è il caso di uscire di casa per comperare una macchina
più veloce, ma semplicemente si deve passare alla fase di ottimizzazione
dello schema della base di dati o del programma che la gestisce.
Conclusioni
Adesso sappiamo come definire un semplice schema di basi di dati e conosciamo
alcuni comandi SQL per implementarlo. In articoli successivi passeremo
in rassegna i principali comandi SQL e vedremo quali sono i programmi disponibili
nell'ambito gratuito e in quello commerciale. Alla fine si vedrà
anche come occuparsi dell'ottimizzazione.
|