Laboratorio di Sistemi Informativi

Documenti analoghi
Laboratorio di Sistemi Informativi

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Laboratorio di Basi di Dati

Instanze inconsistenti. Informatica II Basi di Dati (07/08) Parte 2. Instanze inconsistenti. Vincoli di integrità

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

SQL-DDL. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. Linguaggio di interrogazione per basi di dati relazionali

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

SQL. Dott.ssa Elisa Quintarelli

Il linguaggio SQL. TUTORATO DIFONDAMENTI DIINFORMATICA

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Stringhe di caratteri

PRODOTTO CARTESIANO Caso Generale

Laboratorio di Basi di Dati

Elena Baralis 2007 Politecnico di Torino 1

Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI

Modello relazionale e algebra relazionale

Esercitazione: Il DBMS MySQL. Insegnamento di Basi di Dati. Laurea in Ingegneria Informatica SAPIENZA Università di Roma

Corso di. Basi di Dati I. 3. Vincoli di integrità

SQL: DDL, VI, Aggiornamenti e Viste

Elena baralis 2007 Politecnico di Torino 1

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a

Viste come strumenti di programmazione

DataBase Management System - DBMS

4/16/07. Le Basi di Dati Relazionali. Concetti Fondamentali. Base di dati, tabella, ennupla, attributo, dominio. Valori nulli

Elena baralis 2007 Politecnico di Torino 1

Fondamenti di Teoria delle Basi di Dati

Basi di Dati. Sistemi per Basi di Dati Relazionali: Modello Logico. Concetti Fondamentali. Concetti Fondamentali

IL MODELLO RELAZIONALE. Patrizio Dazzi a.a

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

Esempio di database relazionale con l utilizzo del prodotto MySQL

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a

Data Definition in MySQL

ESERCITAZIONE: Fornitore-Fornisce-Articolo

Laboratorio di Basi di Dati

Sistemi di Elaborazione delle Informazioni

SQL: "storia" 31/05/2006 2

Corso sul linguaggio SQL

Introduzione. Il Modello Relazionale. Relazioni e Tabelle. Relazioni Matematiche - 1. Relazioni Matematiche - 2. Relazioni Matematiche - 3

Corso di Basi di Dati A.A. 2015/2016

Interrogazioni nidificate

Corso di Basi di Dati A.A. 2016/2017

Appunti dalle lezioni. Sistemi informativi e basi di dati. Il modello relazionale. SQL come DCL Utilizzo di un DBMS Reale.

Corso di Basi di Dati Prime nozioni relative all utilizzo del DBMS MySQL

IL MODELLO RELAZIONALE

SQL. Lezione 1. Docente: Alberto Belussi

LABORATORIO di INFORMATICA

Corso di Basi di Dati A.A. 2015/2016

Principi di Progettazione del Software a.a Il linguaggio SQL. Prof. Luca Mainetti Università del Salento

Corso di Laurea in Ingegneria Informatica Fondamenti di informatica II Modulo Basi di dati a.a

IL MODELLO RELAZIONALE

Definizione di domini

Il linguaggio SQL. Il linguaggio SQL

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL

SQL - Structured Query Language

Il Modello Relazionale

Principi di Progettazione del Software a.a Il linguaggio SQL. Linguaggi per DBMS

Dichiarazione degli schemi in SQL DDL 1

Il Modello Relazionale e le operazioni

RELAZIONI E BASI DI DATI

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Corso sul linguaggio SQL

Interrogazioni nidificate

Il modello Relazionale.

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Gestione e Analisi dei Dati. Lezione 2 Vincoli su attributo Selezioni semplici su una tabella

SQL: Definizione e Manipolazione di Relazioni. Capitolo 2

Interpretazione delle query nidificate

Il linguaggio SQL: DDL di base

Basi di dati e Relazioni

Primo Compitino di Basi di Dati

Interrogazioni con ANY e ALL. Operatori ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, IL MODELLO RELAZIONALE

Basi di dati e Relazioni

GESTIONE ASSICURAZIONI AUTO

Aspetti avanzati nella definizione degli schemi DDL2 1

Basi di dati IL MODELLO RELAZIONALE

Informatica Industriale Modello informatico: Applicativo Modello relazionale dei dati

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL: fondamenti. Il linguaggio SQL

Unità 2.2 Comandi sulle tabelle

Modello Relazionale. Università degli Studi di Salerno

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Fondamenti di Informatica A. A / 1 9

Basi di Dati: Corso di laboratorio

Laboratorio di Basi di Dati Esercizio 8.4/9.1

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Inserimento. Cancellazione. Modifica. INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52)

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Corso di Informatica

Corso di. Basi di Dati I. 2. Il modello relazionale

Manuale SQL. Manuale SQL - 1 -

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Progettazione concettuale usando il modello Entità-Relazione (ER)

Transcript:

Laboratorio di Sistemi Informativi Corso di Laurea in Informatica - A. A. 2006-2007 Creazione di basi di dati e tabelle Donatella Merlini Dipartimento di Sistemi e Informatica viale Morgagni 65, 50134, Firenze merlini@dsi.unifi.it http://www.dsi.unifi.it/ merlini/ Laboratorio di Sistemi Informativi p. 1/30

Creazione di una base di dati SHOW DATABASES; mostra le basi di dati presenti nel sistema. CREATE DATABASE Nomedb; crea un nuovo database. Notare che la creazione di un database aggiunge una nuova directory in c:\mysql\data. DROP DATABASE Nomedb; cancella un database. USE Nomedb; usa un database. SELECT DATABASE(); visualizza il nome del database corrente. Laboratorio di Sistemi Informativi p. 2/30

Creazione di tabelle L istruzione CREATE: definisce uno schema di relazione e ne crea un istanza vuota; specifica attributi, domini e vincoli; la sintassi più semplice è: CREATE TABLE NomeTb (NomeCol Dominio[Default][Vincoli] {,NomeCol Dominio[Default][Vincoli]}) [ENGINE = <TipoTb>]; CREATE TABLE Dipartimento ( Nome CHAR(20) PRIMARY KEY, Indirizzo CHAR(50), Sede CHAR(20)); Laboratorio di Sistemi Informativi p. 3/30

DESCRIBE NomeTb; descrive la struttura di una tabella fornendo informazioni sulle colonne della tabella: Field: indica il nome della colonna; Type: indica il tipo della colonna; Null: indica se il valore NULL è permesso oppure no; Key: indica se l attributo è indicizzato; Default: indica il valore di default; Extra: altre informazioni. SHOW TABLES; elenca le tabelle del database in uso. Laboratorio di Sistemi Informativi p. 4/30

Chiavi e valori nulli Si consideri la seguente tabella, avente due chiavi, una composta dal solo attributo Matricola e l altra dagli attributi Cognome, Nome e Nascita. Matricola Cognome Nome Nascita Corso NULL Rossi Mario NULL Biologia 4766 Rossi Luca 01/05/61 Informatica 4856 Neri Luca NULL NULL NULL Neri Luca 05/03/58 Informatica La prima tupla non è identificabile in alcun modo perché ha valori nulli su Matricola e Nascita. La presenza di valori nulli rende impossibile capire se le ultime due tuple fanno riferimento allo stesso studente. Laboratorio di Sistemi Informativi p. 5/30

È necessario limitare la presenza di valori nulli. Su una delle chiavi (detta chiave primaria) si vieta la presenza di valori nulli. Laboratorio di Sistemi Informativi p. 6/30

Vincoli intrarelazionali NOT NULL: questo vincolo indica che il valore nullo non è ammesso come valore dell attributo: Cognome CHAR(20) NOT NULL; UNIQUE: questo vincolo si applica ad un attributo o un insieme di attributi di una tabella e impone che i valori dell attributo siano una (super)chiave, cioè righe differenti della tabelle non possono avere gli stessi valori: Matricola CHAR(6) UNIQUE; Nome CHAR(20), Cognome CHAR(20), UNIQUE(Cognome,Nome) Laboratorio di Sistemi Informativi p. 7/30

PRIMARY KEY: questo vincolo definisce la chiave primaria di una relazione: Matricola CHAR(6) PRIMARY KEY; oppure, in modo equivalente: Matricola CHAR(6);..., PRIMARY KEY(Matricola); Laboratorio di Sistemi Informativi p. 8/30

Il vincolo PRIMARY KEY è spesso usato insieme al modificatore di tipo AUTO_INCREMENT, che può essere utilizzato per generare una sequenza di numeri. Il nuovo valore generato automaticamente sarà sempre maggiore di una unità rispetto al valore più grande presente in quel momento nella tabella. La prima riga inserita avrà valore 1. IdDipartimento INT AUTO INCREMENT PRIMARY KEY; Laboratorio di Sistemi Informativi p. 9/30

Integrità referenziale Le informazioni di Infrazioni sono rese significative e complete attraverso le altre due tabelle: i riferimenti sono significativi perché i valori in Infrazioni sono uguali a valori effettivamente presenti nelle altre due tabelle. Infrazioni Agenti Auto Codice Data Agente Articolo Prov Numero 1 25-10-05 567 44 FI 4E5432 2 26-10-05 456 34 FI 4E5432 3 26-10-05 456 34 FI 2F7643 4 15-10-05 456 53 MI 2F7643 5 12-10-05 567 44 MI 2F7643 Matricola CodFiscale Cognome Nome 567 RSSM... Rossi Mario 456 NREL... Neri Luigi 638 NREP... Neri Piero Prov Numero Proprietario Indirizzo FI 2F7643 Verdi Piero Via Tigli FI 1A2396 Verdi Piero Via Tigli FI 4E5432 Bini Luca Via Aceri MI 2F76643 Bianchi Gino Via Aceri Laboratorio di Sistemi Informativi p. 10/30

Vincoli interrelazionali REFERENCES e FOREIGN KEY (chiave esterna) permettono di definire vincoli di integrità referenziale. Questo tipo di vincolo crea un legame tra i valori di un attributo della tabella A e il valore di un attributo di un altra tabella B. Il vincolo impone che per ogni riga della tabella A il valore dell attributo specificato sia presente nelle righe della tabella B tra i valori del corrispondente attributo. È possibile definire politiche di reazione alla violazione dell integrità referenziale. Laboratorio di Sistemi Informativi p. 11/30

Integrità referenziale in MySQL In MySQL l integrità referenziale è ottenibile usando tabelle di tipo InnoDB e definendo indici sulle chiavi esterne (torneremo più avanti sui tipi di tabelle e sugli indici). Più precisamente, la definizione di chiave esterne in tabelle InnoDB ha la seguente sintassi: FOREIGN KEY (IndexColName,...) REFERENCES TblName (IndexColName,...) [ON DELETE {CASCADE SET NULL NO ACTION SET DEFAULT }] [ON UPDATE {CASCADE SET NULL NO ACTION SET DEFAULT }] Sono necessari indici sulle chiavi esterne e sulle chiavi cui si fa riferimento. Esiste anche l opzione RESTRICT, analoga a NO ACTION. Laboratorio di Sistemi Informativi p. 12/30

CREATE TABLE B( Id INT NOT NULL, PRIMARY KEY (Id) ) ENGINE=INNODB; CREATE TABLE A( Id INT, BId INT, INDEX BIndex (BId), FOREIGN KEY (BId) REFERENCES B(Id) ON DELETE CASCADE ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 13/30

Sullo schema della base di dati precedente ha senso definire i seguenti vincoli: CREATE TABLE Agenti(... PRIMARY KEY(Matricola),... ) ENGINE=INNODB; CREATE TABLE Auto(... PRIMARY KEY(Prov,Numero),... ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 14/30

CREATE TABLE Infrazioni(... INDEX AgInd (Agente), FOREIGN KEY (Agente) REFERENCES Agenti(Matricola), INDEX AuInd (Prov,Numero), FOREIGN KEY (Prov,Numero) REFERENCES Auto(Prov,Numero),... ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 15/30

Politiche di reazione per operazioni di modifica CASCADE: il nuovo valore dell attributo della tabella B viene riportato su tutte le corrispondenti righe della tabella A; SET NULL: all attributo referente nella tabella A viene assegnato il valore nullo al posto del valore modificato nella tabella B; NO ACTION: l azione di modifica non viene consentita; SET DEFAULT: all attributo referente nella tabella A viene assegnato il valore di default al posto del valore modificato nella tabella B (in realtà non funziona). Laboratorio di Sistemi Informativi p. 16/30

Politiche di reazione per operazioni di cancellazione CASCADE: tutte le righe della tabella A vengono cancellate; SET NULL: all attributo referente nella tabella A viene assegnato il valore nullo al posto del valore cancellato nella tabella B; NO ACTION: la cancellazione non viene consentita; SET DEFAULT: all attributo referente nella tabella A viene assegnato il valore di default al posto del valore cancellato nella tabella B (in realtà non funziona) Laboratorio di Sistemi Informativi p. 17/30

Il database Prodotti Premiere Tabella Rappresentanti CodR Cognome Nome Via Città Pr CAP TotProvv % 03 Jones Mary 123 Main Grant MI 49219 2150.00 5 06 Smith William 102 Raymond Ada MI 49441 4912.50 7 12 Diaz Miguel 419 Harper Lansing MI 49224 2150.00 5 Laboratorio di Sistemi Informativi p. 18/30

Tabella Clienti CodC Cognome Nome Via Città Pr CAP Saldo Fido CodR 124 Adams Sally 481 Oak Lansing MI 49224 818.75 1000 03 256 Samuel Ann 215 Pete Grant MI 49219 21.5 1500 06 311 Charles Don 48 College Ira MI 49034 825.75 1000 12 315 Daniels Tom 914 Charry Kent MI 48391 770.75 750 06 405 Williams Al 519 Watson Grant MI 49219 402.75 1500 12 412 Adams Sally 16 Elm Lansing MI 49224 1817.5 2000 03 522 Nelson Mary 108 Pine Ada MI 49441 98.75 1500 12 567 Dinh Tran 808 Ridge Harper MI 48421 402.4 750 06 587 Galvez Mara 512 Pine Ada MI 49441 114.6 1000 06 622 Martin Dan 419 Chip Grant MI 49219 1045.75 1000 03 Laboratorio di Sistemi Informativi p. 19/30

Tabella Ordini NumOrdine Data CodC 12489 2002-09-02 124 12491 2002-09-02 311 12494 2002-09-04 315 12495 2002-09-04 256 12498 2002-09-05 522 12500 2002-09-05 124 12504 2002-09-05 522 Laboratorio di Sistemi Informativi p. 20/30

Tabella Dettagli Ordini NumOrdine NumArt QtaOrd Prezzo 12489 AX12 11 21.95 12491 BT04 1 149.99 12491 BZ66 1 399.99 12494 CB03 4 279.99 12495 CX11 2 22.95 12498 AZ52 2 12.95 12498 BA74 4 24.95 12500 BT04 1 149.99 12504 CZ81 2 325.99 Laboratorio di Sistemi Informativi p. 21/30

Tabella Articoli NumARt Descrizione Giacenza Categoria Magazzino Prezzo Unitario AX12 ferro da stiro 104 cs 3 24.95 AZ52 freccette 20 sp 2 12.95 BA74 pallone 40 sp 1 29.95 BH22 tritatutto 05 cs 3 24.95 BT04 forno 11 el 2 149.49 BZ66 lavatrice 52 el 3 399.99 CA14 setaccio 78 cs 3 39.99 CB03 bicicletta 44 sp 1 299.99 CX11 frullino 142 cs 3 22.95 CZ81 tavola pesi 68 sp 2 349.95 Laboratorio di Sistemi Informativi p. 22/30

Tabella Rappresentanti CREATE TABLE Rappresentanti( CodR CHAR(2) PRIMARY KEY, cognome CHAR(10), nome CHAR(8), via CHAR(15), citta CHAR(15), prov CHAR(2), cap CHAR(5), TotProvv DECIMAL(5,2), PerProvv DECIMAL(5,2) ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 23/30

Tabella Clienti CREATE TABLE Clienti( CodC CHAR(3) PRIMARY KEY, cognome CHAR(10), nome CHAR(8), via CHAR(15), citta CHAR(15), prov CHAR(2), cap CHAR(5), saldo DECIMAL(5,2), fido DECIMAL(5,2), CodR CHAR(2) NOT NULL, INDEX RInd (CodR), FOREIGN KEY (CodR) REFERENCES Rappresentanti(CodR) ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 24/30

Tabella Ordini CREATE TABLE Ordini( NumOrdine CHAR(6) PRIMARY KEY, Data DATE, CodC CHAR(3), INDEX CliInd (CodC), FOREIGN KEY (CodC) REFERENCES Clienti(CodC) ON DELETE SET NULL ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 25/30

Tabella DettagliOrdini CREATE TABLE DettagliOrdini( NumOrdine CHAR(6) NOT NULL, NumArt CHAR(4) NOT NULL, PRIMARY KEY(NumOrdine, NumArt), INDEX Ord ind(numordine), FOREIGN KEY(NumOrdine) REFERENCES Ordini(NumOrdine), INDEX Art ind(numart), FOREIGN KEY(NumArt) REFERENCES Articoli(NumArt), QtaOrd DECIMAL(3,0), Prezzo DECIMAL(6,2) ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 26/30

Tabella Articoli CREATE TABLE articoli( NumArt CHAR(4) PRIMARY KEY, descrizione CHAR(20), giacenza INT, categoria CHAR(2), magazzino CHAR(1), PrzUnitario DECIMAL(5,2) ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 27/30

Script MySQL Inserire i comandi manualmente è poco pratico. L alternativa è quella di scrivere un file di testo con un qualunque editor, salvare il file ed eseguire lo script dal monitor di MySQL con il comando: SOURCE <nomefile>; Per essere sicuri che lo script funzioni anche se non è la prima volta che si fanno delle prove con una base di dati o una tabella, al suo interno si possono usare comandi del tipo: DROP DATABASE IF EXISTS <nomedb>; DROP TABLE IF EXISTS <nometb>; CREATE TABLE IF NOT EXISTS <nometb>; Laboratorio di Sistemi Informativi p. 28/30

Esempio di script drop database if exists Multe; create database Multe; use Multe; drop table if exists agenti; create table agenti( matricola int primary key, codfiscale char(16), cognome char(10), nome char(8) ) ENGINE=INNODB; drop table if exists auto; create table auto( prov char(2), numero char(6), primary key(prov,numero), proprietario char (20), indirizzo char(15) ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 29/30

drop table if exists infrazioni; create table infrazioni( codice int auto_increment primary key, data DATE, agente int, articolo int, prov char(2), numero char(6), index ag_ind(agente), foreign key (agente) references agenti(matricola), index au_ind(prov,numero), foreign key (prov,numero) references auto(prov,numero) ) ENGINE=INNODB; Laboratorio di Sistemi Informativi p. 30/30