Strutture dati e database: differenze tra le versioni

m
Robot: Automated text replacement (-<i>(.*?)</i> +''\1'')
m (Robot: Automated text replacement (-<i>(.*?)</i> +''\1''))
 
 
== Tipologie di strutture dati ==
 
 
== Principi base per la costruzione e la gestione di un database ==
Il miglior modo per comprendere come impostare una corretta struttura di un database è provare a crearne una.
Un esempio classico di una base di dati può essere un elenco di persone di cui vogliamo memorizzarne il nome, il cognome, l'indirizzo, il telefono, l'età e il numero di computer posseduti.
 
=== Visualizzazione tabulare dei dati: campi e record ===
Il più diffuso modo di visualizzare una base di dati è inserirli in una griglia di questo tipo:
{| BORDER="1" CELLSPACING="0" CELLPADDING="2"
Abbiamo quindi visualizzato i dati in una struttura a tabella dove in ogni cella è memorizzato un valore corrispondente ad un aspetto (campo) di una persona (record).
 
=== Capire il tipo di dati che si sta organizzando ===
Per strutturare correttamente dei dati, il primo passo è capire di che tipo sono, specialmente in relazione all'uso che se ne dovrà fare.
 
|}
 
=== Definire regole di convalida, maschere di input e campi obbligatori ===
Esiste la possibilità di bloccare l'inserimento di dati che non rispettino regole predefite, come ad esempio impedire l'inserimento di date di nascita superiori a quelle del giorno corrente o anche superiori a quelle di esattamente 18 anni fa, volendo per esempio dati di sole persone maggiorenni; per ogni regola di convalida è consigliabile, se si è in grado, far comparire un messaggio per l'operatore che inserisce il dato con la spiegazione dell'errore di inserimento eventualmente commesso.
 
Un'altra esigenza spesso fondamentale è rendere obbligatorio l'inserimento del valore in un determinato campo, prima di memorizzare un nuovo record; pensiamo ad un database indirizzario, usato per stampare etichette per fini postali: il campo o i campi che formano l'indirizzo completo devono essere obbligatori, in quanto non indicare nessun indirizzo equivarebbe a rendere inutile la stampa di un'etichetta.
 
=== Chiavi per identificare univocamente ogni record ===
Un esigenza primaria in un database è consentire l'identificazione univoca di un record, il fisco italiano ad esempio per non confondere la dichiarazione dei redditi di due persone con nome e cognome uguale ha ideato il codice fiscale (un codice di tipo posizionale, dove cioè ogni carattere prende senso a seconda della posizione che occupa; in grado di memorizzare 3 lettere del nome, 3 lettere del cognome, le ultime 2 cifre dell'anno di nascita, un codice legato alla città di nascita e il genere maschile o femminile) confidando nel fatto che non esistano due persone con lo stesso nome, cognome, data e luogo di nascita.
 
|}
 
=== I database relazionali ===
Si definiscono database realazionali i database che consentono di creare relazioni tra i record di più tabelle, tali relazioni saranno definite per due tabelle alla volta, utilizzando la chiave univoca della prima tabella per riferire i dati del record così identificato ad uno o più record della seconda tabella; vediamo con un esempio pratico come realizzare una relazione e quali vantaggi danno questi tipi di database.
 
il vantaggio più evidente è quello di dover scrivere una volta sola i dati delle ditte, risparmando tempo ed evitando errori di battitura; basterà predisporre, nella tabella delle persone, un campo destinato a contenere solo le chiavi univoche dei record della tabella delle ditte; la possibilità di inserire in questo campo solo il valore di una precisa chiave univoca di una ditta garantisce il corretto riferimento di ogni persona all'esatta ditta per cui lavora.
 
=== Tipi di relazioni e strutture che ne conseguono ===
Esistono due tipi di relazioni: le relazioni '''uno a uno''' e le relazioni '''uno a molti'''; vediamo che differenza c'è con due esempi: riferiamo ad ogni persona i dati del suo reddito e riferiamo ad ogni ditta i dati dei suoi dipendenti.
 
 
 
==== La relazione "molti a molti" ====
 
La relazione molti a molti tra due tabelle si può realizzare ma in maniera non diretta, creando una tabella in grado associare con molteplici combinazioni le chiavi univoche di due tabelle; per fare un esempio pratico e capire l'utilizzo di questa relazione possiamo immaginare una tabella per memorizzare film e attori, ovviamente un film viene interpretato da più attori ed un attore nella sua carriera può aver partecipato a più film; creeremo quindi una tabella degli attori:
Incappiamo però nell'inconveniente già precedentemente analizzato della creazione di campi che saranno spesso vuoti o peggio ancora della non possibilità di inserire un quinto film altrettanto importante quanto i primi quattro inseriti.
 
=== L'integrità referenziale ===
Possiamo immaginare l'integrità referenziale come un insieme di regole che garantiscono l'integrità dei dati quando si hanno relazioni associate tra loro attraverso una chiave esterna: queste regole sevono per rendere valide le associazioni tra le tabelle e per eliminare gli errori di inserimento, cancellazione o modifica di dati collegati tra loro.
 
== Il linguaggio SQL ==
 
 
=== Premessa ===
 
La sigla SQL sta per Structured Query Language ovvero si tratta di un linguaggio strutturato per interrogare i database. In origine era chiamato SEQUEL (Structured English QUEry Language).
 
 
=== Definizione dei dati ===
 
 
=== Definizioni di schemi, tabelle, vincoli e primary key ===
 
 
=== Creazione database e tabelle ===
 
 
=== Interrogare un database: istruzione SELECT ===
 
La sintassi del comando <i>''SELECT</i>'' è definita in questo modo:
 
SELECT <i>''Espressione_su_Colonna</i>'' [[as] <i>''Nuovo_Nome_Colonna</i>'']
{, <i>''Espressione_su_Colonna</i>'' [[as] <i>''Nuovo_Nome Colonna</i>'']}
FROM <i>''Nome_Tabella</i>'' [[as] <i>''alias</i>'']
{, <i>''Nome_Tabella</i>'' [[as] <i>''alias</i>'']}
[WHERE <i>''Condizione</i>'']
 
==== Join ====
 
La sintassi di interrogazione prevista per implementare al suo interno le condizioni di <i>''join</i>'' è la seguente:
 
SELECT <i>''Espressione_su_Colonna</i>'' [[as] <i>''Nuovo_Nome_Colonna</i>'']
{, <i>''Espressione_su_Colonna</i>'' [[as] <i>''Nuovo_Nome Colonna</i>'']}
FROM <i>''Nome_Tabella</i>'' [[as] <i>''alias</i>'']
{, <i>''Tipo_di_Join</i>'' join <i>''Nome_Tabella</i>'' [[as] <i>''alias</i>''] on
<i>''Condizione_di_Join</i>''}
[WHERE <i>''Condizione</i>'']
 
==== Ordinamento ====
 
Durante un'interrogazione dei dati presenti nel nostro database, utilizzando la clasula <i>''Order by</i>'' riusciamo a stabilire dei particolari criteri di ordinamento:
 
SELECT <i>''Espressione_su_Colonna</i>'' [[as] <i>''Nuovo_Nome_Colonna</i>'']
{, <i>''Espressione_su_Colonna</i>'' [[as] <i>''Nuovo_Nome Colonna</i>'']}
FROM <i>''Nome_Tabella</i>'' [[as] <i>''alias</i>'']
{, <i>''Nome_Tabella</i>'' [[as] <i>''alias</i>'']}
[WHERE <i>''Condizione</i>'']
[ORDER BY <i>''Nome_Colonna</i>'' [asc|desc]
{, <i>''Nome_Colonna</i>'' [asc|desc]}]
 
==== Operatori aggregati ====
 
==== Interrogazioni con raggruppamento ====
 
==== Interrogazioni di tipo insiemistico ====
 
==== Interrogazioni nidificate ====
 
==== Sintassi completa del comando SELECT ====
 
Possiamo, ora, scrivere una sintassi più completa per l'interrogazione del nostro database tramite il comando <i>''SELECT</i>'':
 
SELECT <i>''Espressione_su_Colonna</i>'' [[as] <i>''Nuovo_Nome_Colonna</i>'']
{, <i>''Espressione_su_Colonna</i>'' [[as] <i>''Nuovo_Nome Colonna</i>'']}
FROM <i>''Nome_Tabella</i>'' [[as] <i>''alias</i>'']
{, <i>''Tipo_di_Join</i>'' join <i>''Nome_Tabella</i>'' [[as] <i>''alias</i>''] on
<i>''Condizione_di_Join</i>''}
[WHERE <i>''Condizione</i>'']
[ORDER BY <i>''Nome_Colonna</i>'' [asc|desc]
{, <i>''Nome_Colonna</i>'' [asc|desc]}]
[GROUP BY <i>''Nome_colonna</i>'']
[HAVING <i>''Condizione_su_colonne_aggregate</i>'']
 
=== Modifiche di schemi di tabelle: istruzione ALTER TABLE ===
 
 
=== Manipolazione dei dati: INSERT, DELETE, UPDATE ===
 
==== Inserimento righe ====
 
Il comando che permette di popolare il database è <I>INSERT</i>. La sua sintassi più utilizzata è la seguente:
 
INSERT INTO <i>''Nome_Tabella</i>'' [( <I>Lista_Colonne</i> )]
VALUES ( <i>''Lista_Valori</i>''
 
In alternativa si può anche usare:
 
INSERT INTO <i>''Nome_Tabella</i>'' [( <I>Lista_Colonne</i> )]
( <i>''Select_di_SQL</i>'' )
 
La quale permette di inserire nella tabella tutte quelle righe che sono il risultato del costrutto <i>''SELECT</i>''.
 
==== Eliminazione righe ====
 
Per eliminare righe da una tabella si usa il comando <I>DELETE</i>:
 
DELETE FROM <i>''Nome_Tabella</i>'' [WHERE <i>''Condizione</i>'']
 
==== Modificare le righe ====
 
Con il comando <i>''UPDATE</i>'' riusciamo a modificare i valori presenti nel database. La sintassi è la seguente:
 
UPDATE <i>''Nome_Tabella</i>''
SET <i>''Nome_Colonna</i>'' =
< <i>''Espressione</i>'' | <i>''Select_di_SQL</i>'' | null | default >
{, <i>''Nome_Colonna</i>'' =
< <i>''Espressione</i>'' | <i>''Select_di_SQL</i>'' | null | default >}
[WHERE <I>Condizione</i>]
 
 
=== Sicurezza: l'uso dei privilegi ===
 
== Manuali d'utilizzo dei software di gestione dei database ==
 
=== Microsoft Access (versioni 97 e superiori) ===
 
==== Le tabelle ====
 
==== Le query ====
 
==== Le maschere ====
 
==== I report ====
 
==== Le macro ====
 
==== I moduli ====
 
=== OpenOffice.org Base ===
 
=== MySQL ===
 
=== PostgreSQL ===
 
== Link correlati ==
34 907

contributi