LABORATORIO di INFORMATICA
Transcript
LABORATORIO di INFORMATICA
Università degli Studi di Cagliari Corso di Laurea Magistrale in Ingegneria per l’Ambiente ed il Territorio LABORATORIO di INFORMATICA A.A. 2010/2011 Prof. Giorgio Giacinto IL MODELLO RELAZIONALE http://www.diee.unica.it/giacinto/Lab Perché studiare il Modello Relazionale? ! È il modello più largamente usato ! ! “Sistemi proprietari” nei modelli più vecchi ! ! Produttori: IBM, Informix, Microsoft, Oracle, Sybase, MySQL, PostgreSQL, etc. ad esempio IMS dell’IBM Modelli recenti: modello orientato agli oggetti ! ! ObjectStore, Versant, Ontos Una sintesi emergente: il modello relazionale ad oggetti ! Informix Universal Server, UniSQL, O2, Oracle, PostgreSQL Giorgio Giacinto 2010 Laboratorio d'Informatica Basi di dati relazionali: definizioni ! ! Base di dati relazionale: un insieme di relazioni Relazione: consiste di due parti: ! ! ! schema: specifica il nome della relazione, più il nome e il tipo di ciascuna colonna (chiamata campo o attributo) ! ad esempio: Studenti(sid:string, nome:string, login:string, età:integer, media:real) istanza: una tabella, con righe e colonne. #righe = cardinalità, #campi = grado/arità Possiamo pensare a una relazione come a un insieme di righe di t-uple (cioè tutte le righe sono distinte e l’ordinamento è casuale) Giorgio Giacinto 2010 Laboratorio d'Informatica Esempio di istanza della relazione Studenti sid 53666 53688 nome Jones Smith login jones@cs smith@eecs età 18 18 media 25.6 24.1 53650 Smith smith@math 19 27.4 ! Cardinalità = 3, grado = 5, tutte le righe sono distinte ! ! L’ordinamento delle righe è irrilevante Devono essere anche distinte tutte le colonne nell’istanza di una relazione? Giorgio Giacinto 2010 Laboratorio d'Informatica Campi di una relazione ! Nel modello relazionale i campi di una relazione sono identificati dal nome ! ! L’ordine delle colonne è irrilevante In SQL in alcuni casi ci si riferisce alle colonne in base alla loro posizione ! ! Ad esempio, per inserire una nuova tupla nella relazione Vincoli di dominio ! I valori di ciascun campo di una tupla devono appartenere ai domini associati in fase di definizione dello schema Giorgio Giacinto 2010 Laboratorio d'Informatica Base di dati relazionale ! Base di dati relazionale ! ! Schema di base di dati relazionale ! ! Collezione di relazioni con nomi di relazione distinti Collezione degli schemi per le relazioni nella base di dati Istanza di una base di dati relazionale ! Collezione di istanze di relazione, una per ogni schema di relazione nella BD Giorgio Giacinto 2010 Laboratorio d'Informatica CREARE E MODIFICARE RELAZIONI CON SQL Introduzione In SQL la relazione è indicata con il nome di TABLE (tabella) Il sottoinsieme di SQL che consente di creare, cancellare e modificare le tabelle è chiamato DDL (Data Definition Language) SQL contiene domini predefiniti, e consente di definirne di nuovi Giorgio Giacinto 2010 Laboratorio d'Informatica Introduzione ! Vedremo nel seguito i comandi SQL per ! ! ! definire, modificare, cancellare una tabella Inserire, modificare, cancellare dati in una tabella Di solito queste operazioni vengono effettuate mediante moduli in interfacce grafiche ! il sistema invierà al DBMS i comandi SQL corrispondenti Giorgio Giacinto 2010 Laboratorio d'Informatica CREATE TABLE CREATE TABLE Studenti ( sid CHAR(20), nome CHAR(30), login CHAR(20), età INTEGER, media REAL) Giorgio Giacinto 2010 Laboratorio d'Informatica Inserimento di valori in una tabella INSERT INTO Studenti(sid,nome,login,età,media) VALUES (52688, ‘Smith’, ‘smith@ce’, 18, 28.1) ! I nomi delle colonne possono essere omessi se si devono inserire valori per tutti i campi ! in questo caso la lista dei valori deve rispettare l’ordinamento dei campi come definito nello schema Giorgio Giacinto 2010 Laboratorio d'Informatica Cancellazione di tuple DELETE FROM Studenti S WHERE S.nome = ‘Smith’ La clausola WHERE specifica le tuple che vogliamo cancellare Giorgio Giacinto 2010 Laboratorio d'Informatica Modifica dei valori di una tabella UPDATE SET WHERE Studenti S S.età = S.età + 1, S.media = 0.95*S.media S.sid = 53688 UPDATE SET WHERE Studenti S S.media = 0.95*S.media S.media <= 24.5 Giorgio Giacinto 2010 Laboratorio d'Informatica VINCOLI D’INTEGRITÁ SULLE RELAZIONI Vincoli di integrità (VI) ! VI: condizione che deve essere vera per qualunque istanza della base di dati; ad esempio vincoli di dominio ! ! ! Una istanza legale di una relazione è una istanza che soddisfa tutti i VI specificati ! ! I VI sono specificati quando si definisce lo schema I VI sono controllati quando si modificano le relazioni I DBMS non dovrebbero permettere istanze illegali Se il DBMS controlla i VI, i dati memorizzati sono più fedeli al significato nel mondo reale ! Si evitano anche gli errori di inserimento! Giorgio Giacinto 2010 Laboratorio d'Informatica Vincoli di chiave primaria ! Un insieme di campi è una chiave per una relazione se ! ! ! ! due tuple distinte non possono avere gli stessi valori in tutti i campi chiave, e ciò non è vero per qualunque sottoinsieme della chiave ! La condizione 2 è falsa? Si ha una superchiave Se c’è più di una chiave, il DBA sceglie una delle chiavi come chiave primaria Esempio sid è una chiave per Studenti (e nome?). L’insieme {sid, media} è una superchiave Giorgio Giacinto 2010 Laboratorio d'Informatica Chiavi primarie e candidate ! ! Sono possibili molte chiavi candidate, una delle quali viene scelta come chiave primaria “Per un dato studente e un dato corso, c’è una singola classe” oppure “Gli studenti possono seguire solo un corso, e ricevere un singolo voto per quel corso; inoltre, nessuna coppia di studenti in un corso riceve lo stesso voto” Usato a sproposito, un VI può impedire la memorizzazione di istanze della base di dati che si presentano nella pratica! Giorgio Giacinto 2010 Laboratorio d'Informatica Specifica dei vincoli di chiave in SQL CREATE TABLE Studenti( sid CHAR(20), nome CHAR(30), login CHAR(20), età INTEGER, media REAL, UNIQUE(nome,età), CONSTRAINT ChiaveStudenti PRIMARY KEY (sid)) Giorgio Giacinto 2010 Laboratorio d'Informatica Chiavi esterne, integrità referenziale ! Chiave esterna: insieme di campi in una relazione che viene usato per “riferirsi” a una tupla in un’altra relazione (deve corrispondere alla chiave primaria della seconda relazione). ! ! Simile a un “puntatore logico” Se tutti i vincoli di chiave esterna sono garantiti, si raggiunge l’integrità referenziale (nessuna referenza irrisolta) ! HTML è un modello di dati senza integrità referenziale! Giorgio Giacinto 2010 Laboratorio d'Informatica Integrità referenziale Ad esempio, studid è una chiave esterna che fa riferimento a Studenti –Iscritto(studid: string, cid: string voto: string) Giorgio Giacinto 2010 Laboratorio d'Informatica Garantire l’integrità referenziale ! ! Che cosa si dovrebbe fare se viene inserita in Iscritti una tupla con un ID studente che non esiste? (Rifiutarla!) Cosa fare se viene cancellata una tupla di Studenti? ! ! ! Cancellare anche le tuple di Iscritti che vi fanno riferimento Non permettere la cancellazione di tuple di Studenti cui si fa riferimento da Iscritti Impostare a un sid predefinito il sid delle tuple di Iscritti che puntano a Studenti ! In SQL, anche: impostare al valore speciale NULL (denota “sconosciuto” o “inapplicabile”) il sid delle tuple di Iscritti che si riferiscono a Studenti (ma il sid in Studenti non può mai essere NULL) Giorgio Giacinto 2010 Laboratorio d'Informatica Specifica dei vincoli di chiave esterna in SQL CREATE TABLE Iscrizioni ( studid CHAR(20), cid CHAR(20), voto CHAR(10), PRIMARY KEY(studid,cid), FOREIGN KEY(studid) REFERENCES Studenti) Giorgio Giacinto 2010 Laboratorio d'Informatica Da dove vengono i VI? ! ! I VI sono basati sulla semantica dell’organizzazione del mondo reale che viene descritta nelle relazioni della base di dati Possiamo controllare l’istanza di una base di dati per vedere se un VI viene violato, ma non possiamo MAI inferire che un VI è vero solo esaminando un’istanza ! ! ! Un VI è una asserzione su tutte le possibili istanze! Analizzando l’esempio si può scoprire che nome non è una chiave, ma è necessario ci sia un’asserzione per stabilire che sid è una chiave VI su chiavi e su chiavi esterne sono i più comuni; sono supportati anche VI più generali Giorgio Giacinto 2010 Laboratorio d'Informatica APPLICAZIONE DEI VINCOLI D’INTEGRITÁ Vincolo di chiave INSERT INTO Studenti(sid,nome,login,età,media) VALUES (53688, ‘Mike’, ‘mike@ee’, 17, 22.1) Questo inserimento viola il vincolo di chiave primaria, e pertanto il DBMS rifiuterà la richiesta INSERT INTO Studenti(sid,nome,login,età,media) VALUES (NULL, ‘Mike’, ‘mike@ee’, 17, 22.1) Questo inserimento viola il vincolo per cui la chiave primaria non può contenere NULL Considerazioni analoghe nel caso di operazioni di aggiornamento Giorgio Giacinto 2010 Laboratorio d'Informatica Vincoli di dominio ! Le operazioni di inserimento e di aggiornamento sono accettate solo se i valori dei campi appartengono al dominio di definizione ! Le operazioni di cancellazione non causano violazione dei vincoli di chiave primaria, unicità e di dominio Giorgio Giacinto 2010 Laboratorio d'Informatica Vincoli di chiave esterna ! Consideriamo le tabelle Studenti e Iscrizioni ! ! ! ! La cancellazione di tuple in Iscrizioni non viola l’integrità referenziale Gli inserimenti di tuple in Iscrizioni possono violare l’integrità referenziale d’altra parte… La cancellazione di tuple in Studenti potrebbe violare l’integrità referenziale Gli inserimenti di tuple in Studenti non violano l’integrità referenziale Giorgio Giacinto 2010 Laboratorio d'Informatica Vincoli di chiave esterna e SQL ! Come gestire l’inserimento in Iscrizioni di una riga con un valore di studid che non compare in Studenti? ! Il comando INSERT viene ignorato Giorgio Giacinto 2010 Laboratorio d'Informatica Vincoli di chiave esterna e SQL ! Come gestire la cancellazione di una riga di Studenti? 1. 2. 3. 4. ! Cancellare tutte le righe di Iscrizioni che la referenziano Non consentire la cancellazione se vi sono righe di Iscrizioni che la referenziano Impostare il valore di studid delle righe di Iscrizioni che la referenziano con un qualche valore predefinito Impostare il valore di studid delle righe di Iscrizioni che la referenziano a NULL Questa opzione è però in contrasto con il vincolo di chiave primaria per Iscrizioni Giorgio Giacinto 2010 Laboratorio d'Informatica Vincoli di chiave esterna e SQL ! Come gestire la modifica dei valori di chiave primaria nella tabella Studenti? ! Opzioni analoghe al caso di cancellazione Giorgio Giacinto 2010 Laboratorio d'Informatica Vincoli di chiave esterna e SQL ! SQL consente di scegliere separatamente una delle quattro opzioni per operazioni di cancellazione (DELETE) e aggiornamento (UPDATE) 1. 2. 3. CASCADE NO ACTION (operazione predefinita) SET DEFAULT Il valore di default è specificato in fase di definizione del dominio del campo 4. SET NULL Giorgio Giacinto 2010 Laboratorio d'Informatica Esempio CREATE TABLE Iscrizioni ( studid CHAR(20), cid CHAR(20), voto CHAR(10), PRIMARY KEY(studid,cid), FOREIGN KEY(studid) REFERENCES Studenti ON DELETE CASCADE ON UPDATE NO ACTION) Giorgio Giacinto 2010 Laboratorio d'Informatica ELIMINAZIONE E MODIFICA DI TABELLE Eliminazione di tabelle DROP TABLE Studenti Elimina la tabella Studenti DROP TABLE Studenti RESTRICT Elimina la tabella solo se nessuna vista è definita a partire da Studenti Giorgio Giacinto 2010 Laboratorio d'Informatica Modifica di tabelle ALTER TABLE Studenti ADD COLUMN NomeTutore CHAR(10) Aggiunge una colonna alla tabella Studenti. Il comando ALTER consente anche di cancellare e modificare colonne aggiungere e cancellare vincoli di integrità Giorgio Giacinto 2010 Laboratorio d'Informatica INTERROGARE BASI DI DATI RELAZIONALI Interrogazione (query) ! ! Può essere definita come una domanda sui dati e la risposta consiste in una nuova relazione Un linguaggio di interrogazione è un linguaggio specializzato per scrivere interrogazioni Giorgio Giacinto 2010 Laboratorio d'Informatica Linguaggi di Interrogazione Relazionali ! ! Uno dei punti di forza del modello relazionale: supporta un semplice ma potente linguaggio di interrogazione dei dati. Le interrogazioni possono essere scritte in maniera intuitiva, e il DBMS è responsabile di una valutazione efficiente ! ! Fattore chiave: semantica precisa per le interrogazioni relazionali. Permette all’ottimizzatore di riordinare estensivamente le operazioni, garantendo che la risposta non cambi Giorgio Giacinto 2010 Laboratorio d'Informatica Esempio SQL SELECT * FROM Studenti S WHERE S.età < 18 È la formulazione in SQL della domanda: “Quali sono i dati degli studenti che hanno meno di 18 anni?” Giorgio Giacinto 2010 Laboratorio d'Informatica Esempio SQL SELECT S.nome, I.cid FROM Studenti S, Iscrizioni I WHERE S.sid = I.studid AND I.voto=30 È la formulazione in SQL della richiesta: “Mostrare il nome degli studenti e il corso nel quale hanno ottenuto un voto pari a 30” Giorgio Giacinto 2010 Laboratorio d'Informatica Modello relazionale: sommario ! ! ! Una rappresentazione tabellare dei dati Semplice e intuitivo, attualmente il più usato Il DBA può specificare vincoli di integrità basati sulla semantica dell’applicazione. Il DBMS controlla eventuali violazioni ! ! ! Due VI importanti: chiavi primarie e chiavi esterne Inoltre abbiamo sempre vincoli di dominio Esistono linguaggi di interrogazione potenti e naturali Giorgio Giacinto 2010 Laboratorio d'Informatica