Base di dati
Una base di dati è una rappresentazione delle informazioni attraverso delle tabelle. In particolare, rappresenta una porzione del nostro mondo dai limiti ben definiti, rilevante per i nostri scopi. Altro requisito fondamentale da fissare è il nostro dominio di interesse, ovvero, il perimetro della porzione di mondo a cui si è interessato, cosa deve essere rappresentato. Questo non può essere fatto in forma discorsiva con il linguaggio naturale perché la sua consultazione sarebbe laboriosa e perché il computer non sarebbe in grado, visto che ci potrebbero essere frasi ambigue che non potrebbe interpretare.
Livelli di astrazione
Basso livello di astrazione (vicino al livello fisico) si intendono servizi generici vicini all'hardware, sui quali si creano servizi di livello più alto con meno operazioni. Per esempio, i numeri possono essere memorizzati grazie al codice binario grazie ai dispositivi di archiviazione (dischi rigidi o memorie) è un fenomeno fisico ma poco adatto per l'utilizzo finale sulla tastiera. 0 e 1 associati in byte per creare le lettere (fine dell'uomo).
Le sequenze di byte possono essere poi raggruppate per creare i file (che hanno ancora un livello di astrazione basso). Intervengono quindi i DBMS: Database Management System nati per offrire strumenti più comodi per risolvere problemi di rappresentazione delle informazioni. L'utente potrà creare tabelle, inserire e ricercare dati. Sarà il DBMS a fare da ponte con il basso livello e a rappresentare adeguatamente le tabelle tramite strumenti di livello più basso (file) nascondendoci il modello fisico ponendoci la visione più comoda del livello logico. I loro strumenti vengono chiamati "Modello dei dati", un esempio è il modello relazionale.
Caratteristiche dei database relazionali
Le tabelle hanno una struttura che deve essere decisa una volta per tutte, irrevocabile: quante tabelle usare (con i rispettivi nomi) e quante righe e colonne (con i nomi).
Rubrica telefonica
Amici: Nome, cognome, C.F. (per i casi di omonimia), indirizzo, n. telefono
Problema: Mario Rossi ha un altro numero di telefono. Soluzioni?
- Riservare due colonne per i num di telefono (telefono 1, telefono 2) = Non sappiamo quanti telefoni comprerà, anche infiniti, non ci soddisfa. Non sapremo in quale colonna c'è il numero che ci serve. Spreco spazio.
- Inserisco altre righe: si risolve però si ripetono dati inutili: ridondanza
- Se per errore 2 righe avessero dati incompatibili non sapremmo quale sia corretta: Inconsistente
Soluzione finale: Altra tabella telefoni con CF e numero (CF per identificarlo)
Esercizio: Registro automobilistico
- Automobili: Targa, marca, modello
- Proprietario: Nome, cognome, codice fiscale
- Auto: Modello automobile, codice fiscale
Segreteria studenti di un'università
- Corsi: Nome del corso, nome docente, numero crediti, anno
- Studenti: Matricola, cogn, nome, data di nascita
- Esami: Matricola, corso, votazione
Modelli logici
Utilizzati dall'utente per la rappresentazione dell'informazione. Relazionale, gerarchico, reticolare (grafo).
Modelli fisici
Se sostituiamo un DBMS1 con un DBMS2 e spostiamo le tabelle tali e quali la base di dati continuerà a funzionare ugualmente come prima, nulla è cambiato per l'utente (indipendenza fisica dei dati).
SQLite
Piccolo DBMS offerto come libreria cioè integrato all'interno di un programma che ovviamente deve dialogare con lui per manipolare il database: chiedendo di creare una tabella, inserire una riga, cercare dati. L'interazione è favorita dal linguaggio SQL.
Il programma dà dei comandi a SQLite parlando SQL e SQLite esegue.
I database SQLite manipolano i programmi in modo trasparente per l'utente grazie a SQLite Studio.
Il linguaggio SQL
Standard, l'adozione universale consente quindi l'indipendenza fisica dei dati. Sintassi inglese.
Proporzione
Che cosa è una? Affermazione che può essere vera o falsa. Se ne ammettiamo una come falsa dobbiamo portare delle prove, altrimenti sarà ammessa come vera. Ne possiamo costruire altre grazie a degli operatori tra cui:
- NOT: Inverte il valore di una. Quindi se P è falsa, NOT P è vera
- AND: ^ 2 proposizioni P e Q. È vera solo se entrambe sono vere. L'operatore not ha la precedenza su and.
- OR: V. Si applica su due. Es: P e Q. È vera se almeno 1 lo è e falsa se entrambe lo sono.
Insiemi
Collezione di elementi. Per rappresentare un insieme si elencano gli elementi tra parentesi graffe es. N1= {1,3,5,7}. Quindi 1 'N1'. Altro modo è la Proporzione P(a).
Relazione matematica
Consente di modellare i legami esistenti tra gli oggetti appartenenti a insiemi.
Tabella AMICI:
- CF: C.F. ITALIANI
- COGNOME: COGN ITALIANI
- NOME: NOMI DI PERSONA
- INDIRIZZO: INDIRIZZI ITALIANI
Questi elementi sono stati tratti da insiemi: K: INSIEME C.F. ITALIANI, C: INSIEME COGN ITALIANI, N: INSIEME NOMI DI PERSONA, I: INSIEME INDIRIZZI ITALIANI.
Se la quadrupla K,C,N,I appartiene a R significa che esiste una persona con C.F. K, cognome C, nome N, che abita nell'indirizzo I. Mario Rossi appartiene a R. Quindi la relazione matematica lega.
Differenza tra schemi e istanze
Lo schema di una base di dati relazionale cattura a livello logico la struttura del dominio di interesse (i nomi delle relazioni, gli attributi..). Istanza: Dati veri e propri: persone, telefoni, studenti ed esami. Lo schema quindi con il tempo non cambia, cambia l'istanza, basta aggiungere nuovi dati. I diversi domini di interesse possono avere stesso schema ma diversa istanza (es. rubrica telefonica mia e del mio vicino di casa).
SQL e dominio degli attributi
In SQL, quando si crea una nuova tabella di ogni attributo si descrive il dominio: Codice fiscale (not null) perché non può essere omesso.
Principali domini:
- Stringhe: Sequenza di caratteri (lettere, numeri, simboli, spazi) si utilizza CHAR (esattamente quel numero di caratteri) o VARCHAR (se può variare).
- Numeri interi: INTEGER (1000), SMALLINT (50), BIGINT (300000000).
- Numeri virgola mobile: REAL (14.5649), DOUBLE PRECISION 14.456746864575.
- Tempo: TIME('06:30:00'), DATE ('2015-04-03'), TIME STAMP (ENTRAMBI CON SPAZIO TRA I DUE).
- Booleano: BOOLEAN (TRUE OR FALSE).
Es: Rubrica telefonica
- Amici: CF (CHAR), COGNOME, NOME (VARCHAR), INDIRIZZO (VARCHAR)
- Studenti: MATRICOLA (usiamo un varchar perché integer non avrebbe rappresentato gli 0), COGNOME, NOME (varchar), DATA DI NASCITA (date).
- Corsi: nome corso: varchar, cognome docente: varchar, crediti: real (in modo da rappresentare anche i frazionari), anno: integer, lodi: boolean.
Vincoli di integrità
Proprietà che ogni istanza della base di dati per essere valida deve verificare. Possono essere interrelazionali: quando la verifica coinvolge diverse relazioni; Intrarelazionali: un'unica relazione.
Intrarelazionali
- Vincoli di tupla: vincoli di valore come not null.
- Vincoli di chiave: permette di individuare una tupla di una relazione ed essa.