Anteprima
Vedrai una selezione di 20 pagine su 112
Appunti di Sistemi informativi Pag. 1 Appunti di Sistemi informativi Pag. 2
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 6
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 11
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 16
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 21
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 26
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 31
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 36
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 41
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 46
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 51
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 56
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 61
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 66
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 71
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 76
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 81
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 86
Anteprima di 20 pagg. su 112.
Scarica il documento per vederlo tutto.
Appunti di Sistemi informativi Pag. 91
1 su 112
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Formattazione del testo

X EXCEPTIONBEGINSELECT QTA-DISP, QTA-RIORD INTO Q1, Q2FROM MAGAZZINO WHERE COD-PROD = PROD;IF Q1 < QUANT THEN RAISE(X); RAISE è un'istruzione per sollevareUPDATE MAGAZZINO un'eccezione e far terminare il programmaSET QTA-DISP = QTA-DISP - QUANT con una condizione di errore.WHERE COD-PROD = PROD;IF Q1 - QUANT < Q2 THEN INSERT INTO RIORDINOVALUES(PROD, SYSDATE, Q2) SYSDATE è una variabile di sistema che contieneEND la data di quando viene eseguita la query.Esempio di invocazione:PRELIEVO(4,150) → PROD=4, QUANT=150 → Q1 = 170, Q2 = 50→ → 28REGOLE ATTIVE (TRIGGER): Moduli di programma che svolgono una specifica attività dimanipolazione dei dati.Non standard in SQL2 ma presenti nei principali sistemi relazionale.Sono simili alle procedure, ma l'invocazione è automatica.Seguono il paradigma ECA (EVENTO-CONDIZIONE-AZIONE):
• evento: modifica alla base di dati
• condizione: predicato
• azione: modifica

alla base di dati, segnalazione agli utenti

Quando accade l'evento, se la condizione è vera, allora si esegue l'azione.

Esempio: gestione automatica del riordino

  1. evento: il trigger si metterà in preallarme ogni volta che l'utente andrà a modificare la colonna QDISP della tabella MAGAZZINO.
  2. Condizione: la nuova quantità disponibile è inferiore alla (nuova) quantità di riordino.
  3. Azione:
    • Se la quantità disponibile è insufficiente: eccezione (annullando l'update).
    • Emissione di un ordine

Trigger:

CREATE TRIGGER GESTIONE-RIORDINO
AFTER UPDATE OF QTA-DISP ON MAGAZZINO -- evento
WHEN (NEW.QTA-DISP < NEW.QTA-RIORD) -- condizione
FOR EACH ROW
BEGIN
    IF NEW.QTA-DISP < 0 THEN RAISE(X);
    INSERT INTO RIORDINO
    VALUES(NEW.COD-PROD, SYSDATE, NEW.QTA-DISP);
END;

Esecuzione dell'applicazione:

UPDATE MAGAZZINO
SET QTA-DISP = QTA-DISP - 150
WHERE ...
COD-PROD = 4
Esecuzione del trigger:
Evento: UPDATE(QTA-DISP) ON MAGAZZINO
Condizione: vera.
Azione: IF NEW.QTA-DISP < 0 THEN RAISE(X) non scatta.
INSERT INTO RIORDINO VALUES (NEW.COD-PROD, SYSDATE, NEW.QTA-RIORD)

Procedure e trigger e conseguenze del loro uso:
Permettono la decomposizione modulare delle applicazioni.
Paradigma di invocazione: esplicita (procedure), implicita (trigger)
Aumento di: efficienza, controllo, riuso (dal punto di vista del software).
Aumenta la responsabilità dell'amministratore della base di dati (rispetto al programmatore applicativo).
Si sposta "conoscenza" dalle applicazioni allo schema della base di dati (indipendenza di conoscenza).

NORMALIZZAZIONE DI SCHEMI RELAZIONALI
Una forma normale è una proprietà di uno schema relazionale che ne garantisce la "qualità", cioè l'assenza di determinati difetti.
Normalizzare uno schema significa garantirne alcuni aspetti di qualità.
Una relazione non

La forma normalizzata presenta ridondanze e si presta a comportamenti poco desiderabili (anomalie) durante gli aggiornamenti.

Le forme normali sono di solito definite sul modello relazionale, ma hanno senso anche in altri contesti, ad esempio nel modello E/R.

L'attività che permette di trasformare schemi non normalizzati in schemi che soddisfano una forma normale è detta normalizzazione.

La normalizzazione va utilizzata come tecnica di verifica dei risultati della progettazione di una base di dati (verifica a posteriori di uno schema già progettato). Non costituisce quindi una metodologia di progettazione.

Relazione non normalizzata (con anomalie):

  • Lo stipendio di ciascun impiegato è ripetuto in tutte le tuple relative: ridondanza.
  • Se lo stipendio di un impiegato varia, è necessario modificare il valore in diverse tuple: anomalia di aggiornamento.
  • Se un impiegato interrompe la partecipazione a tutti i progetti, dobbiamo cancellarlo: anomalia di cancellazione.

anomaliadi cancellazione (perdo traccia dell'impiegato, è come se lo licenziassi).
• Un nuovo impiegato senza progetto non può essere inserito: anomalia di inserimento.
Analizziamo la relazione:
Ogni impiegato ha un solo stipendio (anche se partecipa a più progetti).
Ogni progetto ha un (solo) bilancio.
Ogni impiegato in ciascun progetto ha una sola funzione (anche se può avere funzioni diverse in progetti diversi).
Ma abbiamo usato un'unica relazione per rappresentare tutte queste informazioni eterogenee:
- gli impiegati con i relativi stipendi
- i progetti con i relativi bilanci
- le partecipazioni degli impiegati ai progetti con le relative funzioni
Per formalizzare i problemi visti si introduce un nuovo tipo di vincolo, la dipendenza funzionale.
Consideriamo:
- Un'istanza r di uno schema R(X)
- Due sottoinsiemi (non vuoti) di attributi Y e Z di X
Diciamo che in r vale la dipendenza funzionale (FD) Y → Z (Y determina funzionalmente Z) se:

ogni coppia di tuple t1 e t2 di r con gli stessi valori su Y, t1 e t2 hanno gli stessi valori anche su Z. Esempio: Nella relazione vista si hanno diverse FD, tra cui:
  • Impiegato → Stipendio
  • Progetto → Bilancio
  • Impiegato, Progetto → Funzione
Altre FD sono meno "interessanti" ("banali") perché sempre soddisfatte (in cui il conseguente è un sottoinsieme dell'antecedente), ad esempio:
  • Impiegato, Progetto → ProgettoY
  • Y → A è non banale se A non appartiene a Y.
  • Y → Z è non banale se nessun attributo in Z appartiene a Y.
Le anomalie viste si riconducono alla presenza delle FD:
  • Impiegato → Stipendio
  • Progetto → Bilancio
Viceversa la FD Impiegato, Progetto → Funzione non causa problemi. Motivo:
  • La terza FD ha sulla sinistra una chiave e non causa anomalie.
  • Le prime due FD non hanno sulla sinistra una chiave e causano anomalie.
La relazione contiene alcune informazioni legate alla chiave e altre ad

Attributi che non formano una chiave. Per evitare le anomalie viste si può introdurre la Seconda Forma Normale (2NF).

Seconda Forma Normale (2NF) → Uno schema R(X) è in seconda forma normale se e solo se ogni attributo non-primo (ovvero non appartenente a nessuna chiave) dipende completamente da ogni chiave (ovvero non dipende solamente/parzialmente da una parte di chiave).

Esiste in realtà anche una 1NF:

Prima Forma Normale (1NF) → Richiede semplicemente che tutti gli attributi dello schema abbiano domini "atomici" (ovvero non siano composti o multi-valore).

Ma per evitare anche altre anomalie è meglio ricorrere alla:

Forma Normale di Boyce-Codd (BCNF) → Uno schema R(X) è in forma normale di Boyce e Codd se e solo se, per ogni dipendenza funzionale (non banale) Y → Z definita su di esso, Y è una superchiave di R(X).

Si noti che, come al solito, i vincoli si riferiscono allo schema, in quanto dipendono dalla semantica degli attributi.

attributi. Un'istanza può pertanto soddisfare "per caso" il vincolo, ma ciò non garantisce che lo schema sia normalizzato. In altri termini, le FD non si "ricavano" dall'analisi dei dati, ma ragionando sugli attributi dello schema.

Normalizzazione in BCNF: Se uno schema non è in BCNF, la soluzione è "decomporlo" in sottoschemi, sulla base delle FD. Attenzione! La soluzione non è sempre così semplice, bisogna fare anche altre considerazioni. Una decomposizione è corretta quando, facendo il JOIN tra le relazioni, si riottiene la relazione di partenza (decomposizione senza perdita).

La decomposizione non deve assolutamente alterare il contenuto informativo del DB! Si introduce pertanto il seguente requisito: Decomposizione senza perdita (lossless) → Uno schema R(X) si decompone senza perdita negli schemi R1(X1) e R2(X2) se, per ogni istanza legale r su R(X), il join naturale delle proiezioni di r

su X1e X2 è uguale a r stessa: π(r) ⋈ π(r) = rX1 X2 Una decomposizione con perdita può generare tuple spurie (che rappresentano informazione che non esiste). Per decomporre senza perdita è necessario e sufficiente che il join naturale sia eseguito su una superchiave di uno dei due sottoschemi, ovvero che valga X1 X2 → X1 oppure X1 X2 → X2 (X1 X2 è l'insieme di attributi su cui viene eseguito il join). Esempio Modifichiamo il DB: supponiamo di voler inserire l'informazione che Neri lavora al progetto Marte. Ricostruendo la relazione otteniamo: che però viola la FD Progetto → Sede! Questa dipendenza funzionale (violata) non riguarda più attributi che stanno assieme in una relazione. Questa decomposizione, senza perdita e senza anomalie, ha spezzato questa dipendenza. Diciamo che una decomposizione preserva le dipendenze se ciascuna delle dipendenze funzionali dello schema originario coinvolge attributi checompaiono tutti insieme in uno degli schemi decomposti. Nell'esempio: Progetto → Sede non è conservata. Se una FD non si preserva diventa più complicato capire quali sono le modifiche del DB che non violano la FD stessa. In generale si devono prima eseguire query SQL di verifica. Esempio di query di verifica: Bisogna verificare che il progetto (Marte) sia presso la stessa sede dell'impiegato (Neri). A tal fine bisogna trovare un impiegato che lavora al progetto Marte. SELECT * → vuoto (nessuna tupla) FROM Impiegati I WHERE I.Impiegato = 'Neri' AND Sede IN (SELECT I1.Sede → Roma FROM Impiegati I, ImpProg IP WHERE I1.Impiegato = IP.Impiegato AND IP.Progetto = 'Marte') Una decomposizione: - deve essere senza perdita, per garantire la ricostruzione delle informazioni originarie. - dovrebbe conservare le dipendenze, per semplificare il mantenimento dei vincoli di integrità originari. Nel nostro esempio, questo suggerisce di inserireanche lo schema (ridondanza tollerata): Va sempre eseguita una query, ma più semplice: <SELECT *> <FROM Impiegati I, Progetti P> <WHERE I.Impiegato = 'Neri'> <AND P.Progetto = 'Marte'> <AND I.Sede = P.Sede> Una limitazione non superabile... In funzione del pattern di FD, può non essere possibile decomporre in BCNF e preservare le FD. Progetto, Sede → Dirigente Dirigente → Sede Progetto, Sede → Dirigente coinvolge tutti gli attributi e quindi nessuna decomposizione può preservare tale dipendenza! Una forma normale meno restrittiva della BCNF si definisce come segue: Terza Forma Normale (3NF) → Uno s
Dettagli
Publisher
A.A. 2020-2021
112 pagine
1 download
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher buzzo123 di informazioni apprese con la frequenza delle lezioni di Sistemi informativi T-1 e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Bologna o del prof Grandi Fabio.