GESTIONE ABBONAMENTI RIVISTE Si vogliono gestire, con una base di dati, le informazioni relative agli abbonamenti a riviste da parte di utenti di cui si deve tener conto della città di residenza. Gli elementi caratterizzanti il problema sono : gli abbonati, le riviste e le città. Ogni abbonato può avere abbonamenti a più riviste. Considerato il problema proposto si realizzi: uno schema concettuale della base di dati; uno schema logico della base di dati; la definizione delle relazioni della base di dati in linguaggio SQL. Analisi dei dati Le entità che possono essere individuate per risolvere il problema sono : ENTITA Città Rivista Abbonato contiene l elenco delle città in cui risiedono gli abbonati; contiene l elenco delle riviste; contiene l elenco degli abbonati; Gli attributi, per ciascuna entità, individuati per risolvere il problema sono : ATTRIBUTI Sistema informativo Gestione Abbonamenti Riviste Tipo di entità Attributi Città idcittà, Nome della città; Rivista idrivista, Titolo della rivista, Costo dell abbonamento; Abbonato idabbonato, Cognome, Nome; Tra l entità Rivista e l entità Abbonato esiste un associazione molti-a-molti in quanto un abbonato può essere abbonato ad una o più riviste e ciascuna rivista può essere soggetta di abbonamento da uno o più abbonati. Tra l entità Città e l entità Abbonato esiste un associazione uno-a-molti in quanto una città è la residenza di uno o più abbonati e ciascun abbonato ha la residenza in una sola città. Esempio di Progettazione di un database a cura del Prof. Salvatore DE GIORGI Pag. 1
Schema concettuale della base di dati Le relazioni tra i tipi di entità nel modello dei dati sono individuate nel seguente Modello Entità/Associazioni (E/R) : ABBONATO CITTA Abbonamento DataAbbonamento RIVISTA Nel modello E/R, inoltre, sono stati indicati, oltre ai nomi delle entità, l opzionalità od obbligatorietà delle associazioni (indicate rispettivamente con linea tratteggiata o continua). Il modello viene verificato utilizzando le regole di lettura : ogni rivista può essere soggetta di abbonamento da parte di uno o più abbonati, ogni abbonato deve essere abbonato ad una o più riviste. ogni città deve essere la residenza di uno più abbonati (si considera il caso di utilizzare solo le città in cui risiede almeno un abbonato e non tutte le città), un abbonato deve essere risiedere in una sola città. Esempio di Progettazione di un database a cura del Prof. Salvatore DE GIORGI Pag. 2
Schema logico della base di dati Come tipo di schema logico, dovendo poi realizzarlo nello standard SQL, si sceglie di utilizzare quello relazionale. Applicando le regole di corrispondenza tra il modello E/R ed il modello Relazionale si passa dal precedente schema concettuale al modello logico che viene descritto sia nella forma testuale che in quella grafica. Rappresentazione testuale dello schema logico : Nella rappresentazione testuale si elencano le tabelle (indicando per ciascuna i campi) che rappresentano le entità dello schema concettuale e le tabelle che rappresentano le eventuali relazioni molti-a-molti, introducendo, inoltre, le chiave esterne per rappresentare le associazioni (le chiavi primarie sono sottolineate, le chiavi esterne sono in corsivo). Nello schema E/R precedente si può osservare che esiste una relazione molti-amolti (N:N) tra i tipi di entità Abbonato e Rivista. Applicando il processo di normalizzazione (definito dalle forme normali) si deve inserire una entità ausiliaria (Abbonamento) che trasforma la relazione molti-a-molti in due relazioni : uno-a-molti (1:N) tra Abbonato e Abbonamento, e molti-a-uno (N:1) tra Abbonamento e Rivista. Si definiscono, innanzitutto, le tabelle che rappresentano le entità dello schema concettuale e successivamente si definiscono le tabelle che rappresentano le associazioni. Le seguenti tabelle rappresentano le entità : tbcittà (idcittà,città) tbriviste (idrivista, rivista, costo) tbabbonati (idabbonato, abbonato, kscittà) La seguente tabella rappresenta l associazione molti-a-molti : tbabbonamenti (ksrivista, ksabbonato, dataabbonamento) Per realizzare l associazione uno-a-molti fra l entità Città e l entità Abbonati si introduce, fra gli attributi dell entità a molti (Abbonati), la chiave esterna kscittà associata alla chiave primaria idcittà dell entità a uno (Città). Per realizzare l associazione molti-a-molti fra l entità Rivista e l entità Abbonato si introduce una terza entità Abbonamenti, che, oltre ad attributi propri dell associazione (dataabbonamento) ha, come attributi, la chiave esterna ksrivista associata alla chiave primaria idrivista dell entità Rivista e la chiave esterna ksabbonato associata alla chiave primaria idabbonato dell entità Abbonato. Esempio di Progettazione di un database a cura del Prof. Salvatore DE GIORGI Pag. 3
Rappresentazione grafica dello schema logico : La rappresentazione grafica dello schema logico relativo al sistema informativo per la gestione degli Abbonamenti è il seguente : Definizione delle Tabelle Nel definire le tabelle e la struttura delle stesse, è consigliabile elencarle partendo dalle tabelle che non presentano chiavi esterne. In successione si definiscono le tabelle le cui chiavi primarie sono utilizzate da altre tabelle come chiavi esterne. Nel prospetto seguente, per es., si definiscono prima le tabelle tbcittà e tbriviste, quindi la tabella tbabbonato (che ha fra gli attributi un campo definito come chiave esterna alla tabella tbcittà), ed infine la tabella tbabbonamenti in quanto quest ultima ha, fra gli attributi, un campo definito come chiave esterna alla tabella tbabbonati ed un campo definito come chiave esterna alla tabella tbriviste (l insieme di questi due campi formano la chiave primaria). Tabella Nome campo Chiave Tipo dati Dim. Dec. Null Descrizione tbcittà idcittà Primaria Numerico 4 Autoincremento città Testo 30 tbriviste idrivista Primaria Numerico 4 Autoincremento rivista Testo 30 Vincoli: valori unici costo Numerico 6 2 tbabbonati idabbonato Primaria Numerico 4 Autoincremento abbonato Testo 30 kscittà Esterna Numerico 4 Integrità referenziale con idcittà della tabella tbcittà tbabbonamenti ksrivista Primaria Numerico 4 Integrità referenziale con idrivista della tabella tbrivista ksabbonato Primaria Numerico 4 Integrità referenziale con idabbonato della tabella tbabbonati dataabbonamento Data/ora 10 Esempio di Progettazione di un database a cura del Prof. Salvatore DE GIORGI Pag. 4
Definizione delle relazioni della base di dati in SQL Lo schema logico relazionale precedente (tabelle, relazione ed applicazione dei vincoli di integrità dei dati e referenziale) può essere creato con le seguenti istruzioni SQL (proposte in versione per ACCESS e MySQL). ACCESS CREATE TABLE tbcittà ( idcittà Counter PRIMARY KEY, città Char(30) NOT NULL CREATE TABLE tbabbonati ( idabbonato Counter PRIMARY KEY, abbonato Char(30) NOT NULL kscittà Long NOT NULL, FOREIGN KEY(kscittà) REFERENCES tbcittà(idcittà) MySQL CREATE TABLE tbcittà ( idcittà int(4) unsigned città char(30) NOT NULL CREATE TABLE tbabbonati ( idabbonato int(4) unsigned abbonato char(30) NOT NULL, kscittà int(4) NOT NULL CREATE TABLE tbriviste ( idrivista Counter PRIMARY KEY, rivista Char(30) NOT NULL UNIQUE, costo SINGLE NOT NULL CREATE TABLE tbriviste ( idrivista int(4) unsigned rivista char(30) NOT NULL UNIQUE, costo decimal (6,2) NOT NULL CREATE TABLE tbabbonamenti ( ksrivista Long NOT NULL, ksabbonato Long NOT NULL, dataabbonamento Datetime, PRIMARY KEY (ksrivista,ksabbonato), FOREIGN KEY(ksrivista) REFERENCES tbrivista(idrivista), FOREIGN KEY(ksabbonato) REFERENCES tbabbonati(idabbonato) CREATE TABLE tbabbonamenti ( ksrivista int(4) unsigned NOT NULL, ksabbonato int(4) unsigned NOT NULL, dataabbonamento date NOT NULL, PRIMARY KEY(ksrivista,ksabbonato) Nota : le istruzioni proposte per MySQL sono relative all uso di tabelle tipo MyISAM che non supportano l integrità referenziale definita con FOREIGN KEY. Il tipo di tabella InnoDB, invece, supporta la FOREIGN KEY similmente ad ACCESS. Esempio di Progettazione di un database a cura del Prof. Salvatore DE GIORGI Pag. 5