Basi di Dati Relazionali



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

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

SQL Laboratorio di Basi di Dati a.a. 2002/2003

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

Corso di Informatica (Basi di Dati)

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

Gestione delle tabelle

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

Definizione di domini

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

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

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Laboratorio di Basi di Dati e Web

Il linguaggio SQL: DDL di base

Corso di Basi di Dati A.A. 2013/2014

SQL Sintassi Dei Comandi

Laboratorio di Basi di Dati

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

SQL - Tipi di dato Il linguaggio SQL

Basi di Dati: Corso di laboratorio

SQL (STRUCTURED QUERY LANGUAGE)

Corso sul linguaggio SQL

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

Basi di Dati prof. Letizia Tanca

SQL. Storia e standard

Linguaggio SQL. Structured Query Language

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

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

SQL (STRUCTURED QUERY LANGUAGE)

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

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

DBMS (Data Base Management System)

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

SQL. Alcune note sulla definizione dei dati

Corso sul linguaggio SQL

SQL: Concetti Base -Prima Parte-

Descrizione del linguaggio SQL Definizione del database. Giovanna Rosone 02-03/03/2010

Lo schema concettuale risultante dalla progettazione concettuale è l input alla fase di progettazione logica.

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

DDL DML. Tipi di linguaggi per basi di dati. Si distinguono due categorie:

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

Lezione V. Aula Multimediale - sabato 29/03/2008

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

Il Modello Relazionale

BASE DI DATI: sicurezza. Informatica febbraio ASA

Basi di dati. SQL: Amministrazione e Viste. Prof.ssa Rosalba Giugno Dott. Aurelio Giudice

Vincoli di Integrità

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

DUE GRUPPI DI COMANDI

Organizzazione degli archivi

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

Vincoli di integrità

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:


Corso di Laboratorio di Basi di Dati

Il Modello Relazionale

Volumi di riferimento

Informatica per le discipline umanistiche 2 lezione 10

Archivi e Basi di Dati

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

PROGRAMMA DI CLASSE 5AI

Basi di Dati e Sistemi Informativi. Progettazione logica: Il modello relazionale

Corso di Informatica Generale 1 IN1. Linguaggio SQL

Basi di Dati Relazionali

Basi di Dati: Corso di laboratorio

Elena Baralis 2013 Politecnico di Torino 1

1. Schema concettuale della base di dati Lo schema concettuale (o statico) è uno dei due schemi del progetto concettuale di un sistema informativo.

Il linguaggio SQL: le basi

Laboratorio di Basi di Dati Introduzione a SQL

Data Base Relazionali

Esame di Stato Istituto Tecnico Industriale Soluzione della Seconda Prova Indirizzo: INFORMATICA Tema: INFORMATICA Anno Scolastico:

Esercitazione 8 Mercoledì 21 gennaio 2015 (2 ore) DDL e progettazione

N ORE LEZIONI FRONTALI: STUDIO INDIVIDUALE ( ) N ORE ESERCITAZIONI/LABORATORIO: STUDIO INDIVIDUALE ( )

Preparazione. Introduzione a MySQL: costruzione di una base di dati e gestione degli accessi. Accesso all area condivisa. Avvio Server MySQL

Basi di Dati Corso di Laura in Informatica Umanistica

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

Basi di dati Il linguaggio SQL

Basi di dati Il linguaggio SQL

Ministero della Pubblica Istruzione Ufficio Scolastico Regionale per la Sicilia Direzione Generale

Progettazione di Basi di Dati

Linguaggio SQL Descriviamo la notazione usata nel seguito:

BASI DI DATI - : I modelli di database

Transcript:

Corso di Laurea in Informatica Basi di Dati Relazionali a.a. 2009-2010 Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio Coadiutore: Dott.ssa D. Nicotera

PROGETTAZIONE FISICA SQL-DDL OBIETTIVO: Rappresentare i dati della realtà di interesse attraverso le strutture dati di uno specifico DBMS

OBIETTIVI DEL CORSO-RIEPILOGO Le lezioni di laboratorio del corso di Basi di Dati Relazionali prevedono la progettazione e la realizzazione di un sistema informatico basato su un DBMS relazionale (MySql 5.0). Durante le lezioni devono essere svolte tutte le fasi di sviluppo del sistema informatico. Ogni fase è composta da diversi step, ciascuno dei quali porta alla produzione di più documenti. L'insieme di tali documenti costituisce la documentazione del sistema informatico che deve essere prodotta durante le lezioni. Il sistema informatico deve essere costituito da una base di dati realizzata su un DBMS relazionale (MySql 5.0) interrogabile mediante SQL.

FASI DELLA PROGETTAZIONE Raccolta e Analisi dei requisiti Progettazione concettuale Schema concettuale Progettazione logica Schema logico Progettazione fisica Schema fisico

PROGETTAZIONE DELLA BASE DI DATI

FASI E STEP DEL PROGETTO 1.Analisi e progettazione concettuale a. Raccolta e Analisi dei requisiti b. Progettazione dello schema Entità-Relazione (E-R) c. Specifica delle funzioni per operare sui dati d. Stima del carico applicativo del sistema informatico 2.Progettazione logica della base di dati a. Ristrutturazione dello schema E-R in uno schema E-R semplificato orientato al modello relazionale b. Traduzione dello schema E-R ristrutturato in schema relazionale

FASI E STEP DEL PROGETTO 3. Progettazione fisica ed implementazione della base di dati a. Definizione dello schema della base di dati sul DBMS relazionale open-source MySQL 5.0 mediante SQL- DDL b. Popolamento della base di dati c. Realizzazione delle interrogazioni per operare sui dati

SQL: Funzionalità DDL Sintassi Esempi OBIETTIVI DELLA LEZIONE

PROGETTAZIONE FISICA Obiettivo: Rappresentare i dati della realtà di interesse attraverso le strutture dati di uno specifico DBMS Input: Schema logico(prodotto della progettazione logica) DBMS scelto(per sapere quali strutture dati fisiche utilizzare) Previsioni del carico applicativo (per ottimizzare la base di dati rispetto ad esso) Output: Schema fisico (Tipicamente nei DBMS attuali consiste in uno schema logico definito mediante SQL-DDL + alcune scelte relative all effettiva implementazione sul DBMS di detto schema) Qualità: Efficienza rispetto al carico applicativo

MODELLI DI DATI I prodotti della varie fasi della progettazione sono schemi basati su specifici modelli di dati: Schema concettuale modello concettuale Schema logico modello logico Schema fisico modello logico + parametri fisici

MODELLI DEI DATI ADOTTATI Schema concettuale: Modello Entità-Relazione (ER) Schema logico: Modello Relazionale DDL: SQL-standard Schema fisico: Modello relazionale + strutture fisiche DDL: SQL supportato dal DBMS scelto (MySql 5.0)

SQL Originariamente acronimo di "Structured Query Language", ora nome proprio Prima proposta: SEQUEL (IBM Research, 1974) È uno standard (1986, poi 1989, 1992, 1999 e infine 2003) ma esistono varie versioni (DBMS diversi implementano versioni diverse) È un linguaggio dichiarativo (a differenza dell Algebra Relazionale che è di tipo procedurale) Ha varie funzionalità: DDL (Data Definition Language) DML (Data Manipulation Language)

SQL- FUNZIONALITÀ DDL Data Definition Language: funzionalità che consente di definire lo schema dei dati L istruzione più importante del DDL di SQL è: CREATE TABLE definisce uno schema di relazione, specificando attributi e vincoli) crea un istanza vuota dello schema

DEFINIZIONE DI TABELLE CREATE TABLE NomeTabella ( NomeAttributo Dominio [ Vincoli ] {, NomeAttributo Dominio [ Vincoli ]} [ AltriVincoli ])

CREATE TABLE, ESEMPIO CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) )

DOMINI Domini elementari (predefiniti) Domini definiti dall'utente (semplici, ma riutilizzabili)

DOMINI ELEMENTARI Carattere singoli caratteri o stringhe, anche di lunghezza variabile: char(n) character(n) varchar(n) char varying(n) nchar(n) nvarchar(n) nchar varying(n)) stringhe di lunghezza fissa stringhe di lunghezza variabile come sopra ma UNICODE

DOMINI ELEMENTARI Numerici esatti e approssimati: int, integer, smallint numeric,numeric(p), numeric(p,s)) decimal, decimal(p), decimal(p,s)) float, float(p), real, double precision interi valori numerici esatti non negativi valori numerici esatti anche negativi Reali

DOMINI ELEMENTARI Data, ora date / time / timestamp time with timezone / timestamp with timezone Bit: singoli bit o stringhe di bit bit(n) bit varying(n) Introdotti in SQL 1999 boolean BLOB, CLOB (binary/character large object): per grandi immagini e testi

Istruzione CREATE DOMAIN: DEFINIZIONE DI DOMINI definisce un dominio (semplice), utilizzabile in definizioni di relazioni, anche con vincoli e valori di default SINTASSI: CREATE DOMAIN NomeDominio as DominioPreesistente [ Default ] [ Vincoli ] ESEMPIO: CREATE DOMAIN Voto AS SMALLINT DEFAULT NULL CHECK ( value >=18 AND value <= 30 )

VINCOLI INTRARELAZIONALI NOT NULL UNIQUE definisce attributi che identificano una tupla PRIMARY KEY: chiave primaria (una sola, implica NOT NULL e UNIQUE) CHECK, consente di verificare che una condizione venga rispettata

UNIQUE E PRIMARY KEY Due forme: singolo attributo: unique dopo la specifica del dominio primary key dopo la specifica del dominio più attributi: unique (Attributo,..., Attributo) primary key (Attributo,..., Attributo)

CREATE TABLE, ESEMPIO CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) )

PRIMARY KEY, ALTERNATIVE CREATE TABLE Impiegato ( Matricola character(6) primary key,...) Oppure CREATE TABLE Impiegato ( Matricola character(6),... primary key (Matricola))

CREATE TABLE, ESEMPIO CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) )

CHIAVI SU PIÙ ATTRIBUTI Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, UNIQUE (Cognome,Nome), Nome CHAR(20) NOT NULL UNIQUE, Cognome CHAR(20) NOT NULL UNIQUE, Attenzione: non è la stessa cosa!

VINCOLI INTERRELAZIONALI CHECK REFERENCES e FOREIGN KEY Permettono di definire vincoli di integrità referenziale di nuovo due sintassi: per singoli attributi su più attributi E' possibile definire politiche di reazione alla violazione

REFERENCES E FOREIGN KEY Permettono di definire vincoli di integrità referenziale. Sintassi: per singoli attributi: references dopo la specifica del dominio riferimenti su più attributi: foreign key(attributo,...,attributo Attributo) references ALTRATABELLA(A1,,AN) Gli attributi referenziati nella tabella di arrivo (master) devono formare una chiave (primay key o unique). Semantica: ogni combinazione (senza NULL) di valori per gli attributi nella tabella di partenza (slave) deve comparire nella tabella di arrivo (master).

Infrazioni Codice Data 34321 1/2/95 53524 4/3/95 64521 5/4/96 73321 5/2/98 Vigili Vigile 3987 3295 3295 9345 Matricola 3987 3295 9345 7543 Prov Numero MI 39548K TO E39548 PR 839548 PR 839548 Cognome Rossi Neri Neri Mori Esempio Nome Luca Piero Mario Gino

Infrazioni Codice Data 34321 1/2/95 53524 4/3/95 64521 5/4/96 73321 5/2/98 Vigile 3987 3295 3295 9345 Esempio Prov Numero MI 39548K TO E39548 PR 839548 PR 839548 Auto Prov Numero MI 39548K TO E39548 PR 839548 Cognome Rossi Rossi Neri Nome Mario Mario Luca

CREATE TABLE, ESEMPIO CREATE TABLE Infrazioni( Codice CHAR(6) NOT NULL PRIMARY KEY, Data DATE NOT NULL, Vigile INTEGER NOT NULL REFERENCES Vigili(Matricola), Provincia CHAR(2), Numero CHAR(6), ) FOREIGN KEY(Provincia, Numero) REFERENCES Auto(Provincia, Numero)

MODIFICHE DEGLI SCHEMI ALTER DOMAIN ALTER TABLE DROP DOMAIN DROP TABLE...

MODIFICHE DEGLI SCHEMI ALTER TABLE Permette di modificare lo schema di una tabella Esempio: CREATE TABLE Infrazioni( Codice CHAR(6) NOT NULL PRIMARY KEY, Data DATE NOT NULL, Vigile INTEGER NOT NULL REFERENCES Vigili(Matricola), Provincia CHAR(2), Numero CHAR(6) ) ALTER TABLE Infrazioni ADD CONSTRAINT MioVincolo foreign key (Provincia, Numero) references Auto(Provincia,Numero)

MODIFICHE DEGLI SCHEMI DROP TABLE Elimina una tabella Sintassi: DROP TABLE NomeTabella restrict cascade Esempio: Elimina la tabella solo se non ci sono riferimenti ad essa: 1. DROP TABLE Infrazioni [restrict] Elimina la tabella e tutte le tabelle (o più in generale tutti gli oggetti del DB) che si riferiscono ad essa 1. DROP TABLE Infrazioni cascade

DEFINIZIONE DEGLI INDICI Definizione di indici: è rilevante dal punto di vista delle prestazioni ma è a livello fisico e non logico Istruzione create index Sintassi (semplificata): CREATE [UNIQUE] INDEX NomeIndice on NomeTavola(col_1, col_2,, col_n) Esempio: create index IndiceIP on Infrazioni(Provincia)

PROGETTO DIDATTICO Realizzazione dell'applicazione consiste nell'implementazione della base di dati secondo lo schema logico prodotto nella fase di progettazione logica (con SQL-DDL) e dall'implementazione delle operazioni previste sui dati (con SQL-DML)

PROGETTO DIDATTICO La documentazione relativa alla realizzazione del progetto consiste: nel listato delle istruzioni SQL per la definizione dello schema della base di dati (SQL-DDL); nel listato delle istruzioni SQL la definizione delle interrogazioni per la visualizzazione dei dati (SQL-DML); nel listato delle istruzioni SQL la definizione delle operazioni per la manipolazione dei dati (aggiornamenti, inserimenti, cancellazioni) (SQL-DML).

PROGETTO DIDATTICO Test dell'applicazione. La documentazione di questa parte consiste nella: Definizione del contenuto di test della base di dati Stampa dei risultati delle interrogazioni su tali dati

Gestione di una Farmacia - Progettazione Fisica

SCHEMA RISTRUTTURATO

(SOTTO) SCHEMA RISTRUTTURATO FARMACI E PRODOTTI TRALASCIAMO IL SOTTOINSIEME DELLO SCHEMA RELATIVO AI PRODOTTI DI PROFUMERIA

Traduzione delle entità (II PARTE): SCHEMA LOGICO (1/3) PRODOTTO(codice, nome, descrizione, scadenza) CASAFARMACEUTICA(nome,recapito) CATEGORIAFT(codice,nome) FARMACO(codiceP*, prescrivibile, brevettato, equivalente*, nomecasa*, categoria*) con un vincolo di integrità referenziale tra: (1) l attributo codicepe la relazione PRODOTTO, (2) l attributo equivalente e la relazione FARMACO (3) l attributo nomecasa e la relazione CASAFARMACEUTICA (4) l attributo categoria e la relazione CATEGORIAFT

Traduzione delle entità (II PARTE): SCONTRINO(data,numero) PAZIENTE(CF,nome,cognome) MEDICO(CF, nome,cognome) SCHEMA LOGICO (2/3) PRESCRIZIONE(data,numero,medico*,paziente*, (data_scontrino, num_scontrino)*) con un vincolo di integrità referenziale tra: (1) l attributo medico e la relazione MEDICO, (2) l attributo paziente e la relazione PAZIENTE (3) gli attributi (data_scontrino,numero_scontrino) e la relazione SCONTRINO

SCHEMA LOGICO (3/3) Traduzione delle associazioni molti a molti: INTERAZIONE(categoria1,categoria2) con un vincolo di integrità referenziale tra: (1) l attributo categoria1 e la relazione CATEGORIAFT, (2) l attributo categoria2 e la relazione CATEGORIAFT. DETTAGLIOSCONTRINO((data,numero)*,prodotto*,quantità) con un vincolo di integrità referenziale tra: (1) gli attributi (data,numero) e la relazione SCONTRINO, (2) l attributo prodotto e la relazione PRODOTTO DETTAGLIOPRESCRIZIONE((data,numero,medico)*,farmaco*) con un vincolo di integrità referenziale tra: (1) gli attributi (data,numero,medico) e la relazione PRESCRIZIONE, (2) l attributo farmaco e la relazione FARMACO

SCHEMA FISICO DEFINIZIONE DELLE TABELLE RELAZIONE Prodotto(codice, nome, descrizione, scadenza) SQL-DDL Statement CREATE TABLE prodotto( codice int(10) unsigned auto_increment PRIMARY KEY, nome varchar(20) NOT NULL, descrizione varchar(100) NOT NULL, scadenza date NOT NULL ) Engine=InnoDB;

SCHEMA FISICO DEFINIZIONE DELLE TABELLE RELAZIONE CasaFarmaceutica(nome, recapito) SQL-DDL Statement CREATE TABLE casafarmaceutica( nome varchar(20) PRIMARY KEY, recapito varchar(100) NOT NULL )engine=innodb;

SCHEMA FISICO DEFINIZIONE DELLE TABELLE RELAZIONE CategoriaFT(codice,nome) SQL-DDL Statement CREATE TABLE categoriaft( codice int(10) unsigned auto_increment PRIMARY KEY, nome varchar(20) NOT NULL )engine=innodb;

SCHEMA FISICO DEFINIZIONE DELLE TABELLE RELAZIONE Farmaco(codiceP*, prescrivibile, brevettato, equivalente*,nome Casa*,categoria*) SQL-DDL Statement CREATE TABLE Farmaco( codicep int(10) unsigned auto_increment PRIMARY KEY, prescrivibile boolean NOT NULL, brevettato boolean NOT NULL, equivalente int(10) unsigned, nomecasa varchar(20) NOT NULL, categoria int(10) unsigned NOT NULL, FOREIGN KEY (codicep) REFERENCES Prodotto(codice), FOREIGN KEY (nomecasa) REFERENCES casafarmaceutica(nome), FOREIGN KEY (categoria) REFERENCES categoriaft(codice) ) engine=innodb;

SCHEMA FISICO DEFINIZIONE DELLE TABELLE Modifichiamo la tabella Farmaco per inserire il vincolo di integrità referenziale sull attributo equivalente. RELAZIONE Farmaco(codiceP*, prescrivibile, brevettato, equivalente*,nome Casa*,categoria*) SQL-DDL Statement ALTER TABLE Farmaco ADD CONSTRAINT FK_farmaco_4 FOREIGN KEY (equivalente) REFERENCES Farmaco(codiceP);

RELAZIONE SCHEMA FISICO DEFINIZIONE DELLE TABELLE Scontrino(data,numero) CREATE TABLE Scontrino( data date not null, numero int(10) not null, SQL-DDL Statement Note CONSTRAINTPK_scontrino PRIMARY KEY(data, numero) ) engine=innodb; La relazione ha una chiave primaria composta da due attributi

SCHEMA FISICO DEFINIZIONE DELLE TABELLE RELAZIONE Medico(CF, nome,cognome) SQL-DDL Statement CREATE TABLE Medico( cf char(16) PRIMARY KEY, nome varchar(20), cognome varchar(20) ) engine=innodb;

SCHEMA FISICO DEFINIZIONE DELLE TABELLE RELAZIONE Paziente(CF, nome,cognome) SQL-DDL Statement CREATE TABLE Paziente( cf char(16) PRIMARY KEY, nome varchar(20), cognome varchar(20) ) engine=innodb;

SCHEMA FISICO DEFINIZIONE DELLE TABELLE RELAZIONE Prescrizione(data,numero,medico*,paziente*, (data_scontrino, num_scontrino)*) CREATE TABLE Prescrizione( data date NOT NULL, numero int(10) unsigned NOT NULL, medico char(16) NOT NULL, paziente char(16) NOT NULL, data_scontrino date NOT NULL, num_scontrino int(10) NOT NULL, PRIMARY KEY(data, numero,medico), FOREIGN KEY (data_scontrino,num_scontrino) REFERENCES Scontrino(data,numero), FOREIGN KEY (medico) REFERENCES Medico(cf), FOREIGN KEY (paziente) REFERENCES Paziente(cf) ) engine=innodb;

SCHEMA FISICO DEFINIZIONE DELLE TABELLE RELAZIONE Interazione (categoria1,categoria2) SQL-DDL Statement CREATE TABLE Interazione( categoria1 int(10) unsigned, categoria2 int(10) unsigned, FOREIGN KEY(categoria1) REFERENCES CategoriaFT(codice), FOREIGN KEY(categoria2) REFERENCES CategoriaFT(codice), PRIMARY KEY(categoria1,categoria2) ) engine=innodb; Note La chiave primaria è formata dalla coppia (categoria1,categoria2)

RELAZIONE SCHEMA FISICO DEFINIZIONE DELLE TABELLE DettaglioScontrino((data,numero)*,prodotto*, quantità) CREATE TABLE DettaglioScontrino( data date NOT NULL, numero int(10) NOT NULL, prodotto int(10) unsigned NOT NULL, quantità int NOT NULL DEFAULT 1, FOREIGN KEY (prodotto) REFERENCES Prodotto(codice), CONSTRAINT FK_prescrizione FOREIGN KEY (data,numero) REFERENCES Scontrino(data,numero), PRIMARY KEY(data, numero,prodotto) ) engine=innodb;

RELAZIONE SCHEMA FISICO DEFINIZIONE DELLE TABELLE DettaglioPrescrizione(codiceFarmaco*,(dataP, numerop,medico)*) CREATE TABLE DettaglioPrescrizione( codicefarmaco int(10) unsigned NOT NULL, data date NOT NULL, numerop int(10) unsigned NOT NULL, medico char(16) NOT NULL, FOREIGN KEY (codicefarmaco) REFERENCES Farmaco(codiceP), CONSTRAINT FK_dett_prescr FOREIGNKEY (data, numerop,medico) REFERENCES Prescrizione(data,numero,medico) CONSTRAINT FK_dett_prescr PRIMARY KEY(data, numerop,medico,codicefarmaco) ) engine=innodb;