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.
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
Creazione di una tabella con il linguaggio SQL
(DML). Esempio (serve solo per capire): Per creare una tabella do il comando "CREATE TABLE" seguito dal nome della tabella "Clienti" e tra le graffe definisco il numero di colonne e che tipo di dati devono contenere; in questo caso sono 3 colonne: "IDCliente", "Nome" e "Cognome", la prima colonna contiene un numero intero, le altre due contengono dei caratteri di lunghezza massima "20".
Posso inserire una riga nella tabella ➝ Questo serve per interrogare la base di dati. In questo esempio si cercano solo quei record dove il campo "Nome" è uguale alla stringa "Mario".
Questo linguaggio SQL non dice alla macchina come fare le operazioni ma solo il risultato che deve ottenere. Il "come" non è un problema di chi dà il comando ma è un problema del DBMS.
In alcuni programmi, come ad esempio Microsoft Access, esiste anche il linguaggio QBE ➝ Query By Example, che
In pratica, si mostra graficamente:
- Quali campi si vogliono selezionare
- Quali criteri adottare per selezionare i valori dei campi
- Quali campi si vuole visualizzare e in quale ordine
Le azioni richieste dall'utente vengono tradotte in linguaggio SQL per poi essere estrapolate dalla base di dati. Di fatto, il QBE aiuta a produrre query in maniera più semplice.
Una transazione è una richiesta di modifica della base di dati provocate dalle operazioni che si possono fare sulle tabelle, esempi di transazioni:
- Inserimento di una tupla
- Cancellazione di una tupla
- Aggiornamento di un valore
Quando si parla di transazioni concorrenti si intendono le richieste contemporanee di modifica della stessa tabella/tupla/attributo. Quando due o più transazioni sono concorrenti deve essere
Garantita l'integrità e la consistenza dei dati. Le transazioni che possono essere fatte sulle basi di dati devono sempre avere le seguenti proprietà (ACID):
- ATOMIC: deve essere indivisibile, tutte le singole istruzioni che compongono una transazione devono essere effettuate, oppure nessuna.
- CONSISTENT: la base di dati è in stato consistente prima e dopo la transazione.
- ISOLATED: durante una transazione, un altro utente non deve essere in grado di visualizzare e interrogare quei dati prima del termine della transazione.
- DURABLE: Una volta che la transazione è stata completata, le sue modifiche devono persistere nella base di dati anche in caso di fallimenti hardware o software.
Esempio:
Posso vedere la transazione come un insieme di operazioni diverse. La mia transazione, che potrebbe risultare istantanea, ha almeno 6 operazioni diverse. Il problema è che se la transazione fallisce dopo l'operazione 3, la base di dati rimane in stato inconsistente.
Perché avrei € 1.000 in meno sul CC1 e non avrei ancora aggiunto i € 1.000 sul CC3.
Il DBMS ha dei meccanismi che si chiamano di Rollback, che gli permettono, nel caso in cui la transazione fallisca a metà delle operazioni, di annullare tutte quelle precedenti per tornare allo stato consistente iniziale. In questo modo, la transazione può essere ritenuta ACID.
Limitazioni del DB relazionali:
- La rappresentazione delle informazioni nella base di dati non rispecchia più la rappresentazione nel mondo reale delle entità. Con la crescita del Web e l'avvento dei Big Data, gli sviluppatori di applicazioni Web (e Cloud-based) hanno bisogno di:
- Grandi volumi di operazioni di lettura e scrittura dalle basi di dati;
- Bassi tempi di risposta;
- Elevata disponibilità.
- I DB relazionali presentano problemi di scalabilità. Le prestazioni si possono migliorare usando hardware efficienti (scalabilità verticale); tuttavia
Inutilizzato per la maggior parte del tempo, quindi sono risorse hardware sprecate. Una soluzione potrebbe essere quella di utilizzare quel server di backup per distribuire il carico e gestire situazioni di guasti, utilizzando le risorse più efficientemente, in modo da non tenerlo inutilizzato.
La struttura delle tabelle di un DB relazionale è rigida, perché ogni tabella contiene dati omogenei (ad es. dati solo dei clienti o dei conti correnti), cioè tutte le tuple hanno gli stessi attributi, i quali hanno un formato particolare e molto rigido.
Alcune applicazioni necessitano di maggiore flessibilità nella struttura dei dati da memorizzare. Esempio: trasporto di merci eterogenee: dobbiamo memorizzare in una tabella le caratteristiche dei prodotti trasportati. Es: un computer e una lavatrice devono memorizzare attributi diversi.
Esempio: applicazione IoT per il tracciamento di prodotti: diversi dispositivi con sensori diversi. Es. un sensore deve rilevare la
temperatura (valori in gradi celsius), un altro sensore la posizione(coordinate geografiche). 62Quando si devono gestire grandi moli di dati e grandi moli di utenti e, magari, dati che sono eterogenei traloro, i database non relazionali, detti anche NoSQL (Not-only SQL), sono un’alternativa al modellorelazionale perché garantiscono:
- Scalabilità
- Flessibilità
- Disponibilità
- Basso costo (perché esistono soluzioni open-source, che in genere sono gratis)
Sono progettati per lavorare su server distribuiti ed eliminano i vincoli del modello relazionale e delletransazioni a loro associate, ovvero la rigidità della struttura delle tabelle e la consistenza stretta.Le copie multiple di una tabella devono essere mantenute consistenti.Two-phase commit: una transazione che modifica il database principale e poi aggiorna le copie.L’utente scrive un dato sul primo server. Ilserver 1 manda la stessa operazione alsecondo server
(questo prima di dare l'OK all'utente). Il server 2 manda l'OK al server1, che poi lo manda anche all'utente. Questa operazione richiede un tempo non trascurabile, soprattutto al crescere del numero di server. Inoltre, durante questo periodo, il nuovo dato non è disponibile.
Questo è un problema, ma è un problema che dipende dall'applicazione. In alcune applicazioni, garantire sia alta disponibilità che consistenza è obbligatorio (es: DB di una banca); in altre applicazioni è più importante avere operazioni veloci, anche a costo di garantire meno consistenza.
Esempio: e-commerce. L'utente aggiunge un elemento al carrello. Il primo server risponde subito all'utente, così egli può continuare con le sue operazioni. Nel server 2 ci sono ancora 2 soli elementi nel carrello, quindi siamo in uno stato inconsistente, ma questo non è un problema perché nessuno starà sbirciando nel
carrello dell'utente. Se il server 2 si rompe, il massimo che può succedere è che anche nel server 1 ci saranno 2 soli elementi nel carrello, non è grave. In questo esempio, dunque, la consistenza non è importante, è più importante la velocità delle operazioni. Comunque, poi il database deve essere aggiornato e verrà fatto con calma. Quindi, alla fine le copie saranno consistenti. Questo concetto si chiama eventual consistency.
Teorema CAP. Noto anche come teorema di Brewer. Secondo questo teorema, per fare un database distribuito è possibile soddisfare contemporaneamente solamente 2 di queste 3 proprietà:
- Consistency (consistenza): presenza di copie multiple consistenti;
- Availability (disponibilità): fornire una risposta a qualunque query in ogni momento;
- Partition protection (protezione contro le partizioni): se la connessione tra due server si interrompe, i dati restano accessibili.
quando tutte le operazioni sono finite posso continuare. Questo sistema è consistente perché mantiene le copie consistenti ma nell'intervallo tra 1 e 4 quel dato non è disponibile. In questo caso, il dato è subito disponibile ma non è subito consistente.
Poniamo ad esempio che, ad un certo punto, il cavo che collega il server 1 e il server 2 si rompa. Abbiamo una partizione nel sistema perché S1 non può più contattare S2. Se un utente scrive su S1, un utente che guarda su S2 cosa può fare?
- Opzione 1: Available but not Consistent → S2 può restituire dati inconsistenti.
- Opzione 2: Consistent but not Available → S2 viene disattivato.
- Opzione 3: Consistent and Available → il sistema si blocca in caso di partizioni perché non è possibile garantire né consistenza né disponibilità.
Pongo i problemi su questo triangolo. È possibile spostarsi solo su uno
dei 3 lati del triangolo: a. Posso spostarmi sul lato CA (Consistent and Available) in cui eventuali problemi di rete possono bloccare il sistema perché non ho la proprietà P (partition protection). b. Posso spostarmi sul segmento AP, in cui è garantita sempre la disponibilità, il sistema non si rompe, ma alcuni dati possono essere inconsistenti. c. Posso spostarmi sul segmento CP, in cui una parte del database può non essere raggiungibile. Quando si passa a database non relazionali, fatti apposte per database distribuiti, non si possono più usare le transazioni ACID, perché non è possibile avere tutte quelle proprietà insieme. I database NoSQL possiedono proprietà BASE: Esistono più modelli di database NoSQL, ciascuno dei quali organizza e gestisce i dati in modo diverso. Un altro motivo per passare a database non relazionali consiste nel fatto che i dati da immagazzinare nel database possono essere eterogenei. In unIl database relazionale è un tipo di database che organizza i dati in tabelle strutturate, in cui le informazioni sono rappresentate da righe e colonne. Ogni tabella rappresenta una entità e ogni riga rappresenta una istanza di quella entità. Le colonne rappresentano gli attributi o le caratteristiche di quella entità.
Le tabelle nel database relazionale sono collegate tra loro attraverso relazioni definite da chiavi primarie e chiavi esterne. Le chiavi primarie sono uniche per ogni riga e vengono utilizzate per identificare in modo univoco ogni istanza di un'entità. Le chiavi esterne sono utilizzate per stabilire relazioni tra le tabelle, consentendo di recuperare dati correlati da più tabelle.
Il database relazionale utilizza il linguaggio SQL (Structured Query Language) per interrogare e manipolare i dati. SQL consente di eseguire operazioni come l'inserimento, l'aggiornamento e la cancellazione dei dati, nonché l'interrogazione dei dati per ottenere informazioni specifiche.