Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Informatica documentale pdf, Dispense di Elementi di Informatica

Riassunto Manuale di informatica documentale

Tipologia: Dispense

2015/2016

Caricato il 10/03/2016

rosa_montrone
rosa_montrone 🇮🇹

4.5

(14)

4 documenti

1 / 23

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Informatica documentale
1. Introduzione
1.1 Sistemi informativi, informazioni e dati
Sistema informativo → componente di un'organizzazione che gestisce le informazioni di interesse per
perseguire gli scopi dell'organizzazione stessa (raccolta, acquisizione,
archiviazione, conservazione, elaborazione, trasformazione, produzione,
distribuzione, comunicazione, scambio...).
Sistema informatico → porzione automatizzata del sistema informativo.
Informazione → notizia, dato o elemento che permette di avere più o meno conoscenza di fatti, situazioni,
modi di essere etc.
Dato → concetto primitivo, elemento di informazione costituito da simboli che deve essere elaborato per
ottenere informazione.
Base di dati → insieme di dati d'interesse per una certa applicazione e di supporto all'attività;
→ gestita dal Data Base Management System (DBMS).
DBMS → gestisce collezioni di dati grandi, persistenti (con un tempo di vita indipendente dalle singole
esecuzioni dei programmi che li utilizzano) e condivisi;
→ vantaggi: riservatezza, affidabilità, efficienza, efficacia;
→ rischi: ridondanza di informazioni, incoerenza.
Transazione → insieme di operazioni da ritenere indivisibile (atomico), corretto anche in presenza di
concorrenza e con effetti definitivi;
→ va eseguita per intero o non va eseguita per niente.
Modelli dei dati → insieme di costrutti utilizzati per organizzare i dati di interesse e descriverne la dinamica;
→ la componente più importante è costituita dai meccanismi di strutturazione;
→ il più importante è il Modello Relazionale;
→ si distinguono in → logici → descrizione astratta
→ utilizzati dai programmi
→ indipendenti dalle strutture fisiche
→ utilizzati dai DBMS per l'organizzazione dei dati
→ il più importante è il Modello Relazionale
concettuali → cercano di descrivere concetti del mondo reale
→ utilizzati nelle fasi preliminari di progettazione
→ organizzano i dati in modo indipendente dal sistema
→ il più importante è il Modello Entità-Relazione.
Schema (di una BDD) → sostanzialmente invariante nel tempo, ne descrive la struttura;
→ costituito essenzialmente dalle caratteristiche dei dati [dall'intestazione della
tabella (ossia dal nome relazione con i suoi attributi)];
→ componente intensionale della BDD.
Istanza (di una BDD) → variabile nel tempo;
→ costituito dai valori correnti della BDD;
→ componente estensionale della BDD.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Anteprima parziale del testo

Scarica Informatica documentale pdf e più Dispense in PDF di Elementi di Informatica solo su Docsity!

Informatica documentale

1. Introduzione

1.1 Sistemi informativi, informazioni e dati

Sistema informativo → componente di un'organizzazione che gestisce le informazioni di interesse per perseguire gli scopi dell'organizzazione stessa ( raccolta , acquisizione , archiviazione , conservazione , elaborazione , trasformazione , produzione , distribuzione , comunicazione , scambio ...). Sistema informatico → porzione automatizzata del sistema informativo. Informazione → notizia, dato o elemento che permette di avere più o meno conoscenza di fatti, situazioni, modi di essere etc. Dato → concetto primitivo, elemento di informazione costituito da simboli che deve essere elaborato per ottenere informazione. Base di dati → insieme di dati d'interesse per una certa applicazione e di supporto all'attività; → gestita dal Data Base Management System (DBMS). DBMS → gestisce collezioni di dati grandi , persistenti (con un tempo di vita indipendente dalle singole esecuzioni dei programmi che li utilizzano) e condivisi ; → vantaggi: riservatezza , affidabilità , efficienza , efficacia ; → rischi: ridondanza di informazioni, incoerenza. Transazione → insieme di operazioni da ritenere indivisibile (atomico), corretto anche in presenza di concorrenza e con effetti definitivi; → va eseguita per intero o non va eseguita per niente. Modelli dei dati → insieme di costrutti utilizzati per organizzare i dati di interesse e descriverne la dinamica; → la componente più importante è costituita dai meccanismi di strutturazione; → il più importante è il Modello Relazionale ; → si distinguono in → logici → descrizione astratta → utilizzati dai programmi → indipendenti dalle strutture fisiche → utilizzati dai DBMS per l'organizzazione dei dati → il più importante è il Modello Relazionale → concettuali → cercano di descrivere concetti del mondo reale → utilizzati nelle fasi preliminari di progettazione → organizzano i dati in modo indipendente dal sistema → il più importante è il Modello Entità - Relazione. Schema (di una BDD) → sostanzialmente invariante nel tempo, ne descrive la struttura; → costituito essenzialmente dalle caratteristiche dei dati [dall'intestazione della tabella (ossia dal nome relazione con i suoi attributi)]; → componente intensionale della BDD. Istanza (di una BDD) → variabile nel tempo; → costituito dai valori correnti della BDD; → componente estensionale della BDD.

2. Il modello relazionale

  • Basato sui valori e sui concetti di relazione e tabella → la presenza di valori nelle tabelle dà vita a relazioni (le tabelle sono la rappresentazione grafica delle relazioni);
  • Definito dal nome della tabella , le sue colonne e le sue righe ;
  • i dati mantengono informazioni relative alle relazioni tra i dati stessi. Studenti Esami Corsi Matricola Nome Cognome Studente Voto Corso Codice Titolo Docente 6554 Mario Rossi 6554 26 01 01 Analisi Bianchi 8765 Paolo Neri 9283 28 01 02 Chimica Bruni 9283 Luisa Verdi 9283 30 02 04 Algebra Mario Nell'esempio: Luisa Verdi ha preso 28 in Analisi. Relazioni

Il prodotto cartesiano di D 1 × D 2 × … × D n (← domini) è l'insieme di tutte le n -uple ordinate (d 1 , d 2 , …, dn)

tali che d 1 ∈ D 1 , d 2 ∈ D 2 , …, dn ∈ Dn. Una relazione matematica, ad esempio sugli insiemi D 1 e D 2 (chiamati domini della relazione), è un sottoinsieme del prodotto cartesiano D 1 × D 2 : D 1 {1, 2, 4} prodotto cartesiano esempio di relazione {(1, a), (1, b), (2, a), (2, b), (4, a), (4, b)} → {(1, a), (1, b), (4, b)} D 2 {a, b} Una relazione matematica è un insieme → non c'è ordinamento fra n -uple (righe), il loro ordine è “occasionale”; → le n -uple sono tra loro distinte: non esistono due n -uple uguali; → ciascuna n-upla al proprio interno è ordinata, l'i-esimo valore proviene dall'i-esimo dominio (se nell'esempio sotto scambio il terzo dominio col quarto, inverto il risultato). Juventus Lazio 3 1 - ciascuno dei domini ha ruoli diversi (es. casa e trasferta) distinguibili per le posizioni; Lazio Milan 2 0 - la struttura è quindi posizionale e l'ordine delle colonne è rilevante. Juventus Roma 2 1 Roma Milan 0 1 Avendo due domini stringa e due domini intero ( string × string × int × int ), le posso distinguere solo attraverso la loro posizione , e questa non è una caratteristica ottimale. Associamo quindi a ciascuna occorrenza un nome, detto attributo , che descrive il “ruolo” giocato dal dominio stesso: SquadraDiCasa SquadraOspite GoalCasa GoalOspite - a ciascun dominio si associa un nome univoco nella tabella; Juventus Lazio 3 1 - questo nome, detto attributo, ne definisce il ruolo; Lazio Milan 2 0 - la posizione delle colonne non è più rilevante Juventus Roma 2 1 Roma Milan 0 1 Abbiamo quindi elementi individuati non più per la loro posizione, ma per i loro attributi.

Istanza → contenuto concreto della tabella. ( Istanza di ) relazione su uno schema R ( X ) → insieme r di tuple su X. ( Istanza di ) BDD su uno schema R = { R 1 ( X 1 ), R 2 ( X 2 ), …, R n( X n)}→ insieme di relazioni r = { r 1 , r 2 , … r n) dove ogni ri (con 1 ≤ i ≤ n) è una relazione sullo schema Ri ( Xi ). (In parole povere, una relazione è un insieme di tuple, una BDD è un insieme di relazioni). es. R = {Studenti (Matricola, Cognome, Nome, DataDiNascita), → R 1 Esami (Studente, Voto, Corso), → R 2 Schema R di BDD Corsi (Codice, Titolo, Docente)}. → R 3 12345, Mario, Rossi, 01/03/ 56789, Giuseppe, Verdi, 10/12/1993 → r 1 14589, Franco, Neri, 19/07/ 12345, 28, 01 12345, 30, 02 → r 2 Istanza di BDD 56789, 24, 02 01, Italiano, Melli 02, Matematica, Belli → r 3 03, Chimica, Pinti Relazioni su singoli attributi → può avere senso avere una relazione su un solo attributo (costituita da una sola colonna). es. Studenti Studenti lavoratori Nome Cognome Matricola Matricola Mario Rossi 1234 1234 Carlo Verdi 5678 1238 Paolo Bianchi 1278

Come rappresentare informazioni strutturate in modo articolato? es. Ricevuta numero 1234 del 12/10/2002 Ricevuta numero 1240 del 13/10/

3 Coperti 6,00 2 Coperti 4,

2 Antipasti 12,00 1 Antipasti 6,

3 Primi 27,00 2 Primi 15,

2 Bistecche 36,00 2 Orate 50,

Totale 81,00 2 Caffè 3,

Totale 78,

Le tabelle qui presenti hanno alcuni elementi fissi (numero della ricevuta, data e totale) e un numero differente di portate omogenee: essendo le nostre relazioni a struttura fissa, non è possibile rappresentare l'insieme delle ricevute con un'unica relazione (non è possibile rappresentare le righe in numero non determinato). Quindi NO struttura nidificata : N° ricevuta Data Quantità Descrizione Importo Totale 1234 12/10/2002 3 Coperti 6,00 81, 2 Antipasti 12, 3 Primi 27, 2 Bistecche 36, 1240 13/10/2002 2 Coperti 4,00 78, 1 Antipasti 6, 2 Primi 15, 2 Orate 50, 2 Caffè 3,

  • Non posso avere una tabella dentro un'altra tabella;
  • Non posso avere dati fissi in relazione con altre righe. Utilizzo quindi 2 relazioni: nella prima, chiamata “Ricevuta”, inserisco i dati fissi, mentre l'altra, che chiamerò “Dettaglio”, contiene le varie righe di ciascuna ricevuta, collegate alla ricevuta stessa dal suo n°. N° ricevuta Data Totale N° ricevuta Quantità Descrizione Importo 1234 12/10/2002 81,00 1234 3 Coperti 6, 1240 13/10/2002 78,00 1234 2 Antipasti 12, 1234 3 Primi 27, 1234 2 Bistecche 36, 1240 2 Coperti 4, 1240 1 Antipasti 6, 1240 2 Primi 15, 1240 2 Orate 50, 1240 2 Caffè 3,

es. Studenti Esami Corsi Matricola Cognome Nome Data di nascita Studente Voto Lode Corso Codice Titolo Docente 200768 Verdi Fabio 12/02/1982 200768 36 05 01 Analisi Giani 937653 Rossi Luca 10/10/1981 937653 28 lode 01 03 Chimica Melli 937653 Bruni Mario 01/12/1981 937653 30 lode 04 04 Chimica Belli 276545 25 01 Violazione del vincolo di dominio: lo riscontro guardando solo il singolo valore. In questo caso il voto deve essere compreso tra 0 (o 18 se si considerano solo i valori di un esame superato) e 30. Un esempio di vincolo di dominio in questo caso potrebbe essere (voto ≥ 18) AND (voto ≤ 30). Violazione del vincolo di tupla: lo riscontro guardando la tupla nel suo insieme. In questo caso non posso associare il “28” a “lode”. Il vincolo in questo caso è (NOT (Lode = lode)) OR (voto = 30)), che vuol dire che non posso avere “lode” se non ho un voto uguale a 30. Ripetizione: non posso associare a due oggetti distinti la stessa chiave (vedi più avanti). Questi tre sono vincoli intrarelazionali , in quanto riguardano una sola relazione (tabella). Violazione del vincolo d'integrità referenziale: lo riscontro guardando più tabelle. In questo caso ho uno studente e un corso che non si collegano alle rispettive tabelle. Questo è un vincolo interrelazionale , in quanto riguarda più tabelle. Chiavi e superchiavi Superchiave → è un insieme di attributi che identifica univocamente le ennuple di una relazione. Più tecnicamente: un insieme K di attributi è superchiave di una relazione r se r non contiene due tuple distinte t 1 e t 2 con t 1 [ K ]= t 2 [ K ]. Chiave → è una superchiave minimale di r (cioè non esiste un'altra superchiave K ' di r che sia contenuta in K come sottoinsieme proprio). es. Matricola Cognome Nome Data di nascita Corso 4328 Rossi Luigi 29/04/84 Ing. Informatica 6328 Rossi Dario 29/04/84 Ing. Informatica 4766 Rossi Luca 01/05/86 Ing. Civile 4856 Neri Luca 01/05/86 Ing. Meccanica 5536 Neri Luca 05/03/83 Ing. Meccanica

  • L'insieme {Matricola} è superchiave minimale, in quanto contiene un solo attributo (l'insieme vuoto non è in grado di identificare tuple), quindi è chiave.
  • L'insieme {Cognome, Nome, Data di Nascita} è superchiave minimale, in quanto i suoi sottoinsiemi non identificano univocamente nessuna tupla, quindi è chiave.
  • L'insieme {Matricola, Corso} è superchiave , ma non minimale, in quanto al suo interno c'è Matricola, che è superchiave a se stante.
  • L'insieme {Nome, Corso} non è superchiave , in quanto esistono due tuple che hanno entrambi gli attributi uguali. I vincoli vanno però definiti a livello di schema, quindi {Cognome, Nome, Data di Nascita} può esserlo per questa istanza, ma non per quelle future.

Per esteso, però, essendo le relazioni insiemi, i quali per definizione non hanno elementi (nel nostro caso tuple) ripetuti, esiste almeno una superchiave costituita da tutto l'insieme di attributi X e di conseguenza una chiave (l'insieme di attributi è anche chiave, o ne contiene comunque una al suo interno). Possiamo quindi affermare che ogni (istanza di) relazione e ogni schema di relazione abbiano al loro interno una chiave. Chiave primaria → chiave in cui non sono ammessi valori nulli ; → deve essercene almeno una; → per convenzione, viene sottolineata. es. Matricola Cognome Nome Data di nascita Corso Vincoli di integrità referenziale → vincoli interrelazionali; → permettono di di correlare informazioni in relazioni diverse attraverso valori comuni, in particolare i valori delle chiavi primarie; → devono avvenire in base a correlazioni “coerenti”. Un vincono di integrità referenziale (“ Foreign key ”) fra gli attributi X di una relazione R 1 e un'altra relazione R 2 impone ai valori su X in R 1 di comparire come valori della chiave primaria di R 2. es. Infrazioni Vigili Codice Data Vigile Provincia targa Numero di targa Matricola Nome Cognome 12345 25/10/08 567 RM 4E5432 567 Mario Neri 56789 26/10/08 456 RM 4E5432 456 Franco Rossi 98765 26/10/08 456 RM 2F7643 123 Fabio Verdi 54321 15/10/08 567 MI 2F Il vincolo di integrità referenziale è rispettato, in quanto TUTTI gli attributi su “Vigile” sono presenti nella chiave primaria “Matricola”. Il vincolo può essere anche su più attributi: es. A 1 A 2 B 1 B 2 R1 ↓ ↓ R2 ↓ ↓ Codice Data Vigile Provincia targa Numero di targa Provincia Numero di targa Cognome Nome

      • MI (^12345) ← t 1 t 2 → MI 56789 - -
      • TO 56789 TO 56789 - - FI 12345 - - In questo caso l'ordinamento è fondamentale poiché ciascun attributo degli attributi in X deve corrispondere a un preciso attributo nella chiave primaria K in R 2. In questo caso occorre ordinare le tuple in modo che a ogni t 1 [ A i]= t 2 [ B i] (con A attributo di R 1 e B attributo della chiave primaria di R 2 ). Nel caso in giallo, il vincolo è violato poiché la tupla t1 rispetta il vincolo per il primo attributo, ma non per il secondo.

Ridenominazione, selezione, proiezione

Ridenominazione (“REN” o “ ” ) → operatore monadico (agisce su una sola relazione);

→ utilizzata per adeguare il nome degli attributi al fine di facilitare le operazioni insiemistiche; → agisce a livello di schema, lasciando inalterata l'istanza; → REN B1, ..., BK ← A1, ..., AK (r). es. Paternità REN Genitore←Padre (Paternità) Maternità REN Genitore←Madre (Maternità) Padre Figlio Genitore Figlio Madre Figlio Genitore Figlio Adamo Caino → Adamo Caino Eva Caino → Eva Caino Adamo Abele Adamo Abele Eva Abele Eva Abele Abramo Isacco Abramo Isacco Sara Isacco Sara Isacco Dopo questa operazione, posso utilizzare le varie operazioni insiemistiche (unione, intersezione, differenza). Selezione (“SEL” o “σ”) → operatore monadico; → non agisce a livello di schema dell'operando (è definita su tutti gli attributi della tabella), ma sull'istanza; → il risultato contiene un sottoinsieme di ennuple dell'operando che soddisfano una certa condizione (“sceglie” delle righe); → SELcondizione (NomeTabella) (→ la condizione è un espressione booleana). es. Impiegati Matricola Cognome Filiale Stipendio Voglio conoscere gli impiegati che:

  1. guadagnano più di 50;
  2. guadagnano più di 50 e lavorano a Milano;
  3. hanno lo stesso nome della filiale in cui lavorano. 7309 Rossi RM 55 5998 Neri MI 64 9553 Milano MI 44 5698 Neri NA 64
  4. σ Stipendio > 50 (Impiegati) 2) σ Stipendi > 50 ∧ Filiale = Milano(Impiegati) Matricola Cognome Filiale Stipendio Matricola Cognome Filiale Stipendio 7309 Rossi RM 55 5998 Neri Milano 64 5998 Neri MI 64 5698 Neri NA 64
  5. σ Cognome = Filiale (Impiegati) Matricola Cognome Filiale Stipendio 9553 Milano Milano 44

Proiezione (“PROJ” o “π”) → operatore monadico; → mantiene parte degli attributi dell'operando (“toglie” colonne); → a meno di perdita di informazioni dovuta a doppioni, il risultato contiene ennuple cui contribuiscono tutte le ennuple dell'operando (quindi una proiezione contiene al più tante ennuple quante l'operando, ed è solitamente il caso in cui la proiezione venga fatta su una superchiave); → PROJ lista attributi (NomeTabella). es. Impiegati Matricola Cognome Filiale Stipendio Voglio sapere:

  1. Matricola e filiale degli impiegati; 5998 Neri MI (^52) 2) Cognome e filiale degli impiegati. 7309 Neri NA 55 9553 Rossi RM 64 5698 Rossi RM 44 π Matricola, Filiale (Impiegati) π Cognome, Filiale (Impiegati) Matricola Filiale Cognome Filiale In questo caso avrei una ripetizione che viola il concetto di insieme, quindi la tolgo → ho perdita di informazione 5998 Neri Neri MI 7309 Neri Neri NA 9553 Rossi Rossi RM 5698 Rossi Rossi RM Selezione e proiezione → sono operazioni ortogonali → SEL attua una decomposizione orizzontale ; → PROJ attua una decomposizione verticale. → possono essere combinate: es. BD1: {Libro (ISBN, Titolo, Anno, CodAutore, CodEditrice, LinguaOriginale), Scrittore (CodAutore, Nome, Cognome, Nazionalità, CasaEditrice), Editrice (CodEditrice, NomeEditrice, Città)}
  2. ISBN libri scritti nel 1975 2)Titoli dei libri scritti in francese prima del 1990 PROJISBN(SELanno = 1975 (Libro)) PROJTitolo(SELAnno<1990 (Libro))
  3. Codice e cognome degli autori inglesi 4) Case editrici con sede a Torino PROJCodAutore, Cognome(SELNazionalità=Inglese(Scrittore)) PROJNomeEditrice(SELCittà=Torino(Editrice)) Combinando SEL e PROJ posso estrarre informazioni da una relazione, ma non posso però correlare informazioni presenti in relazioni diverse.

Join esterno → serve a non perdere informazioni; → estende, con valori nulli, le ennuple che verrebbero tagliate fuori dal join (“interno”) → può essere sinistro (mantiene tutte le ennuple del primo operando, estendendole con valori nulli se necessario), destro (stessa cosa ma col secondo operando) o completo (stessa cosa, ma con entrambi gli operandi): es. Impiegati JOINLEFT Reparti Impiegati JOINRIGHT Reparti Impiegati JOINFULL Reparti Impiegato Reparto Capo Impiegato Reparto Capo Impiegato Reparto Capo Neri B Mori Neri B Mori Neri B Mori Bianchi B Mori Bianchi B Mori Bianchi B Mori Rossi A NULL NULL C Bruni Rossi A NULL NULL C Bruni Prodotto cartesiano → è un join naturale senza attributi in comune; → contiene sempre un numero di ennuple pari al prodotto delle cardinalità degli operandi (le ennuple sono tutte combinabili); → concatena tuple non necessariamente correlate dal punto di vista semantico es. Impiegato Progetto Codice Nome Impiegato Progetto Codice Nome In rosso le tuple concatenate “senza senso” Rossi A A Venere Rossi A A Venere Neri A B Marte Neri A A Venere Neri B Neri B A Venere Rossi A B Marte Neri A B Marte Neri B B Marte Il prodotto cartesiano ha generalmente senso solo se seguito da una selezione: questa operazione è il theta-joinR 1 JOINCondizione R 2 → la condizione è di solito è una formula proposizionale utilizzabile in una selezione (<, >, =); → nel caso la condizione sia una congiunzione di atomi di uguaglianza tra un attributo di r 1 e uno di r 2 , si parla di equi-join. es. BD1 {Libro (ISBN, Titolo, Anno, CodAutore, CodEditrice, Lingua), Scrittore (CodA, Nome, Cognome, Nazionalità, CasaEd), Editrice (CodE, NomeEd, Città)

  1. ISBN libri editi da Feltrinelli PROJISBN(SELNomeEd=Feltrinelli (Libro JOINCodEditrice=CodE Editrice))
  2. Titolo e anno dei libri scritti da Maurizio Maggiani PROJTitolo, Anno (Libro JOINCodAutore=CodA (SELNome=Maurizio AND Cognome=Maggiani(Scrittore)))
  3. ISBN e titoli dei libri scritti da Italo Calvino prima del 1970 PROJISBN, Titoli (SELAnno<1970Libro JOINCodAutore=CodA SELNome=Italo AND Cognome=Calvino(Scrittore))

4. SQL

SQL → in origine era un acronimo per Structured Query Language , ora è il nome proprio; → contiene al suo interno → le funzionalità di un DDL → definisce tabelle, relazioni e schemi di BDD; → le funzionalità di un DML → può modificare la BDD e specificare interrogazioni su di essa; → ce ne sono più versioni. Definizione delle BDD → notazioni (parentesi); → domini elementari ( caratteri , tipi numerici , istanti temporali ...). Notazioniparentesi angolari 〈 〉 →permettono di isolare un termine della sintassi; → parentesi quadre [ ] → indicano un termine opzionale, che può non comparire o comparire una sola volta; → parentesi graffe → indicano un termine che può non comparire o comparire un numero arbitrario di volte; → barre verticali | → indicano che deve essere scelto uno tra i termini separati dalle barre; → le parentesi tonde ( ) sono intese come termini del linguaggio SQL e non come simboli della grammatica. Domini elementari → sono “famiglie” di domini elementari messi a disposizione da SQL:

  • Caratteri → il dominio character permette di rappresentare singoli caratteri o stringhe di caratteri che possono essere di lunghezza fissa o variabile (se variabile si indica la lunghezza massima): per questi caratteri si può anche definire una famiglia di caratteri di default (es. la lingua). character [varying] [( lunghezza )] [character set NomeFamigliaCaratteri ] Questo è lo schema generale di una stringa con un numero variabile (varying) di caratteri, con un numero massimo (lunghezza) e con una specifica famiglia di caratteri di default (“character” e “varying character” possono essere sostituiti da “char” e “varchar”). es. Una stringa di caratteri dell'alfabeto greco, con lunghezza massima di 20 caratteri sarà tradotto in character varying (20) [character set Greek]
  • Numerici → integer e smallint → numeri interi per il quale non mi serve sapere la parte decimale, vanno seguiti dalla tonda con all'interno il numero di cifre, es. integer (20); → numeric e decimal [ (precisione [, scala])] → numeri anche decimali in cui precisione è la quantità di cifre totali (se fosse 4, i numeri sarebbero compresi tra -9999 e 9999), mentre scala sono i numeri dopo la virgola: la differenza tra numeric è decimal è che in numeric la precisione rappresenta un valore esatto, mentre in decimal costituisce un requisito minimo es. Una stringa con numeric (6, 4) comprenderà tutti i numeri compresi tra -99,999 e 99,9999. Altri domini sono → date , orari e intervalli di tempo ; → boolean (valori booelani, vero, falso); → BLOB e CLOB → per immagini e testi di grandi dimensioni.

Vincoli I vincoli → proprietà che devono essere verificate da ogni istanza della BDD; → il più “potente” e generico è check, ma richiede di formulare delle interrogazioni sulla BDD; → si dividono poi in → intrarelazionali (interni a una singola tabella): not null, unique, primary key; → interrelazionali (tra più tabelle): foreign key (v. d'integrità referenziale). Vincoli intrarelazionali not null → il valore nullo non è ammesso per un particolare attributo, quindi deve essere sempre specificato, a meno che a quell'attributo non sia associato un valore di default diverso da null, poiché in quel caso, se non viene specificato il valore, viene assegnato quello di default. es. Cognome varchar (20) not null unique → indica una ( super ) chiave ; → quando opera su un solo attributo si fa seguire l'attributo dalla parola (riservata al sistema) unique es. Matricola varchar (6) unique; → quando opera su più attributi si fa seguire a quei singoli attributi il vincolo not null, e poi, dopo aver definito tutti gli attributi della tabella, si usa la sintassi: unique ( Attributo1 {, AttributoN }) es. Nome varchar (20) not null, Nome varchar (20) not null unique, Cognome varchar (20) not null, ≠ Cognome varchar not null unique Professione varchar (30) ↓ unique (nome, cognome) impone che nessuna riga abbia uguale né ↓ il nome, né il cognome (le chiavi sono 2, Impone che nessuna riga abbia uguale sia nome costituite una da nome e una da cognome) che cognome (la chiave è costituita dalla coppia nome, cognome) primary key → indica la chiave primaria (quindi se ne può definire UNA per tabella e non ammette valori nulli → comprende not null); → quando opera su un solo attributo si fa seguire l'attributo da primary key (come per unique); → quando opera su più attributi questi, dopo aver definito tutti gli attributi della tabella, vengono riuniti tra parentesi preceduti dalla dicitura primary key es. Nome varchar (20), Cognome varchar (20), primary key (Nome, Cognome) Vincoli interrelazionali Permettono di definire i vincoli di integrità referenziale, che possono essere su uno o più attributi, tra la tabella su cui vengono specificati (tabella “interna”) ed un'altra tabella (“esterna”). Il vincolo impone che per ogni riga della tabella interna il valore dell'attributo specificato sia presente nelle righe della tabella esterna tra i valori del corrispondente attributo e impone che l'attributo della tabella esterna abbia sia superchiave, chiave (unique) o, di solito, chiave primaria (primary key). Se il vincolo è su un solo attributo, utilizzo il costrutto sintattico references specificando la tabella esterna e il relativo attributo corrispondente: es. create table Impiegato (Matricola varchar(6) primary key, Nome varchar(20) not null, Cognome varchar(20) not null, Dipart varchar(15) references Dipartimento (NomeDip), → impone che l'attributo Dipart della tabella Impiegato possa unique (Cognome, Nome)) assumere solo uno dei valori che le righe della tabella Dipartimento possiedono per l'attributo NomeDip. Se si volesse che gli attributi Cognome e Nome apparissero nella cartella Anagrafica, basterebbe aggiungere: foreign key (Nome, Cognome) references (Anagrafica.Nome, Anagrafica.Cognome).

Violazioni dei vincoli → SQL impedisce operazioni che violino tutti i tipi di vincoli, escluso quello di integrità referenziale, per il quale offre delle alternative adottabili; → se la violazione del vincolo d'integrità referenziale è sulla tabella interna, SQL impedisce semplicemente l'operazione; → se la violazione avviene in quella interna, le reazioni sono simili sia in caso di violazione attraverso modifica che di cancellazione del dato di interesse:

  • cascade → in caso di modifica, riporta il nuovo valore della tabella esterna su tutte le righe corrispondenti di quella interna, mentre in caso di cancellazione di una riga sulla tabella esterna vengono cancellate anche tutte le righe corrispondenti della tabella interna;
  • set null → all'attributo referente viene assegnato il valore nullo al posto del valore modificato/cancellato nella tabella esterna;
  • set default → all'attributo referente viene assegnato il valore di default al posto del valore modificato/cancellato nella tabella esterna;
  • no action → l'operazione di modifica/cancellazione non viene consentita. Interrogazioni SQL Dichiaratività in SQL → SQL esprime le interrogazioni in modo dichiarativo: si specifica l'obiettivo dell'interrogazione e non il modo con cui ottenerlo (focus sul “ cosa ”, non sul “ come ”). Le operazioni dichiarative vengono specificate attraverso l'operatore select, e si compone in genere di tre parti, dette “clausole”: select, from, where. select ListaAttributi → nomi degli attributi d'interesse, è l'equivalente della proiezione from NomeTabella → nome della/e tabella/e da cui prendo i dati [where Condizione ] → condizioni su cui prendo le righe, è l'equivalente della selezione Esempi e casi particolari BDD1 {Impiegato (Nome, Cognome, Dipart, Ufficio, Stipendio, Città), Dipartimento (Nome, Indirizzo, Città)} es. Voglio lo stipendio, chiamandolo però “salario”, dei dipendenti che si chiamano Rossi. select Stipendio as Salario → as è l'equivalente della ridenominazione from Impiegato where Cognome = “Rossi” es. Voglio sapere tutti i dati degli impiegati che si chiamano Rossi. (tutti gli attributi che compaiono nella tabella della clausola from, ossia tutti gli attributi di “Impiegato”) select * → seleziona tutti gli attributi della tabella di from from Impiegato where Cognome = “Rossi” es. Voglio lo stipendio di chi di cognome fa “Rossi” o “Verdi” e di chi lavora a Verona. select Stipendio from Impiegato where Cognome = “Rossi” OR Cognome = “Verdi” OR Città = “Verona” es. Voglio tutti i dati dei Rossi che lavorano a Milano. select * from Impiegato where cognome = “Rossi” AND Città = “Milano”

5. Metodologie di progettazione e basi di dati

Per il progetto di una BDD si è consolidato un metodo articolato in tre fasi principali che permettono con la prima di stabilire “cosa” rappresentare (prima fase) e “come” rappresentarlo (seconda e terza fase).

  1. Progettazione concettualeSchema concettuale Descrizione formale e corretta di ciò che si vuole rappresentare, fa riferimento a un modello concettuale, ossia un modello di alta astrazione, che serve a ragionare sulla realtà d'interesse, indipendentemente dagli aspetti realizzativi. Permettono di rappresentare le classi di oggetti di interesse e le loro relazioni attraverso rappresentazioni grafiche (utili per facilitarne la lettura)
  2. Progettazione logicaSchema logico Traduzione dello schema concettuale in termini del modello concettuale in uno schema logico, ancora indipendente dai dati fisici, ma concreto perché perché fatto secondo una rappresentazione disponibile nei sistemi di gestione di BDD.
  3. Progettazione fisicaSchema fisico Lo schema logico viene completato con la specifica dei parametri fisici di memorizzazione dei dati. Il prodotto di questa fase è lo schema fisico e si rifà al modello fisico dei dati, che dipende dallo specifico sistema di gestione dei dati scelto e si basa sui criteri di organizzazione fisica di quel sistema. Il modello Entità-Relazione (E-R) Il modello E-R è un modello concettuale e, in quanto tale, si basa su costrutti atti a descrivere la realtà d'interesse:
  4. Entità ;
  5. Relazione ;
  6. Attributo ;
  7. Cardinalità ;
  8. Identificatore ;
  9. Generalizzazione.
  10. Entità → classe di oggetti con proprietà comuni ed esistenza “autonoma” (fatti, persone, cose...) d ella realtà d'interesse da rappresentare ; → si rappresenta con un rettangolo con il nome dell'entità all'interno; → è utile utilizzare nomi espressivi, per convenienza al singolare; → un elemento della classe in questione è detto occorrenza (o istanza ) di identità; → es. “Città” è un entità, “Milano”, “Verona” e “Roma” sono occorrenze.
  11. Relazione → legame logico, rilevante nell'applicazione d'interesse, fra due o più entità ; → si rappresenta con un rombo con il nome della relazione all'interno, collegato alle sue entità; → ha delle occorrenze come le entità; → es. tra “Studente” e “Corso” potrebbe esserci la relazione “Esame” (occorrenze di “Esame potrebbe essere “Primo appello”, “Secondo appello”). es. relazioni tra entità Studente Esame Corso es. occorrenza Studenti Corsi S1, S2, S3 → occorrenze di Studenti S1 e1 C1 e1, e2, e3 → occorrenze di Esami S2 e2 C2 C1, C2 → occorrenze di Corsi S3 e

( Occorrenza di una relazione → ennupla di occorrenze di entità, una per ciascuna entità coinvolta. Nell'ambito di una relazione non ci possono essere occorrenze ripetute, poiché l'insieme delle occorrenze di una relazione del modello E-R è una relazione insiemistica). N.B nello schema concettuale si rappresentano entità, non occorrenze!

  1. Attributo → proprietà elementare di un'entità o di una relazione di interesse ai fini dell'applicazione ; → associa ad ogni occorrenza di entità o di relazione un valore appartenente a un insieme detto dominio dell'attributo (es. nomi che come dominio hanno stringhe da 20 caratteri); → raggruppando attributi di una medesima entità o relazione con significati affini si possono ottenere attributi composti (es. CAP, Numero civico e Via formano “Indirizzo”); → si rappresentano con “pallini” collegati all'entità o alla relazione; → si dividono in semplici/composti, obbligatori/opzionali, multivalore/non-multivalore. es. Anno iscrizione Studente Esame Corso Nome Matricola Voto Nome
  2. Cardinalità → può essere di relazione o di attributo. Cardinalità di relazione : coppia di valori associati a ogni entità che partecipa a una relazione i cui valori specificano il numero minimo e massimo di occorrenze delle relazioni cui ciascuna occorrenza di una entità può partecipare. es. (1,1) (0,N) - La cardinalità (1,1) indica che ogni studente Studente Residenza Corso può essere assegnato a una sola città (un numero di città compreso tra 1 e 1);
  • La cardinalità (0,N) indica che una città può ospitare un numero indefinito di studenti (numero compreso tra 0 e N). Riguardo la cardinalità minima si può dire che se questa è uguale a 0 , la relazione è a partecipazione opzionale (poiché potrebbe esserci una occorrenza dell'entità che non entra in relazione con nulla), mentre se questa è uguale a 1 la partecipazione è obbligatoria. Con riferimento alla cardinalità massima, possiamo avere differenti tipi di relazione: Relazione molti-a-molti (0,N) (0,N) - relazione molti-a-molti: c'è N in entrambe le cardinalità Studente Esame Corso massime, quindi uno studente può sostenere più esami del corso e ogni corso può avere al suo esame più studenti. Relazione uno-a-molti (1,1) (0,N) - relazione uno-a-molti: c'è N da una parte e 1 dall'altra, Cinema Ubicazione Città quindi un cinema può essere ubicato in una sola città, ma una stessa città può ospitare più di un cinema. Relazione uno-a-uno (1,1) (0,1) - relazione uno-a-uno: c'è 1 da entrambe le parti, quindi un Professore Titolarità Cattedra professore può essere assegnato a una sola cattedra, mentre la cattedra può essere assegnata al massimo a un professore.