Elementi di un database relazionale (RBD)
- Lo schema: sostanzialmente invariante nel tempo, che ne descrive la struttura (aspetto intensionale). Modificare lo schema di un database è un’operazione molto onerosa, che la si esegue solo in rari e comprovati casi.
- l'istanza: costituita dai valori attuali, che possono cambiare molto e molto rapidamente (aspetto estensionale). Modificare i dati di un database sono operazioni, si onerose, ma relativamente veloci.
Le operazioni all’interno del database sono ottimizzate in base all’utilizzo infatti l’operazione più onerosa è la meno usata, mentre la meno onersoa è la più usata:
Tabelle
Le tabelle sono le strutture principali di un database; ciascuna tabella rappresenta sempre un soggetto unico e specifico:
- l’ ordine logico delle tuple/record e dei campi all’ interno di una tabella/relazione non ha assolutamente importanza.
- Ogni tabella deve contenere almeno un campo – conosciuto come Chiave Primaria - che identifica ogni record in modo univoco. Se la Chiave Primaria non si crea un problema di indicizzazione e quindi di ricerca delle informazioni all’interno della tabella. Una soluzione potrebbe essere quella di inserire il campo "id" costituito da un numero intero progressivo. Grazie a queste due caratteristiche, i dati di un database Relazionale possono esistere indipendentemente dal modo in cui sono stati fisicamente immagazzinati nel computer.
Il soggetto rappresentato da una data tabella può essere sia un oggetto che un evento. Nel primo caso, la tabella rappresenta qualcosa di tangibile, come una persona, un luogo o una cosa. Nel secondo caso, quando il soggetto di una tabella è un evento, la tabella rappresenta qualcosa che avviene in un momento preciso e presenta delle caratteristiche che si vorrebbero registrare. Ad esempio, una tabella evento è la registrazione della temperatura ambientale giornaliera in cui risulta una data che identifica il momento della rilevazione.
Campi/Attributi
Un campo è la struttura più piccola di un database e rappresenta una delle caratteristiche del soggetto della tabella alla quale appartiene. Ogni campo di un database ben progettato contiene un unico valore e il suo nome identifica il tipo di valore che rappresenta. Questo rende l’ immissione dei dati in un campo un’ operazione facile ed intuitiva.
Un'attributo è obbligatorio se non può accettare il valore di NULL, altrimenti è facoltativo.
Un'attributo non può essere un dato calcolato, come l'età di una persona.
Record/Tupla/Riga
Un record rappresenta un’ unica istanza del soggetto della tabella. La costruzione corretta delle tabelle determina che ogni record viene identificato in tutto il database attraverso un unico valore nel campo Chiave Primaria di quel record.
Chiavi
Le chiavi sono dei campi speciali all’ interno di una tabella.
- Primaria, primary key, pk, id → è un attributo (o un insieme di attributi) che identifica univocamente un'istanza di un'entità. Per ogni istanza dell'entità riesco a specificare questo valore, è univoco, non cambia mai, non può essere null. Se almeno una di queste caratteristiche può essere non univoca bisogna realizzare una chiave primaria artificiale. Quando una Chiave Primaria è composta da due o più campi, viene denominata Chiave Primaria Composta. Inoltre, le Chiavi Primarie rafforzano l’ integrità dei dati a livello di tabella ed aiutano a stabilire delle relazioni con le altre tabelle (integrità intrarelazionale ed interrelazionale). Per integrità dei dati a livello di tabella si intende assicurare che non esistano record duplicati.
- Esterna, forgein key, fk → è un attributo (o un insieme di attributi) che completa una relazione tramite il richiamo al record padre. Esse rafforzano l'entità referenziale completando l'associazione tra due entità
- Composta → è una chiave formata da più attributi
- Artificale → è una chiave univoca formata da un attributo privo di significato proprio se non quello di identificare in maniera univoca il record
- Superchiave → è un insieme degli attributi che identificano in maniera univoca un'istanza, anche più di quelli strettamente necessaria
- Candidata → superchiave con cardinalità minima, contiene solo gli attributi necessari ad una identificazione univoca del record
- Alternativa → superchiave o chiave candidata che non è stata scelta per identificare in maniera univoca il record.
Secondaria, indice secondario → è un attributo che può identificare in maniera univoca o meno un record, e viene usata per velocizzare le ricerche dei dati
Il DBMS crea un nuovo indice per la suddetta chiave secondaria. Un indice secondario è essenzialmente un file ordinato costituito da due campi: la chiave secondaria e da un puntatore al relativo record e/o l’ID (chiave primaria) del relativo record. Entrambi i metodi hanno dei difetti:- Nel primo caso in caso che il record si sposti di posizione deve essere aggiornato;
Nel secondo caso è più oneroso l’accesso in quanto serve un passaggio in più.
Ricordiamo le chiavi secondario rendono più veloce la lettura dei dati, però esse rendono più onerose le operazioni di inserimento, modifica ed eliminazioni. La gestione di valori duplicati, normalmente, avviene tramite una lista.
Nel caso specifico che una tabella abbia per tutti i campi una chiave secondaria la tabella principale è inutile in quanto è un ridondanza.
È sempre possibile realizzare chiavi principali (ma anche esterne, indici, ...) composte da 2 o più campi. Per esempio c’è una buona certezza che in una stessa abitazione non abitano due persone con lo stesso nome e cognome, e quindi in questo caso non servirebbe l’ID. Spesso per convenienza si utilizza lo stesso l’ID, infatti nei database relazionali per fare una relazione dobbiamo utilizzare 2 o più campi (quanti sono i campi della chiave secondaria). Inoltre in tutte le operazioni di ricerca, modifica ed eliminazione dobbiamo sempre confrontare 2 o più campi, aumentando l’onerosità della ricerca.
Relazioni
Una relazione è una associazioni tra due o più entità, ogni associazione ha due versi. Ogni verso ha:
- Un'entità di partenza
- Un'entità di arrivo
- Una descrizione per comprendere il significato della associazione
Le relazioni sono classificate secondo:
- Il grado: Possono essere binaria (quando asocia due entità o due istanze della stessa entità - detta ricorsiva) o n-aria (per esempio ternarie, quando ci sono tre entità in gioco).
- La cardinalità: Le cardinalità indicano quante istanze di una singola entità sono in gioco. Le cardinalità possono essere 1 a 1 (uno a uno), 1 a N (uno a molti) e N a M (molti a molti).
L'esistenza: L'esistenza di una relazione può essere obbligatoria o opzionale. E in questo caso si disinguono le entità forti e deboli:
- Entità forte: necessità di una connessione, detta obbligatoria
Esempio: Spettacolo con Luogo dello spettacolo, non esiste uno spettacolo senza luogo
Entità debole: non necessità di una connessione, detta opzionale
Esempio: Studente con voti, non esiste uno studente senza voti
Attenzione! L'entità debole potrebbe essere un'entità senza chiave primaria.
- Entità forte: necessità di una connessione, detta obbligatoria
Associazioni ricorsive. Sono associazioni aventi come partecipanti istanze provenienti dalla stessa entità (chiamate anche auto-associazioni, unarie o ad anello). Le associazioni ricorsive sono sempre opzionali, perché l’inserimento nel database avviene in maniera sequenziale e altrimenti ci sarebbe uno stallo.
Viste
Una View è una tabella virtuale costituita da campi che appartengono a una o più tabelle del database; le tabelle da cui provengono i campi della View sono chiamate Tabelle base. L’ attributo di virtualità della View deriva dal fatto che i dati in essa contenuti non sono memorizzati ma derivano dalle tabelle di origine, questo significa che non vi è una duplicazione dei dati sul supporto fisico di memorizzazione.
In molti RDBMS, una View è comunemente realizzata ed indicata come una query salvata, o più semplicemente come Query. La differenza tra una View ed una Query intesa nel suo significato specifico è, molte volte, solamente la sua denominazione. Una vista spesso contine una o più istruzione di JOIN.
Una vista ha le stesse caratteristiche di una tabella, ma è normalmente generata ogni volta che la si richiama.
Le viste vengono usate per:
- Permettere agli utenti di avere una visione personalizzata del DB, e che in parte astragga dalla struttura logica del DB stesso
- Selezionare le sole componenti di interesse (rimuovere campi)
- Esprimere in modo compatto espressioni molto complesse, con sottoespressioni ripetute (semplificare il codice)
- Introdurre meccanismi di protezione della privatezza (limitare l’accesso alle viste)
- In presenza di ristrutturazioni di un DB, inserire viste che corrispondono a relazioni non più presenti, ma ricavabili dalle nuove relazioni (per rendere compatibile software scritto in precedenza)
- Realizzare colonne calcolate, senza che questa sia registrata fisicamente nel database. (per esempio avere una colonna con l’età e non la data di nascita)
- Utilizzare le viste per semplificare la procedura si sviluppo di un Trigger
Si noti che nella definizione di una vista si possono referenziare anche altre viste.
In alcuni DBMS le viste possono essere “aggiornabili” (ciè permette di eseguire comandi DML - INSERT, UPDATE e DELETE). Non tutti i DBMS supportano questa possibilità. Poiché una vista non è altro che un'interfaccia su una o più tabelle, questi comandi andranno a modificare le tabelle sottostanti. Non tutte le viste sono aggiornabili e scrivibili. Si parla di viste "updatable" (sulle quali cioè si può eseguire UPDATE e DELETE) solo quando il DBMS è in grado di stabilire una mappatura inversa tra i record presenti nella vista e quelli nelle tabelle.
In alcuni DBMS le viste possono essere vere e proprie tabelle, con Primary Key, Indici, e supporto al salvataggio su disco per una lettura più rapida. I dati ivi contenuti vengono aggiornati automaticamente a intervalli regolari dal DBMS, preferibilmente in un momento in cui il database non viene utilizzato (di solito di notte).
In alcuni DBMS esistono le colonne virtuali o gli indici funzionali, per poter realizzare colonne calcolate direttamente nella tabella.