Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Formattazione del testo
ITelefonico(NOME, RUOLO, CELLULARE, UFFICIO) nelle tuple in cui il RUOLO è studente, come valore nel campo UFFICIO occorre inserire NULL in quanto uno studente non ha un numero di ufficio. È fondamentale però limitare il numero di valori NULL in una relazione, altrimenti si rischia di avere situazioni in cui due righe sono uguali per assenza di informazioni, come nel seguente esempio:
Non tutte le istanze di una relazione possono essere considerate lecite, perché spesso nelle relazioni vengono introdotti dei Vincoli di Integrità, ossia delle funzioni booleane che associano ad una istanza r di una Base di Dati definita su uno schema R = {R (X ), ..., R (X )} un valore di verità (true/false). In altre parole i vincoli indicano quando una tupla è valida all'interno di una relazione mediante delle specifiche regole, se il vincolo non è valida quella specifica tupla non può essere inserita nella relazione. Tali vincoli
Vengono memorizzati insieme allo schema della relazione. Esistono due grandi famiglie di Vincoli di Integrità sulle istanze di una relazione:
- Vincoli Intra-Relazionali: Vincoli il cui soddisfacimento è definito per singole relazioni, ovvero tutte le istanze di una relazione devono soddisfare tutti i vincoli che sono definiti sulla relazione stessa. Fra questi ci sono i Vincoli di Chiave, Vincoli di Tupla e Vincoli di Dominio.
- Vincoli Inter-Relazionali: Vincoli che coinvolgono più relazioni, cioè più tabelle. Fra questi ci sono i Vincoli di Chiave Esterna (detti anche Vincoli Referenziali).
1.1.1. Vincoli Intra-Relazionali
Sia considerato il seguente esempio: Il primo tipo di Vincolo che è possibile imporre su questa relazione è che il Voto deve essere un numero compreso fra 18 e 30, ovvero (Voto ≥ 18) AND (Voto ≤ 30); questo prende il Nome di Vincolo di Dominio, perché coinvolge un solo Dominio, cioè l'Attributo Voto.
Altro tipo di Vincolo che è possibile imporre è che la Lode deve essere ammessa se e solo se il Voto dello Studente sia uguale a 30, cioè (NOT (Lode = SI)) OR (Voto = 30); esso prende il nome di Vincolo di Tupla. Per spiegare i Vincoli di Chiave si fa riferimento alla seguente relazione: Innanzitutto viene definita chiave un insieme di attributi che consente di identificare in maniera univoca le tuple di una relazione: nell'esempio della relazione studente la chiave è semplicemente la Matricola, in quanto non possono esistere due studenti che hanno la stessa matricola. Gli attributi dentro una chiave vengono chiamati Attributi Primi. Invece un sottoinsieme K di attributi di una relazione r è chiamata superchiave di r se NON contiene due tuple distinte t1 e t2 con t1[K]=t2[K], cioè uguali sulla restrizione dei K attributi. Se togliendo uno qualsiasi dei K attributi dal sottoinsieme, quest'ultimo smette di essere una superchiave di r, alloraTale sottoinsieme prende anche il nome di Superchiave Minimale di r, oppure chiave di r. Quindi a partire dalle possibili Superchiavi, si designano le Superchiavi Minimali, cioè le chiavi di r, e fra queste si sceglie quella con il minor numero di attributi come Chiave Primaria di r; gli attributi di una chiave primaria sono in genere indicati con una sottolineatura, e non ammettono valori NULL. In genere esiste sempre almeno una superchiave ed una chiave per ogni relazione, possono esistere più superchiavi o chiavi per la stessa relazione, e soprattutto ogni relazione deve sempre disporre di una Chiave Primaria univoca. Viene mostrato un esempio relativa alla relazione studenti: È possibile constatare che (MATRICOLA) è una superchiave perché non posso avere due studenti con la stessa matricola, anche (NOME, COGNOME, NASCITA) è una superchiave perché è molto improbabile avere due studenti con stesso nome e cognome e nati lo stesso giorno.
Queste duesono anche Superchiavi Minimali in quanto eliminando uno qualsiasi degli attributi delsottoinsieme posso avere due tuple uguali, ad esempio due studenti con lo stesso Nome nati lostesso giorno. Invece (MATRICOLA, NOME) non è una Superchiave Minimale, perché ancheeliminando l'attributo Nome dal sottoinsieme, esso continua ancora ad essere una Superchiave.
Il Vincolo di Chiave definisce che "non è possibile inserire in una tabella due tuple che hanno lastessa chiave, ed inoltre il DBMS non permette l'inserimento di una nuova tupla in una relazionein presenza di una chiave primaria nulla".
Ricapitolando:
- Ogni relazione ha almeno una chiave, e quindi almeno una chiave Primaria.
- Possono esistere attributi che non appartengono ad alcuna chiave.
- Può esistere una chiave che coinvolge tutti gli attributi.
- Ogni relazione ha almeno una superchiave.
- Può succedere che esistano più superchiavi ed una di esse
coinvolga tutti gli attributi.
91.1.2. Vincoli Inter-Relazionali
Una base di dati può essere costituita da molte tabelle, e spesso, le informazioni contenute in relazioni diverse sono correlate tra loro. Nel modello relazionale, i riferimenti tra dati in relazioni differenti sono espressi mediante i Vincoli di Chiave Esterna, anche detti Vincoli Referenziali:
Ad esempio nella tabella ESAMI gli Attributi "Corso" e "Studente" sono definiti sullo stesso Dominio dell'attributo "Matricola" della tabella STUDENTI e "Codice Corso" della tabella CORSI, che sono anche le chiavi primarie di queste due tabelle: allora "Corso" e "Studente" prendono il nome di Chiavi Esterne (Foreign Key). Così facendo ogni riga della tabella referenziante si collega al massimo ad una riga della riga della tabella referenziata, sulla base dei valori comuni nell'attributo/negli attributi replicati, cioè le tabelle
Risultano collegate attraverso valori comuni. In tal modo ad esempio si capisce che è stato lo studente Rossi Giorgio a prendere 30 e Lode all'esame di Basi di Dati. Può accadere che un'operazione di aggiornamento su una relazione causi violazioni di vincoli di integrità su altre relazioni. Ci sono 3 modi per reagire:
- Non consentire l'operazione.
- Eliminazione a cascata.
- Inserimento di valori NULL.
Infine vengono mostrati i PRO e i CONTRO del modello relazionale:
PRO:
- Modello intuitivo.
- Garantisce indipendenza dallo schema fisico.
CONTRO:
- Poca flessibilità.
- Tutte le istanze di una relazione devono possedere la stessa struttura.
- Redondanza dei dati causata dai vincoli.
Riflessività: le meta-informazioni di una relazione sono gestite a loro volta attraverso relazioni.
101.2. Algebra Relazionale:
È stato già detto in precedenza che le relazioni non sono altro che insiemi (tabelle di elementi),
- Unione: Prende 2 tabelle e genera una nuova tabella che ha tutte le righe che compaiono nelle due tabelle precedenti senza duplicati.
- Intersezione: Prende soltanto le righe che figurano in entrambe le tabelle.
- Differenza: Prende tutte le righe dalla prima relazione, e a quest'ultima toglie solo le righe che compaiono nell'intersezione fra le due relazioni.
- Ridenominazione: Spesso alcune Unioni sono sensate ma impossibili perché gli attributi hanno nomi diversi, allora in tali casi è possibile cambiare lo schema della relazione (cioè il nome degli attributi) per
per andare a capo, mentre il testo in grassetto può essere evidenziato utilizzando il tag . Inoltre, per indicare gli attributi e i comandi SQL, possiamo utilizzare il tag
.
Ecco il testo formattato correttamente:
Permettere il tutto. Ad esempio gli attributi Padre e Madre nella loro Unione possono diventare Genitore. Il costrutto per fare ciò in SQL è l'AS.
Selezione: Data una relazione, produce un'altra relazione che ha lo stesso schema ma prende soltanto un sottoinsieme di righe della tabella originaria (tutte quelle che soddisfano una certa condizione). Esso corrisponde all'operatore WHERE
del SQL.
Proiezione: Stessa cosa della Selezione ma invece di prendere tutte le righe che soddisfano una certa condizione, vengono prese le colonne, cioè soltanto determinati Attributi della Relazione. Esso corrisponde all'operatore FROM
del SQL. Da notare che selezionando soltanto gli attributi Cognome e Filiale dalla relazione Impiegati, otteniamo due tuple uguali perché ci sono 2 impiegati di nome Rossi che lavorano a Roma, ma con stipendi e matricole diverse: in questo caso l'algebra cancella una riga perché trova un duplicato, mentre il SQL non la cancella, permettendo la visualizzazione di tutte le righe duplicate.
se è intenzione toglierla occorre usare la keyword DISTINCT. Se come Attributi della proiezione si sceglie una Superchave allora si è certi di ottenere nella tabella risultante lo stesso numero di tuple della tabella originaria.
Join Naturale: Il Join permette di correlare dati contenuti in relazioni diverse. In particolare il Join Naturale è un operatore binario che produce una nuova relazione che contiene gli attributi che compaiono nelle due relazioni da accorpare, mettendo una sola volta gli attributi che hanno lo stesso nome. Le righe vengono prese dal prodotto Cartesiano delle due tabelle, prendendo solo quelle per cui gli attributi comuni hanno lo stesso valore. Questo è un Join Non Completo perché vengono persi dei dati: è stata persa la tupla relativa all'impiegato Rossi in quanto non ci sono informazioni sul reparto A. Questo è un Join Vuoto, in quanto è
impossibile fare anche un solo accorpamento.
Join Esterno: Quando ci si accorge che una o più tuple andrebbero perse per mancanza di informazioni, il Join Esterno le inserisce comunque utilizzando soltanto le informazioni conosciute completando quelle assenti con un NULL. Questo è un Join Sinistro perché completa con un NULL tutte le tuple della prima relazione, ma non quelle della seconda relazione (che quindi vengono buttate). Questo è un Join Destro perché completa con un NULL tutte le tuple della seconda relazione, ma non quelle della prima relazione (che quindi vengono buttate). Questo è un Full Join, o Join Completo, perché completa con un NULL tutte le tuple sia della prima che della seconda relazione, non perdendo quindi nessuna tupla.
Prodotto Cartesiano: è un Join Naturale che però combina tutte le