Esercizi su Modello Relazionale

Documenti analoghi
Esercizi su Modello Entità-Relazioni

Esercizi su Modello Entità-Relazioni

Esercizio 1 ESERCIZI DI PROGETTAZIONE CONCETTUALE DI BASI DI DATI. La base di dati di una università contiene informazioni

Fondamenti di Informatica 2

Fondamenti di Informatica 2 Simulazione d esame dell 11 Dicembre 2009

Lezione 4. Dallo schema ER al relazionale

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

LABORATORIO di INFORMATICA

ESAME di INFORMATICA e ARCHIVIAZIONE

LA PROGETTAZIONE LOGICA

LABORATORIO di INFORMATICA

Basi di dati: appello 14/07/06

Basi di dati: appello 04/07/06

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

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

Concettuale. Giuseppe Amato

SCHEMA E/R DI UNA UNIVERSITA'

ESERCIZI SQL. Esercizio 1

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Laboratorio di Basi di Dati Esercizio 8.4/9.1

Esprimere in algebra (ottimizzata), calcolo relazionale la seguente query:

Laboratorio di Basi di Dati

SQL: DDL, VI, Aggiornamenti e Viste

PROGETTAZIONE LOGICA. Prof. Ing. Alfredo GARRO 1/6. Artista. Cantante. DataDiNascita. Codice. Nazionalità

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Modello Entità-Relazione

IL MODELLO ENTITÀ- RELAZIONE. Gli altri costruttori

Basi di Dati 1 Esercitazione 5 08/01/2013. Matteo Picozzi

Esame di Basi di Dati, SOLUZIONE APPELLO 09/06/2009

PROGETTAZIONE DI DATABASE Linguaggio SQL

Basi di dati I 19 settembre 2016 Tempo a disposizione: un ora e 45 minuti.

StudiodiunCaso. Roberto Basili,

Dichiarazione degli schemi in SQL DDL 1

Insegnamento di Basi di Dati

Basi di dati: appello 07/02/06

Interrogazioni in SQL

Verifica di Informatica. Cognome e Nome: Classe 5ª Ci, Data

Esercitazione 1: DB-MAIN e modello E/R

Ese1: DB-MAIN e modello E/R

Basi di dati 8 settembre 2015 Esame Compito A Tempo a disposizione: due ore. Libri chiusi.

Basi di dati I Prova di autovalutazione 30 ottobre 2014

B a s i d i D a t i ( M o d u l o T e o r i a ) P r o v a s c r i t t a

Esempio di database relazionale con l utilizzo del prodotto MySQL

Traduzione ER - relazionale

Interrogazioni nidificate

Unità 2.2 Comandi sulle tabelle

IL MODELLO ENTITÀ-RELAZIONE

Laboratorio di Basi di Dati

ESERCITAZIONE ER-1. a.a Basi di Dati e di Conoscenza. Basi di dati

Laboratorio di Basi di Dati

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

Basi di dati (nuovo ordinamento) 16 giugno 2008 Compito A

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

ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella i dati di un sistema di gestione di campionati di basket.

Della suddetta realtà fornire lo schema E/R, lo schema logico e la realizzazione in SQL.

Il modello Relazionale.

Interrogazioni nidificate

Esercizi su SQL. Basi di Dati A.A. 2009/2010 Docente: Prof. Ing. Giorgio Giacinto. Ing. Roberto Tronci.

Prova del 14/09/09. Considerare la seguente descrizione di un campeggio:

Ciclo di vita di un sistema informativo

Il modello Entity-Relationship: elementi avanzati

LABORATORIO di INFORMATICA

SQL: Definizione e Manipolazione di Relazioni. Capitolo 2

Il modello Entity-Relationship: elementi avanzati

Soluzione esercitazione 01

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

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

Basi di dati: appello 08/03/06

Sistemi di Elaborazione delle Informazioni (C.I. 15) Basi di dati Introduzione teorica

Il Modello Concettuale Enità-Relazione (ER)

Basi di dati (database)

ESERCIZI DI MODELLAZIONE E-R

11 - Progettazione Logica

matr. Nome Cognome firma Basi di Dati Prova del 22 Dicembre 2008

Basi di Dati. Esercitazione Algebra Relazionale e SQL. Ing. Paolo Cappellari. 15 maggio 2006

Corso di Basi di Dati

OBIETTIVI DELL'ESERCITAZIONE

Si considerino le seguenti specifiche relative alla realizzazione di un sistema informativo per un concessionario di automobili.

Basi di dati Appello del Soluzione del compito B

Il modello Entità/Relazioni (ER)

DataBase Management System - DBMS

Basi di dati: appello 28/02/06

Basi di dati: appello 21/09/12

Progettazione logica Fase 2: Traduzione nel modello relazionale. adattato da Atzeni et al., Basi di dati, McGrawHill

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

Programmazione con Java

GESTIONE DEI REPARTI DI UN OSPEDALE

Traduzione dal modello E/R al modello relazionale

La progettazione logica Traduzione dal modello Entità-Associazione al modello relazionale Anno accademico 2008/2009

ESERCIZI DI MODELLAZIONE E-R

Informatica Industriale Modello funzionale: Informazione Modello Entità-Relazione

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

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

Fase di Analisi Class Diagram. Esercizi

Atzeni, Ceri, Paraboschi, Torlone Basi di dati

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Architettura Client-Server. In a nutshell

GESTIONE ASSICURAZIONI AUTO

Progettazione di basi di dati

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1

Transcript:

Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Esercizi su Modello Relazionale Ing. Roberto Tronci roberto.tronci@diee.unica.it Basi di Dati A.A. 2009/2010 Docente: Prof. Ing. Giorgio Giacinto

2 Esercizio 2.5 (1/2) Considerando l istanza della relazione Studenti mostrata in figura: sid login età media 50000 Dave dave@cs 19 25.1 53666 Jones jones@cs 18 25.6 53688 Smith smith@ee 18 24.1 53650 Smith smith@math 19 27.4 53831 Madayan madayan@music 11 8.8 53832 Guldu guldu@music 12 9.0

3 Esercizio 2.5 (2/2) 1. Date un esempio di un attributo (o insieme di attributi) che potete dedurre non essere una chiave candidata, supponendo che questa istanza sia legale. R. Esempi di chiave non-candidata sono {}, {età}. ({media} si può escludere a priori vista la sua natura) 2. C è qualche esempio di un attributo (o insieme di attributi) che potete dedurre essere una chiave candidata, supponendo che questa istanza sia legale? R. La chiave di una relazione non può essere dedotta solamente dall istanza di una relazione. L informazione che l istanza è legale è irrilevante. Da un istanza si può solo dedurre quali possano essere delle chiavi, ma non quali sono chiavi.

4 Esercizio 2.7 (1/3) Consideriamo le seguenti relazioni: Studente (sid: string, : string, login: string, età: integer, media: real) Professori (fid: string, f: string, salario: real) Corsi (cid: string, c: string, crediti: integer) Aule (anum: integer, indirizzo: string, capienza: integer) Iscrizioni (sid: string, cid: string, voto: integer) Docenza (fid: string, cid: string) Orario (cid: string, anum: integer, ora: string) 1. Elencare tutte le chiavi esterne tra queste relazioni. 2. Date un esempio di un vincolo (plausibile) che coinvolge una o più di queste relazioni che non sia un vincolo di chiave primaria o esterna.

5 Esercizio 2.7 (2/3) 1. Elencare tutte le chiavi esterne tra queste relazioni. R. Come si può facilmente notare Studente, Professori, Corsi ed Aule non necessitano di chiavi esterne. Nello schema logico risultano essere le relazioni base (le loro chiavi sono, rispettivamente: sid, fid, cid e anum). Nella relazione Iscrizioni sid e cid devono essere chiavi esterne (ad ogni studente reale deve corrispondere un corso reale). Per lo stesso motivo anche nella relazione Docenza fid e cid devono essere chiavi esterne. Nella relazione Orario cid e anum devono essere chiavi esterne.

6 Esercizio 2.7 (3/3) 2. Date un esempio di un vincolo (plausibile) che coinvolge una o più di queste relazioni che non sia un vincolo di chiave primaria o esterna. R. Probabilmente può essere una decisione saggia inserire altri vincoli in questo DBMS: La lunghezza di sid, cid e fid può essere standardizzata. Si possono inserire checksum per i suddetti numeri d identificazione Possono essere posti dei limiti ai valori che possono assumere i campi crediti, salario, capienza e voto (possono essere fatti anche altri esempi)

7 Esercizio 5.2 Semestre semestreid cf corsoid Professore InsegnaIn Corso

8 Esercizio 5.2 La sua traduzione in uno schema relazionale è: Professore (cf: string) Corso (corsoid: string) Semestre (semestreid: string) InsegnaIn (cf: string,semestreid: string,corsoid: string)

9 Esercizio 5.2 Implementazione in SQL CREATE TABLE Professore( cf CHAR(16), PRIMARY KEY (cf)) CREATE TABLE Corso ( corsoid CHAR(10), PRIMARY KEY (corsoid)) CREATE TABLE Semestre( semestreid CHAR(10), PRIMARY KEY (semestreid)) CREATE TABLE InsegnaIn( cf CHAR(16), corsoid CHAR(10), semestreid CHAR(10), PRIMARY KEY (cf,corsoid,semestreid), FOREIGN KEY (cf) REFERENCES Professore, FOREIGN KEY (corsoid) REFERENCES Corso, FOREIGN KEY (semestreid) REFERENCES Semestre)

10 Esercizio A (1/3) Settore Collocazione Specie Appartenenza età AnimID Animale

11 Esercizio A (2/3) La sua traduzione in uno schema relazionale è: Settore (: string) Specie (: string, settore: string) foreign key (settore) references Settore () L attributo settore deve essere NOT NULL Animale (AnimID: string, età: integer,specie: string) foreign key (specie) references Specie () L attributo specie deve essere NOT NULL

12 Esercizio A (3/3) Implementazione in SQL CREATE TABLE Settore ( CHAR(20), PRIMARY KEY ()) CREATE TABLE Specie ( CHAR(20), settore CHAR(20) NOT NULL, PRIMARY KEY (), FOREIGN KEY (settore) REFERENCES Settore()) CREATE TABLE Animale ( AnimID CHAR(10), età integer, specie PRIMARY KEY (AnimID), CHAR(20) NOT NULL, FOREIGN KEY (specie) REFERENCES Specie())

13 Esercizio B (1/4) Targa Colore Autoveicolo Codice Costo Appartenenza Tariffa Prezzo Categoria

14 Esercizio B (2/4) La sua traduzione in uno schema relazionale è: Autoveicolo (targa: string,colore: string,categoria: string) foreign key (categoria) references Categoria () L attributo categoria deve essere NOT NULL Categoria (: string, tariffa: string) foreign key (tariffa) references Tariffa (codice) L attributo tariffa deve essere NOT NULL Tariffa (codice: string, costo: real)

15 Esercizio B (3/4) Implementazione in SQL CREATE TABLE Tariffa ( codice CHAR(10), costo REAL, CREATE TABLE Categoria ( tariffa CREATE TABLE Autoveicolo(targa colore PRIMARY KEY (codice)) PRIMARY KEY (), CHAR(20), CHAR(10) NOT NULL, FOREIGN KEY (tariffa) REFERENCES Tariffa(codice)) categoria CHAR(8), CHAR(15), PRIMARY KEY (targa), CHAR(20) NOT NULL, FOREIGN KEY (categoria) REFERENCES Categoria())

16 Esercizio B (4/4) Asserzioni per soddisfare i vincoli di partecipazione non soddisfabili solo tramite il NOT NULL (ovvero che ad ogni categoria appartenga almeno una macchina e che ad ogni tariffa appartenga almeno una categoria). CREATE ASSERTION Tariffa_Categoria CHECK((SELECT COUNT(DISTINCT tariffa) FROM Categoria)=(SELECT COUNT(*) FROM Tariffa)) CREATE ASSERTION Categoria_Auto CHECK((SELECT COUNT(DISTINCT categoria) FROM Automobile) = (SELECT COUNT(*) FROM Categoria))

17 Esercizio 5.7 CF età indirizzo CF esperienza specializzazione Paziente Medico_Pri Medico Prescrizione data quantità Medicina

18 Esercizio 5.7 indirizzo formula telefono Medicina marca Farmacia Vendita prezzo Produzione data_inizio data_fine Contratto telefono testo supervisore Compagnia

19 Esercizio 5.7 La sua traduzione in uno schema relazionale è: Paziente (cf: string,: string,indirizzo: string, età: integer,medico: string) foreign key (medico) references Medico(cf) L attributo medico deve essere NOT NULL Medico (cf: string,: string,esperienza: integer, specializzazione: string) Compagnia (: string,telefono: integer) Medicina (marca: string,compagnia: string,formula: string) foreign key (compagnia) references Compagnia() ON DELETE CASCADE

20 Esercizio 5.7 Prescrizione (paziente: string,medico: string,marca: string, compagnia: string,data: string,quantità: integer) foreign key (paziente) references Paziente(cf) foreign key (medico) references Medico(cf) foreign key (marca,compagnia) references Medicina Farmacia (: string,indirizzo: string,telefono: integer) Vende (farmacia: string,marca: string,compagnia: string, prezzo: integer) foreign key (farmacia) references Farmacia() foreign key (marca,compagnia) references Medicina Contratto (farmacia: string,compagnia: string,testo: string, datainizio: string,datafine: string,supervisore: string) foreign key (farmacia) references Farmacia() foreign key (compagnia) references Compagnia()

21 Esercizio 5.7 Implementazione in SQL CREATE TABLE Paziente ( cf età indirizzo medico PRIMARY KEY (cf), CHAR(16), CHAR(30), INTEGER, CHAR(40), CHAR(16) NOT NULL, FOREIGN KEY (medico) REFERENCES Medico(cf)) CREATE TABLE Medico ( cf CHAR(16), CHAR(30), esperienza specializzazione PRIMARY KEY (cf)) INTEGER, CHAR(40),

22 Esercizio 5.7 CREATE TABLE Prescrizione(paziente medico marca compagnia data quantità CHAR(16), CHAR(16), CHAR(20), CHAR(20), CHAR(20), INTEGER, PRIMARY KEY (paziente, medico, marca, compagnia), FOREIGN KEY (paziente) REFERENCES Paziente(cf), FOREIGN KEY (medico) REFERENCES Medico(cf), FOREIGN KEY (marca,compagnia) REFERENCES Medicina)

23 Esercizio 5.7 CREATE TABLE Compagnia ( telefono CHAR(20), INTEGER, PRIMARY KEY ()) CREATE TABLE Farmacia ( CHAR(16), indirizzo CHAR(40), telefono INTEGER, PRIMARY KEY ()) CREATE TABLE Medicina ( marca CHAR(20), compagnia CHAR(20), formula CHAR(100), PRIMARY KEY (marca,compagnia), FOREIGN KEY (compagnia) REFERENCES Compagnia() ON DELETE CASCADE)

24 Esercizio 5.7 CREATE TABLE Vende ( farmacia CHAR(16), marca CHAR(20), compagnia prezzo CHAR(20), INTEGER, PRIMARY KEY (farmacia,marca, compagnia), FOREIGN KEY (marca,compagnia) REFERENCES Medicina, FOREIGN KEY (farmacia) REFERENCES Farmacia())

25 Esercizio 5.7 CREATE TABLE Contratto ( farmacia compagnia supervisore testo datainizio datafine CHAR(16), CHAR(20), CHAR(20), CHAR(100), CHAR(20), CHAR(20), PRIMARY KEY (farmacia,compagnia), FOREIGN KEY (farmacia) REFERENCES Farmacia(), FOREIGN KEY (compagnia) REFERENCES Compagnia())

26 Esercizio 5.7 Asserzioni per soddisfare i vincoli di partecipazione non soddisfabili solo tramite il NOT NULL (ovvero un medico ha almeno un paziente come medico principale). CREATE ASSERTION Medico_Principale CHECK((SELECT COUNT(DISTINCT medico) FROM Paziente)=(SELECT COUNT(*) FROM Medico))

27 Esercizio D cf cog data di nascita data matricola cog Paziente Cura Ricovero Medico Responsabile motivo Data di dimissione Ricoveri conclusi ISA Ricoveri in corso specializzazione Data laurea recapito parente Analisi data Visita Presenza ora

28 Esercizio D data ora Visita Prescrizione dosaggio Diagnosi codice Medicina costo codice Malattia

29 Esercizio D La sua traduzione in uno schema relazionale è: Paziente (cf: string,: string,cog: string, datanascita: string) Medico (matricola: string,: string,cog: string, specializzazione: string,datalaurea: string) Ricovero (cf: string,data: string,medico: string) foreign key (medico) references Medico(matricola) L attributo medico deve essere NOT NULL RicoveroInCorso (cf: string,data: string,recapito: string) foreign key (cf,data) references Ricovero ON DELETE CASCADE RicoveroConclusi (cf: string,data: string,motivo: string, datadimissione: string) foreign key (cf,data) references Ricovero ON DELETE CASCADE

30 Esercizio D Visita (paziente: string,data: date,ora: string, diagnosi: string) foreign key (paziente) references Paziente(cf) ON DELETE CASCADE foreign key (diagnosi) references Malattia(codice) L attributo diagnosi deve essere NOT NULL Presenza (paziente: string,data: string,ora: string, medico: string) foreign key (paziente,data,ora) references Visita foreign key (medico) references Medico(matricola) Malattia (codice: string,: string)

31 Esercizio D Medicina (codice: string,: string,costo: real) Prescrizione (medicina: string,paziente: string, data: string,ora: string,dosaggio: string) foreign key (medicina) references Medicina(codice) foreign key (paziente,data,ora) references Visita

32 Esercizio 5.3

33 Esercizio 5.3 ruolo cf specialità Professore Per_tempo Lavora_Dip Dipartimento Dirige_Dip dnumero ufficio

34 Esercizio 5.3 Professore (cf: string, : string, ruolo: string, specialità: string) Dipartimento (dnumero: integer, : string, ufficio: string, direttore: string) foreign key (direttore) references Professore(cf) Lavora_dip (professore: string,dipartimento: string, per_tempo: string) foreign key (professore) references Professore(cf) foreign key (dipartimento) references Dipartimento(dnumero) E necessario usare una asserzione per esprimere il vincolo che ogni professore lavora in almeno un dipartimento.

35 Esercizio 5.3 ruolo cf specialità Professore Lavora_In Progetto Gestisce pid sponsor inizio budget fine

36 Esercizio 5.3 Professore (cf: string, : string, ruolo: string, specialità: string) Progetto (pid: string, inizio: string, fine: string, sponsor: string, budget: real, gestore: string) foreign key (gestore) references Professore(cf) Lavora_In (professore: string,dipartimento: string) foreign key (professore) references Professore(cf) foreign key (dipartimento) references Dipartimento(dnumero)

37 Esercizio 5.3 età cf prog_post Studente anziano laureato tutore Lavora_post_laurea Dipartimento dnumero ufficio

38 Esercizio 5.3 Dipartimento (dnumero: integer, : string, ufficio: string, direttore: string) foreign key (direttore) references Professore(cf) Studente (cf: string, : string, età: integer, programma_post: string, dipartimento: string) foreign key (dipartimento) references Dipartimento(dnumero) L attributo dipartimento deve essere NOT NULL Tutore (laureato: string, anziano: string) foreign key (laureato) references Studente(cf) foreign key (anziano) references Studente(cf) NOTA BENE: In questo caso particolare Tutore non è stato assorbito dentro studente poiché solo gli studenti laureati hanno un tutore e non tutti gli studenti (infatti studenti comprende anche gli studenti anziani). Questa rappresenta un eccezione rispetto al fatto che il vincolo di chiave comporti l assorbimento della relazione nell entità quando si crea lo schema logicorelazionale.

39 Esercizio 5.3 ruolo cf specialità cf età prog_post Professore anziano Studente laureato Assiste_ricerca tutore Progetto pid budget inizio sponsor fine Supervisiona

40 Esercizio 5.3 Supervisiona (professore: string, studente: string, progetto: string) foreign key (professore) references Professore(cf) foreign key (studente) references Studente(cf) foreign key (progetto) references Progetto(pid) L attributo professore deve essere NOT NULL Generalmente la relazione che collega l aggregazione viene tradotta come una relazione nello schema relazionale ed è identificata sia dalle chiavi delle entità a cui è direttamente collegata che dalle chiavi che identificano l aggregazione a cui si collega. In questo caso la chiave minima è data da (studente,progetto) per la presenza del vincolo di chiave e partecipazione totale fra l aggregazione e Professore, il NOT NULL è necessario per esprimere il vincolo che il lavoro di uno studente in un progetto deve essere supervisionato obbligatoriamente da un professore.

41 Esercizio 5.3 età cf prog_post Studente anziano laureato tutore Assiste_ricerca Progetto pid sponsor inizio budget fine

42 Esercizio 5.3 Il vincolo di partecipazione totale fra Progetto e Studente, ovvero che ad ogni progetto deve assistere almeno uno studente può essere espresso tramite una asserzione. Assiste_ricerca non è necessario rappresentarlo poiché i suoi vincoli sono già catturati nello schema relazionale da supervisiona.

43 Esercizio E (esame del 5 Settembre 2006) Una azienda che produce mobili componibili ha deciso di memorizzare in una base di dati le informazioni relative alle mansioni degli operai che lavorano in azienda. 1) Ciascun operaio ha un Codice Fiscale, un, un indirizzo e un numero di telefono. 2) Ciascun utensile usato dagli operai nelle lavorazioni dei mobili ha un (es. trapano, sega circolare, ecc.) e un numero di inventario. 3) Ogni operaio può usare diversi utensili, e un dato utensile può essere usato da diversi operai. 4) Ciascun mobile ha un etichetta con, una data di produzione, una descrizione (ad es. libreria, cucina, ecc.), e un identificatore del mobile.

44 Esercizio E (esame del 5 Settembre 2006) 5) Ogni componente di un mobile ha un codice identificativo ed un. Per ogni componente c è un operaio responsabile della sua realizzazione. 6) Ogni mobile ha un certo numero di componenti, ma nessun componente può far parte di più di un mobile. 7) Ogni componente è realizzato da uno o più operai, e un operaio può partecipare alla realizzazione un certo numero di componenti. 8) Ciascun mobile ha esattamente un operaio responsabile della sua realizzazione. Un operaio può ovviamente essere responsabile della realizzazione di diversi mobili.

45 Esercizio E (esame del 5 Settembre 2006) Progettare uno schema concettuale e disegnare un diagramma E-R per tale schema. Specificate tutti i vincoli di chiave e di cardinalità e tutte le ipotesi che fate. Se vi sono vincoli che non riuscite a rappresentare nel diagramma E- R, spiegare brevemente perché non avete potuto esprimerlo. Successivamente alla relazionale dello schema E-R realizzarne lo schema logico-relazionale.

46 Esercizio E (esame del 5 Settembre 2006) CF indirizzo telefono id descrizione data prod. Operaio Produzione Mobile usa composizione realizzazione resposabile utensile componente inventario id

47 Esercizio E (esame del 5 Settembre 2006) Operaio (cf: string, : string, indirizzo: string, telefono: string) Utensile (inventario: string, : string) Usa (operaio: string, utensile: string) foreign key (operaio) references Operario(cf) foreign key (utensile) references Utensile(inventario) Mobile (id: string, : string, descrizione: string, data_produzione: string, responsabile: string) foreign key (responsabile) references Operario(cf) L attributo responsabile deve essere NOT NULL

48 Esercizio E (esame del 5 Settembre 2006) Componente (id: string, : string, responsabile: string, mobile: string) foreign key (responsabile) references Operario(cf) foreign key (mobile) references Mobile(id) Gli attributi responsabile e mobile devono essere NOT NULL Realizzazione (operaio: string, componente: string) foreign key (operaio) references Operario(cf) foreign key (componente) references Componente(id)

49 CF Nome Cog data di nascita Esercizio G (esame del 19 Dipendente Settembre 2006) Dipendenza ISA Funzionario Impiegato Indirizzo Numero Direttore Responsabilità Agenzia Filiale Composizione Codice Città

50 Esercizio G (esame del 19 Settembre 2006) DIPENDENTE( CF, Nome, Cog, DataNascita,Filiale) Foreign Key Filiale References FILIALE(Codice) FUNZIONARIO(CF) Foreign Key CF References DIPENDENTE(CF) ON DELETE CASCADE IMPIEGATO(CF) Foreign Key CF References DIPENDENTE (CF) ON DELETE CASCADE FILIALE(Codice, Città, Direttore) Foreign Key Direttore References Funzionario(CF) AGENZIA(Filiale,Numero,Indirizzo,Responsabile) Foreign Key Filiale References FILIALE(Codice) ON DELETE CASCADE Foreign Key Responsabile References Impiegato(CF)

51 Esercizio G (esame del 19 Settembre 2006) Impiegato e Funzionario sono state considerate come entita deboli rispetto all entita Dipendente. La gerarchia ISA richiede che Funzionario e Impiegato siano disgiunte. Il vincolo corrispondente in SQL e il seguente: CREATE ASSERTION Disgiunzione CHECK (0 = (SELECT COUNT(CF) FROM IMPIEGATO WHERE CF IN (SELECT CF FROM FUNZIONARIO)) Il vincolo che Funzionario e Impiegato COPRONO Dipendente si può esprimere in SQL con CREATE ASSERTION Copertura CHECK (0 = (SELECT COUNT(CF) FROM Dipendente WHERE CF NOT IN (SELECT CF FROM FUNZIONARIO) OR CF NOT IN (SELECT CF FROM IMPIEGATO)))