Università di Modena e Reggio Emilia 1 DB unimo Decomposizione Schemi e Trigger.

Slides:



Advertisements
Presentazioni simili
Structured Query Language
Advertisements

SQL applicato a SQL Server
Sicurezza e concorrenza nelle basi di dati
Stored Procedure Function Trigger
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
1 DATA BASE GESTIONE VENDITE. 2 QUERY1 Per ogni Cognome di Rappresentante e Descrizione di Prodotto calcolare la somma delle quantità vendute: Somma (Quantità)
1 Comandi per la manipolazione dei dati. 2 Tipi di comandi INSERT UPDATE DELETE COMANDI COMANDI 2.
1 Basi di dati attive. 2 Sommario Preliminari Approcci architetturali Linguaggi per la specifica di regole – Eventi – Condizioni – Azioni – Ulteriori.
Nana Mbinkeu Rodrigue Carlos 1 DB unimo OTTIMIZZAZIONE DI QUERY IN MOMIS Università degli studi di Modena e Reggio Emilia Relatore: Prof. Sonia.
Biglietti e Ritardi: schema E/R
SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.
Biglietti e Ritardi: schema E/R
Biglietti: schema E/R.
1 Biglietti: schema E/R. 2 Biglietti: albero degli attributi.
Asserzioni, Viste & Triggers
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Introduzione al linguaggio C
Progettazione ER Un database universitario contiene informazioni riguardanti i professori (identificati dal codice fiscale) e informazioni relative ai.
SQL Dati i seguenti schemi relazionali:
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
Elementi di PL/SQL.
Basi di Dati II Sara Romano
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Un prototipo di strumento per la manipolazione di versioni di schema in ambito eterogeneo Fabio Grandi DEIS - Università di Bologna SVMgr Schema Versioning.
Basi di dati attive Paolo Atzeni.
SQL: Lezione 7 Nataliya Rassadko
Aspetti sistemistici dellSQL. SQL environment Un SQL environment è un framework dove esistono dati e possono aversi istruzioni SQL eseguite su questi.
SQL Per la modifica di basi di dati
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Esercitazione.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Creazione e manipolazione tabelle. TABELLE una tabella può essere creata in qualsiasi momento,anche quando gli utenti stanno usando il database la struttura.
SQL basato su ANSI (American National Standards Institute) – standard SQL SQL – Structured Query Language è un linguaggio dichiarativo e permette di comunicare.
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
Visual Basic e accesso ai DATABASE
Progettazione di un database
Basi di Dati e Sistemi Informativi
sql: esempi di linguaggio sql nell'implementazione mysql
Basi di Dati e Sistemi Informativi
Basi di dati attive. Una base di dati che offre regole attive Si parla normalmente di trigger Trigger presentati rapidamente in precedenza Si vogliono.
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Esercitazione 7.
SQL (IV) Data Definition Language/ Data Manipulation Language.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
ATOMICITÀ Il tipo di atomicità di un programma PL/SQL è stabilito dall’ambiente chiamante oppure dal programma Gestione atomicità: –COMMIT –SAVEPOINT nome_punto.
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
SQL (III) Data Definition Language/ Data Manipulation Language.
MySQL Database Management System
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
1 Vincoli Ci sono i vincoli predefiniti ( unique, primary key, not null, foreign key … ) In SQL2 si ha anche check check Condizione Serve per dare condizioni.
Nozione ed uso Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso: –Gestione di vincoli di integrità: Per fallimento Per modifica.
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
Elementi di PL/SQL. Pl/Sql Il PL/SQL (Procedural Language/Structured Query Language) è un linguaggio di programmazione procedurale di Oracle che costituisce.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Sistemi informativi Avanzati DB ORACLE SALES HISTORY
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Basi di Dati attive. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Definizione Una base di dati si dice attiva quando dispone.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
Transcript della presentazione:

Università di Modena e Reggio Emilia 1 DB unimo Decomposizione Schemi e Trigger

Università di Modena e Reggio Emilia 2 DB unimo Tabella R SquadraGiocatoreRuolo ItaliaBergomiTerzinoDestro ItaliaBergomiLibero ItaliaMorieroAlaDestra BrasileRonaldoCentravanti ArgentinaSimeoneCentrocampista Dipendenze funzionali: F = {SR G, G S} La tupla (Argentina, Zanetti, Centrocampista) non è ammessa perché viola la dipendenza SR G.

Università di Modena e Reggio Emilia 3 DB unimo Decomposizione che non preserva i dati SquadraRuolo ItaliaTerzinoDestro ItaliaLibero ItaliaAlaDestra BrasileCentroavanti ArgentinaCentrocampista GiocatoreSquadra BergomiItalia MorieroItalia RonaldoBrasile SimeoneArgentina π SR (R) π GS (R) GiocatoreSquadraRuolo BergomiItaliaTerzinoDestro MorieroItaliaTerzinoDestro BergomiItaliaLibero MorieroItaliaLibero BergomiItaliaAlaDestra MorieroItaliaAlaDestra RonaldoBrasileCentroavanti SimeoneArgentinaCentrocampista π GS (R) join π SR (R) Questa decomposizione non preserva le dipendenze funzionali. E possibile inserire nelle tabelle le due tuple: (Argentina, Centrocampista) e (Zanetti, Argentina)

Università di Modena e Reggio Emilia 4 DB unimo Decomposizione che preserva i dati GiocatoreRuolo BergomiTerzinoDestro BergomiLibero MorieroAlaDestra RonaldoCentroavanti SimeoneCentrocampista GiocatoreSquadra BergomiItalia MorieroItalia RonaldoBrasile SimeoneArgentina π GR (R) π GS (R) π GS (R) join π SR (R) GiocatoreRuoloSquadra BergomiLiberoItalia BergomiTerzinoDestroItalia MorieroAlaDestraItalia RonaldoCentroavantiBrasile SimeoneCentrocampistaArgentina Questa decomposizione preserva i dati.

Università di Modena e Reggio Emilia 5 DB unimo Trigger su R Per conservare le dipendenze funzionali sulla tabella R prima di tutto dichiariamo una chiave composta da tutti i campi. Primary key(squadra, giocatore, ruolo) Per conservare le dipendenze funzionali serve un trigger sulla tabella R che controlli gli inserimenti e gli update sulle tuple della tabella R.

Università di Modena e Reggio Emilia 6 DB unimo Trigger su R (cont.) CREATE TRIGGER Controllo_DF_R ON R FOR INSERT, UPDATE AS --- Dichiaro delle variabili di comodo int -- controllo S,R --> G -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" = count(*) from R, inserted where R.squadra = inserted.squadra and R.ruolo = inserted.ruolo and R.giocatore <> inserted.giocatore > 0 begin raiserror('Il ruolo che si vuole inserire per la squadra scelta ha già un giocatore.',16,1) rollback transaction end

Università di Modena e Reggio Emilia 7 DB unimo Trigger su R -- controllo G --> S = = = inserted.squadra fromR, inserted whereR.giocatore = inserted.giocatore andR.squadra <> inserted.squadra andR.ruolo <> inserted.ruolo if <> '') and begin raiserror('Il giocatore che si vuole inserire può appartenere a una sola squadra.',16,1) rollback transaction end go

Università di Modena e Reggio Emilia 8 DB unimo Trigger su GR Sulla tabella GR viene definita la chiave PRIMARY KEY(giocatore, ruolo) e viene definito il seguente trigger per preservare le dipendenze. Trigger per il controllo degli update. CREATE TRIGGER Controllo_DF_GR_UP ON GR FOR UPDATE AS --- Dichiaro delle variabili di comodo int -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" = count(*) from GS,inserted where GS.giocatore = inserted.giocatore

Università di Modena e Reggio Emilia 9 DB unimo Trigger su GR -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" = count(*) from GR, GS,inserted where GR.giocatore = GS.giocatore and GR.ruolo = inserted.ruolo andGR.giocatore <> inserted.giocatore = 0 begin raiserror('Il giocatore non appartiene a nessuna squadra!',16,1) rollback transaction end else > 0 begin raiserror('Il ruolo che si vuole inserire ha già un giocatore per quella squadra!',16,1) rollback transaction end go

Università di Modena e Reggio Emilia 10 DB unimo Trigger su GR Creo un trigger per controllare gli inserimenti. CREATE TRIGGER Controllo_DF_GR ON GR FOR INSERT AS --- Dichiaro delle variabili di comodo int -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" = count(*) from GS,inserted where GS.giocatore = inserted.giocatore

Università di Modena e Reggio Emilia 11 DB unimo Trigger su GR -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" = count(GR.ruolo) from GR, GS,inserted where GR.giocatore = GS.giocatore and GR.ruolo = inserted.ruolo andGS.giocatore <> inserted.giocatore andGS.squadra = (select squadra from GS, inserted where GS.giocatore = inserted.giocatore) group by GR.ruolo = 0 begin raiserror('Il giocatore non appartiene a nessuna squadra!',16,1) rollback transaction end else > 0 begin raiserror('Il ruolo che si vuole inserire ha già un giocatore per quella squadra!',16,1) rollback transaction end go

Università di Modena e Reggio Emilia 12 DB unimo Trigger su GS Sulla tabella GS viene definita una chiave solo sul giocatore. In questo modo è conservata la dipendenza funzionale G S. Primary key(giocatore) Scrivo un trigger per controllare le modifiche fatte alle tuple presenti in GS. In particolare controllo che nel caso si cambi la squadra di un giocatore, esso non abbia ruoli già presenti per la squadra modificata. CREATE TRIGGER Controllo_DF_GS ON GS FOR UPDATE AS --- Dichiaro delle variabili di comodo int

Università di Modena e Reggio Emilia 13 DB unimo Trigger su GS -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" = count(GR.ruolo) from GR, GS,inserted where GR.giocatore = GS.giocatore and GR.ruolo in (select GR.ruolo from GR, inserted where GR.giocatore = inserted.giocatore) andGS.giocatore <> inserted.giocatore andGS.squadra = (select GS.squadra from GS, inserted where GS.giocatore = inserted.giocatore) > 0 begin raiserror('Non è possibile modificare la squadra del giocatore!',16,1) rollback transaction end go