Archivi e basi di dati Vito Perrone



Scaricare 445 b.
30.12.2017
Dimensione del file445 b.


Archivi e basi di dati

  • Vito Perrone


Memorie di massa



Indice

  • Memorie di massa

  • Organizzazione degli archivi e basi di dati

  • Basi di dati relazionali



Introduzione

  • Memoria di tipo persistente

    • Un dato è persistente se è mantenuto integralmente quando il calcolatore viene spento oppure si verifica un errore
  • Obiettivi:

    • Memorizzare in modo compatto grandi quantità di dati
    • Accesso efficientemente e selettivo ai dati
  • Possiamo classificare i dispositivi di memoria di massa in:

    • Dispositivi ad accesso sequenziale (nastri)
    • Dispositivi ad accesso diretto (dischi)
  • Tipicamente, sono basati su tecnologia magnetica

  • La tecnologia ottica è sempre più diffusa (per i dischi)



Nastri (1)

  • Accesso sequenziale

  • Sul nastro magnetico sono incise delle piste orizzontali, parallele fra loro

  • I dati vengono registrati serialmente su ogni traccia

  • Il nastro scorre al di sopra della testina di lettura/scrittura

  • Ai dati sono aggiunti alcuni bit di controllo per consentire il rilevamento di errori (es. bit di parità)



Nastri (2)

  • I dati sono organizzati sul nastro in zone contigue, dette record

  • Sono previste zone prove di dati (gap) tra i record e all’inizio

  • Parametri principali:

    • Densità di memorizzazione: è misurata in bit per inch (bpi)
    • Capacità di memorizzazione = densità  lunghezza (in pollici)
    • Velocità di movimento del nastro
  • Alcuni nastri hanno le tracce poste diagonalmente e sono letti da testine rotanti (scansione elicoidale)

  • I nastri sono attualmente impiegati solo per il backup



Dischi (1)

  • Accesso diretto

  • Disk-pack: un certo numero di piatti coperti da uno strato magnetico

  • Ciascun piatto ha una serie di cerchi concentrici (tracce) su entrambi i lati

  • Le tracce sono suddivise in spicchi di ugual grandezza (settori)

  • Le testine di lettura/scrittura si spostano (tutte insieme) radialmente tra le varie tracce



Dischi (2)

  • L’inizio e la fine dei settori sono marcati con sequenze particolari di bit (formattazione)

  • Blocco di ingresso/uscita: gruppo di dati che vengono letti o scritti con un’unica operazione di ingresso/uscita

  • Ciascun blocco è individuato dalla terna: (num. superficie, num. traccia, num. settore)

  • Una zona di memoria (il buffer) contiene i dati prima che vengano scritti su disco o dopo essere stati letti da disco



Dischi (3)

  • Accesso ai dati:

    • Spostamento della testina verso la traccia richiesta (tempo di seek)
    • Attesa del passaggio del settore richiesto (tempo di latenza)
      • Mediamente, pari a metà del tempo di rotazione
    • Trasferimento dei dati da/verso il buffer (tempo di trasferimento)
  • Quindi: ti/u = tseek + tlat + ttrasf

  • Cilindro: l’insieme delle tracce, appartenenti a tutte le superfici, poste alla stessa distanza dal centro



Altre memoria di massa

  • Floppy disk: magnetico

  • Dischi ottici

    • CD-ROM
    • CD-R/RW
    • DVD
  • Chiavi USB: memorie a stato solido Flash EPROM



Organizzazione degli archivi e basi di dati



Organizzazione degli archivi

  • Le informazioni vengono organizzate in memoria in record logici

  • Blocchi di ingresso/uscita e record logici:

    • In un medesimo blocco di ingresso/uscita può trovare posto un certo numero di record logici
    • Esistono record logici così grandi da occupare più blocchi di ingresso/uscita
  • L’accesso ad un record logico comporta il trasferimento di uno o più blocchi di ingresso/uscita

  • Coefficiente di riempimento di un file: numero di byte allocati a record logici nel file numero di byte dei blocchi fisici allocati al file



Basi di dati

  • Base di dati (o database): insieme di dati raccolti in base a precise regole e organizzati in strutture piuttosto rigide

  • DBMS: sistema software che organizza e gestisce basi di dati

    • Opera al di sopra del sistema operativo
    • Offre linguaggi specifici per l’organizzazione e la gestione dei dati
    • Offre meccanismi efficienti per l’accesso ai dati


Basi di dati e archivi separati (1)

  • Dati gestiti basandosi sui file

  • Più applicazioni accedono ai file

  • Problemi:

    • Inconsistenza e ridondanza dei dati
    • Riservatezza dei dati
    • Integrità dei dati
    • Concorrenza


Basi di dati e archivi separati (2)

  • Integrità dei dati

    • I dati devono sempre essere consistenti con un insieme di vincoli logici
    • Ad es. in un’anagrafe ogni dato riguarda una persona, che ha un padre e una sequenza di figli. Ovviamente se esiste la persona P avente padre P1 occorre che P compaia tra i figli di P1
    • Se il programma che aggiorna i padri è diverso da quello che registra le nascite si possono avere momenti in cui i dati non sono consistenti


Basi di dati e archivi separati (3)

  • Dati gestiti da un DBMS

  • Vantaggi:

    • I dati hanno una sola rappresentazione (meno ridondanza ed inconsistenza)
    • L’accesso alla base di dati viene disciplinato dal DBMS (controllo, privatezza, ecc.)
    • Alcuni vincoli di integrità possono essere definiti e verificati in modo automatico
    • Gestione ottimale della memoria di massa
    • Gestione degli accessi concorrenti


Modelli per la gestione dei dati

  • Modello dei dati:

    • Gerarchico: basato su strutture ad albero (metà anni 60)
    • Reticolare: basato su strutture a grafo (Codasyl - 1973, 1978)
    • Relazionale: basato sul concetto di insieme e sulla strutturazione dei dati tramite tabelle (inizio anni ’80))
    • Ad oggetti: estende alle basi di dati alcune caratteristiche dei linguaggi di programmazione orientati agli oggetti (inizio anni ’90)
  • Schema di una base di dati: descrizione dei dati di uno specifico contesto applicativo

    • Definita tramite un attività detta database design
    • Istanza (od occorrenza) di una base di dati: valore assunto dalla base di dati in un particolare istante di tempo


Categorie di linguaggi

  • Data Definition Language (DDL):

    • Utilizzato per definire lo schema della base di dati
    • Lo schema viene salvato nel dizionario dei dati
  • Data Manipulation Language (DML):

    • Per formulare interrogazioni (o query) sulla base di dati
    • Per modificare il contenuto della base di dati
  • Nel seguito vedremo il linguaggio SQL (che supporta entrambi questi aspetti)



Livelli di astrazione

  • Livelli di astrazione:

    • Fisico: descrive la base di dati come un insieme di record in memoria di massa
    • Logico: descrive la struttura di ciascun dato e i collegamenti tra dati diversi
    • Esterno: presenta i dati così come vengono visti da un particolare utente o da una classe di utenti
  • Livelli di indipendenza:

    • Fisica: ridefinire il livello fisico senza modificare il livello logico
    • Logica: definire nuovi schemi esterni senza modifica la struttura logica


Transazioni

  • Transazioni: non lasciano mai la base di dati in uno stato inconsistente

  • Proprietà “acide” delle transazioni:

    • Atomicità: vi sono solo due possibili terminazioni
      • Successo: tutte le attività della transazione sono andate a buon fine, la base di dati è aggiornata (commit)
      • Fallimento: qualche attività della transazione non va a buon fine, la transazione fallisce tutta, la base di dati non viene modificata (rollback)
    • Consistenza: i vincoli di integrità dei dati non sono mai violati
    • Isolamento: transazioni concorrenti sono isolate le une dalle altre
    • Durabilità: una volta completata con successo, l’effetto della transazione sulla base di dati è permanente


Utenti di una base di dati

  • Data Base Administrator (DBA):

    • Definizione degli schemi esterni, logico e fisico
    • Definizione dei vincoli di integrità e dei requisiti di riservatezza
    • Per questi compiti, il DBA utilizza il DDL
  • Terminalista:

    • Interagisce con un’applicazione che a sua volta si interfaccerà con la base di dati
  • Programmatore:

  • Utente occasionale:

    • Formula query non previste dalle applicazioni, usando il DML


Basi di dati relazionali



Base di dati relazionale

  • Relazione, una tabella caratterizzata da:

    • Un numero fisso di colonne (dette attributi); ciascuna colonna assume valori estratti da uno stesso dominio
    • Un numero variabile di righe (dette tuple)
    • Grado di una relazione: il numero di colonne
    • Cardinalità di una relazione: il numero di righe
    • Schema di una relazione: il nome della relazione seguito dai nomi dei suoi attributi; a ciascun attributo è associato un dominio
    • Istanza di una relazione: insieme delle tuple presenti nella base di dati in un determinato istante (quindi, varia nel tempo)
  • Base di dati relazionale, un insieme di relazioni:

    • Schema di una base di dati: l’elenco delle relazioni
    • Istanza di una base di dati: insieme delle istanze delle relazioni


Esempio: schema base di dati

  • Relation CONTO-CORRENTE

  • (NUMERO-CC: integer,

  • NOME: char (20),

  • INDIRIZZO: char (20),

  • SALDO: decimal (14, 2)).

  • Relation MOVIMENTO

  • (NUMERO-CC:integer,

  • DATA-MOV: date,

  • NUMERO-MOV: integer,

  • IMPORTO: decimal (14, 2),

  • CAUSALE: char (1)).



Esempio: istanza base di dati



Alcune considerazioni

  • Siamo vincolati ad introdurre informazioni che soddisfino lo schema

    • Ad es. nella relazione Conto_corrente possiamo introdurre solo il nome e l’indirizzo del cliente, non il suo numero di telefono o il codice fiscale. Per inserire queste informazioni dovremmo prima modificare lo schema
  • Partendo dalle relazioni esistenti è possibile ricavare informazioni non direttamente disponibili nel DB, ad es. l’elenco dei clienti che abitano in una certa zona e hanno versato più di un milione nel 1995

  • Questo tipo di operazioni viene fatto attraverso il query language (o linguaggio di interrogazione del DB)



Accesso alle tuple

  • L’accesso ad una certa tupla (o ad un insieme di tuple) di una relazione è sempre ed esclusivamente di tipo associativo (non posizionale): avviene in base al valore contenuto nella tupla

  • Ovvero, posso chiedere al DBMS il saldo di Rossi

    • trova la tupla in cui l’attributo Nome vale “Rossi” e leggi l’attributo Saldo
  • Non posso chiedere il valore dell’attributo Nome della terza tupla

    • le tuple non sono ordinate e non c’è modo di fare un accesso diretto


Chiavi nelle relazioni

  • A causa dell’accesso associativo, è importante dotare le relazioni di una “chiave”

  • Una chiave è un insieme minimo di attributi il cui valore identifica univocamente una tupla

  • Serve per poter accedere ad una singola tupla

    • Ad es. nel caso del Conto_corrente si vuole poter aggiornare il Saldo di una specifica tupla, corrispondente ad un ben preciso conto corrente. La chiave sarà pertanto l’attributo Num_CC
    • Nel caso del Movimento, la chiave sarà data dall’insieme degli attributi Num_CC, Data_mov, Num_mov
  • C è una chiave per una relazione R se valgono le seguenti proprietà:

    • univocità: non possono esistere due tuple di R con lo stesso valore di C
    • minimalità: eliminando un attributo da C la proprietà precedente decade
  • Per una stessa relazione possono esistere più chiavi candidate

    • La chiave primaria della relazione sarà una tra queste
    • Spesso sulla chiave primaria non si accettano valori nulli


Restrizione e chiave

  • Restrizione: di una tupla t sugli attributi A di R, indicata con t[A], è data dalla lista dei valori assunti da t sugli attributi A di R

  • Chiave di una relazione R: un sottoinsieme K degli attributi di R, tale che valgano:

    • Unicità: in una qualunque istanza di R, non possono esistere due tuple distinte di R la cui restrizione su K sia uguale
    • Minimalità: non è possibile sottrarre a K un attributo senza che la condizione di unicità cessi di valere
  • Ogni relazione deve avere almeno una chiave

    • Se la relazione ha più chiavi, una di esse sarà la chiave primaria


Le operazioni Le operazioni relazionali

  • Ci sono operazioni che servono per combinare relazioni, limitandosi a leggere il contenuto del DB. Restituiscono sempre una relazione

    • Operazioni unarie: hanno come operando un’unica relazione
    • Operazioni binarie: hanno come operando due relazioni
    • Operazioni insiemistiche: corrispondono alle solite operazioni di unione, differenza e intersezione
  • Ci sono operazioni che servono a modificare il contenuto del DB

    • Aggiunta e riomozione e modifica di record
  • Ci sono operazioni che servono a modificare lo schema del DB



Le operazioni unarie - selezione

  • La selezione restituisce una relazione che è strutturalmente identica all’operando (ha lo stesso schema), ma contiene un sottoinsieme delle tuple dell’operando

  • Fa una selezione delle tuple della relazione “operando”, utilizzando un criterio di selezione:

    • Il criterio di selezione è una espressione logica (predicato) che viene valutata (vero/ falso) su ciascuna tupla: le tuple per cui l’espressione vale “vero” sono selezionate e fanno parte del risultato, le altre, per cui l’espressione vale “falso” sono scartate.


Le operazioni unarie – selezione Un Esempio

  • Selezioniamo dalla relazione Conto_corrente le tuple in cui Saldo > 2.000.000



Le operazioni unarie - proiezione

  • Mentre la selezione elimina delle righe della tabella operando, la proiezione elimina delle colonne

  • Contrariamente al caso della selezione il criterio di eliminazione non dipende da un’espressione da valutare, ma si dà direttamente l’insieme degli attributi che vanno mantenuti



Le operazioni unarie – proiezione Un Esempio

  • Proiettiamo la relazione Movimento sugli attributi Data_mov e Importo

  • Nota: eliminando delle colonne può darsi che tra le tuple così ottenute esistano dei duplicati. Poiché le relazioni sono insiemi, i duplicati non sono ammessi, e quindi vengono eliminati

    • Ad es. il movimento del CC 1 del 1-1-96 è un duplicato e viene eliminato


Le operazioni binarie – prodotto cartesiano

  • Il prodotto cartesiano crea una relazione avente per tuple tutte le possibili combinazioni ottenibili giustapponendo una tupla del primo operando con una tupla del secondo

  • Esempio



Le operazioni binarie – join naturale

  • Il prodotto cartesiano raramente è utile, perché generalmente si vogliono ottenere solo le combinazioni di tuple tra le quali esiste una certa corrispondenza, o vale una certa proprietà

  • join naturale: si combinano tra loro solo le tuple in cui valori delle relazioni in due attributi aventi dominio uguale (e nome uguale) verificano la proprietà di uguaglianza

  • Nella tabella risultante, si considera la colonna uguale una volta sola



Le operazioni binarie – join naturale Un Esempio



Il linguaggio SQL

  • E’ presente in tutti i DBMS relazionali

  • Standard ANSI e ISO

  • Mette a disposizione sia un DDL, sia un DML

  • DDL: permette di creare lo schema della base di darti

    • CREATE TABLE: crea una relazione a livello logico
    • CREATE INDEX: crea indici per una certa relazione; gli indici permettono di accedere ai dati con maggiore efficienza
    • DROP TABLE: cancella una relazione
    • DROP INDEX: cancella un indice
  • DML: permette di scrivere le query

    • Basato sull’algebra relazionale
    • Operatori: selezione, proiezione, join, unione e differenza


Il linguaggio SQL: select

  • L’istruzione che permette di formulare le query

  • Sintassi: SELECT nomi di attributi

  • FROM nomi di relazioni

  • WHERE condizioni di ricerca sui dati

  • Le tre clausole individuano rispettivamente:

    • gli attributi da includere nel risultato;
    • le relazioni da cui estrarre i dati;
    • la condizione di ricerca. Questa condizione può essere assai complessa e coinvolgere nel suo interno altri blocchi SQL


Il linguaggio SQL: esempi 1

  • La selezione riportata nell’esempio precedente si scrive:

  • SELECT *

  • FROM Conto_corrente

  • WHERE Saldo > 2.000.000

  • La proiezione dell’esempio precedente si scrive:

  • SELECT Data_mov, Importo

  • FROM Movimento

  • Nota: nei DBMS commerciali i duplicati sono ammessi. Per eliminarli occorre indicarlo esplicitamente, attraverso la parola chiave DISTINCT:

  • SELECT DISTINCT Data_mov, Importo

  • FROM Movimento



Il linguaggio SQL: esempi 2

  • Una singola espressione SQL può indicare selezione e proiezione insieme:

  • SELECT Num_CC, Importo

  • FROM Movimento

  • WHERE Data_mov = 1-1-96

  • L’operazione descritta seleziona le tuple in cui l’attributo Data_mov ha il valore rescritto, poi sopprime gli attributi diversi da Num_CC e Importo

  • Join: Voglio sapere i nomi dei correntisti interessati da ciascun movimento: devo combinare le tuple di Conto_corrente con le tuple di Movimento aventi uguale Num_CC

  • In SQL scrivo:

  • SELECT *

  • FROM Conto_corrente, Movimento

  • WHERE Conto_corrente.Num_CC =Movimento.Num_CC



Il linguaggio SQL: esempi 3

  • Il join è combinabile con la selezione e la proiezione in un’unica operazione SQL: semplicemente il predicato non indicherà solo la corrispondenza tra tuple, ma anche un criterio cui le tuple del risultato dovranno essere conformi

  • Voglio conoscere importo e causale dei movimenti di Rossi del 1-1-96:

  • SELECT Importo, Causale

  • FROM Conto_corrente, Movimento

  • WHERE Conto_corrente.Num_CC = Movimento.Num_CC AND Nome = “Rossi” AND Data_mov = 1-1-96



Il linguaggio SQL: le operazioni insiemistiche

  • Corrispondono alle normali operazioni sugli insiemi

  • Occorre notare che per avere come risultato dei veri insiemi occorre sempre indicarlo esplicitamente usando la keyword DISTINCT

    • Altrimenti ad es. l’unione darà semplicemente un risultato contenente le tuple del primo operando e quelle del secondo, duplicati compresi
  • In SQL queste operazioni si chiamano rispettivamente

    • UNION
    • MINUS
    • INTERSECT


Il linguaggio SQL: esempio 4

  • Estraiamo i CC che hanno un saldo maggiore di 2.000.000 e per i quali non è stato fatto alcun movimento per un importo maggiore di 1.000.000

    • SELECT Num_CC
    • FROM Conto_corrente
    • WHERE Saldo > 2.000.000
    • MINUS
    • SELECT Num_CC
    • FROM Movimento
    • WHERE Importo > 1.000.000


Alcune considerazioni

  • L’SQL supporta uno stile di interrogazione dichiarativo, nel senso che le query specificano le caratteristiche del risultato ma non indicano come estrarlo

    • Ad es. nelle selezioni non diciamo se la tabella deve essere scandita dall’alto o dal basso, o quale parte della condizione deve essere valutata per prima
  • Le query vengono interpretate dal DBMS, che provvede anche a ottimizzarle

    • Ad es. dovendo fare un join e una selezione conviene fare la selezione prima, per avere meno tuple su cui valutare la condizione del join


Le applicazioni

  • SQL non è adatto agli utenti finali delle basi di dati

  • Si realizzano applicazioni che permettono un’interazione semplice e schematica

  • L’informazione scambiata con l’utente durante l’esecuzione di un’applicazione è mostrata in una maschera (o form)

  • Esistono strumenti software per la gestione delle maschere che permettono al programmatore di:

    • Definire le maschere
    • Associare ogni maschera l’operazione da eseguire sulla base di dati
  • L’utente finale interagisce con le maschere e non vede né l’SQL, né lo schema della base di dati



Maschere: definizione



Maschere: uso



Rapporti (o report)

  • Ulteriore modo per estrarre informazioni dalla base di dati

  • Caratteristiche tipiche:

    • Destinati alla stampa o ad essere visualizzati in pagine Web
    • Contengono grandi quantità di dati
    • Generati periodicamente, senza interazioni con l’utente
  • Esistono strumenti software per la definizione dei rapporti (generatori di report)



Altri linguaggi

  • Linguaggi di quarta generazione

  • Consentono di realizzare applicazioni specificandole a un alto livello

  • Il progettista usa tali linguaggi interagendo con loro tramite interfacce a menu e maschere



Schemi concettuali e logici: Esempio di riferimento



Schemi concettuali e logici: Esempio di riferimento



Esercizi

  • Visualizzare il nome e il peso specifico degli inquinanti prodotti nella città di Torino

  • Visualizzare tutte le informazioni relative agli inquinanti prodotti nella città di Torino

  • Visualizzare tutte le città in cui viene prodotto un inquinante

  • Visualizzare il nome delle aziende con sede a Milano e grado di pericolosità superiore o pari a 20

  • Visualizzare le coppie di aziende ed inquinanti tali che entrambi si trovino nella medesima città

  • Visualizzare il nome degli inquinanti scaricati durante la lavorazione del prodotto con codice P3



Esercizi

  • Visualizzare le coppie di nomi di città tali che un azienda che ha sede nella prima città scarichi nella seconda un inquinante relativo a un qualsiasi prodotto

  • Visualizzare le coppie di aziende tali che abbiano sede nella stessa città

  • SELECT A.NomeA, B.NomeA,

  • FROM AZIENDA AS A, AZIENDA AS B

  • WHERE A.Città = B.Città AND A.CodA < B.CodA;

  • Visualizzare i nomi delle aziende che producono inquinanti a Milano, a Venezia, o in entrambe le città



Esercizi

  • Visualizzare i nomi delle aziende che scaricano inquinanti a Milano

    • Ripetere l’esercizio usando select annidate
  • Visualizzare i nomi delle aziende che non scaricano mercurio

    • SELECT NomeA FROM AZIENDA
    • WHERE CodA NOT IN
    • (SELECT CodA FROM SCARICO,INQUINANTE
    • WHERE SCARICO.CodI = INQUINANTE.CodI AND NomeI = “Mercurio”);


Progettare le Basi di Dati

  • Progettare un DBMS vuol dire essenzialmente definirne lo schema

    • capire quali tabelle servono
    • definire lo schema di ciascuna tabella
    • creare le chiavi
  • La progettazione delle query e delle modalità di interazione fa invece parte della progettazione delle applicazioni



Progettare le Basi di Dati

  • Innanzitutto si cerca di produrre un modello concettuale dei dati da gestire

    • Il modello è concettuale in quanto prescinde dal modello logico dei dati adottato dal particolare DBMS scelto
  • Un formalismo molto usato per la descrizione concettuale dei dati è costituito dai diagrammi Entity/ Relationship (Chen)

    • Entità: ciò che è di interesse per il sistema
    • Relazioni: legami di diversa natura tra entità
    • Attributi: caratteristiche (proprietà) delle entità e delle relazioni


Diagramma E-R: un esempio

  • Un sistema per la gestione dell’allocazione delle aule per i corsi Universitari

  • Entità:



Diagramma E-R: un esempio

  • Relazioni:



Diagramma E-R: un esempio

  • Molteplicità delle relazioni: indicata graficamente dal “ventagl io” ad una estremità della relazione; ad es:

  • Aula--<-Corso, indica che una entità Aula può ospitare più Corsi ma un Corso può essere ospitato in una sola aula (relazione uno-molti)

  • Corso->---<-Studente indica che una entità Studente può seguire più Corsi, e viceversa un Corso può essere seguito da più studenti (relazione molti-molti):



Diagramma E-R: un esempio

  • Attributi:



Progettare del DB a partire dal modello E-R

  • Un diagramma E-R può essere “trasformato” in uno schema logico di DB con qualunque data model

  • Tuttavia, i diagrammi E-R sono particolarmente adatti al progetto di DB relazionali, perché la trasformazione di un diagramma E-R in uno schema relazionale è molto semplice:

    • un’entità diventa una relazione (tabella)
    • un attributo di un’entità diventa un attributo di una relazione
    • le relazioni tra entità possono diventare riferimenti diretti da una tupla di una relazione ad una tupla di un’altra relazione oppure possono dar luogo ad una relazione aggiuntiva, a seconda dei casi


Traduzione di relazioni 1-1

  • E1(IdE1: integer, A1: char(1), IdE2: integer)

  • E2(IdE2: integer, A2: char(1))



Traduzione di relazioni 1-n

  • E1(IdE1: integer, A1: char(1), IdE2: integer)

  • E2(IdE2: integer, A2: char(1))



Traduzione di relazioni 1-n

  • Si possono evitare le ridondanze rappresentando la relazione inversa



Traduzione di relazioni n-n

  • In questo caso si deve introdurre una tabella apposita per la relazione

    • R(IdE1: integer, IdE2: integer)





©astratto.info 2017
invia messaggio

    Pagina principale