Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Definizione dei dati
PrecedenteChiamare funzioniValori di DefaultSuccessivo

5. Definizione dei dati

Questo capitolo tratta la creazione delle strutture del database che andranno a contenere i dati. In un database relazionale, i dati grezzi sono memorizzati in tabelle. La maggior parte di questo capitolo è dedicata a illustrare come le tabelle siano create e modificate e quali caratteristiche siano a disposizione dell'amministratore per il controllo dei dati. Successivamente, verrà affrontato come organizzare le tabelle in schemi, e come assegnare privilegi alle tabelle. Infine, verranno brevemente esposte le altre funzionalità riguardanti la memorizzazione dei dati, come ereditarietà, viste, funzioni e trigger.

5.1. Fondamenti sulle Tabelle

Una tabella, in un database relazionale, è molto simile a una tabella sulla carta: essa consiste di righe e colonne. Il numero e l'ordine delle colonne è fisso, ed ogni colonna ha un nome. Il numero di righe è variabile -- riflette la quantità di dati immagazzinati in un dato momento. SQL non dà alcuna garanzia circa l'ordine delle righe in una tabella. Quando una tabella viene letta, le righe appariranno in ordine non specificato, a meno che un preciso ordinamento non sia esplicitamente richiesto. Questo argomento è trattato in Capitolo 7, Query. Inoltre, SQL non assegna identificatori unici alle righe, così è possibile avere diverse righe completamente uguali in una tabella. Questa è una conseguenza del modello matematico sottostante ad SQL, ma di solito non rappresenta il comportamento desiderato. Questo argomento verrà comunque affrontato più avanti nel corso di questo capitolo.

Ogni colonna ha un tipo di dato. Il tipo di dato regola l'insieme di possibili valori che può essere assegnato a una colonna e fornisce semantica ai dati immagazzinati nella colonna stessa (in modo da poter essere utilizzati per calcoli computazionali). Per esempio, una colonna dichiarata come tipo numerico non accetterà stringhe di testo arbitrarie, e i dati contenuti in quella colonna potranno essere usati per calcoli matematici. Al contrario, una colonna dichiarata per contenere stringhe di caratteri, accetterà quasi ogni tipo di dato ma non si presterà a calcoli matematici, benché altre operazioni, come la concatenazione di stringhe, siano possibili.

PostgreSQL™ include un insieme rilevante di tipi di dato che risultano adatti per molte applicazioni. Gli utenti possono inoltre definire i loro propri tipi di dato. Molti dei tipi di dato nativi hanno nomi e semantica ovvia, perciò si rimanda al Capitolo 8, Tipi di Dato per una spiegazione dettagliata. Alcuni dei tipi di dato usati frequentemente sono integer per i numeri interi, numeric per i numeri a virgola mobile, text per stringhe di carattere, date per le date, time per orari e timestamp per valori che contengono sia data che orario.

Per creare una tabella, è possibile utilizzare il comando opportunamente chiamato CREATE TABLE(7). All'interno di questo comando l'utente ha la possibilità di specificare, nella forma minima, un nome per la nuova tabella, i nomi delle colonne e il tipo di dato per ogni colonna. Per esempio:

CREATE TABLE my_first_table (
    first_column text,
    second_column integer
);

Questo comando crea una tabella chiamata my_first_table con due colonne. La prima colonna si chiama first_column e ha un tipo di dato text; la seconda colonna si chiama second_column ed è di tipo integer. I nomi di tabella e colonna seguono la sintassi per gli identificatori, descritta nella Sezione 4.1.1, «Identificatori e parole chiave». Anche i nomi dei tipi sono di solito identificatori, ma esistono delle eccezioni. Si noti che la lista di colonne è separata da virgole e racchiusa all'interno di parentesi.

L'esempio precedente risulta molto forzato. In condizioni normali, è buona norma assegnare nomi a tabelle e colonne in modo significativo. Un esempio più realistico è rappresentato da:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

(Il tipo numeric può contenere componenti frazionarie, tipico di somme in valuta, ad esempio).

[Suggerimento]

Suggerimento

In fase di creazione di tabelle collegate tra loro è buona norma scegliere un modello coerente per i nomi di tabelle e colonne. Ad esempio, è possibile scegliere se utilizzare nomi di tabella al singolare oppure al plurale, entrambe sostenute da due correnti di pensiero contrapposte.

Esiste un limite sul numero di colonne che una tabella può contenere. A seconda dei tipi di colonna, il limite è compreso tra 250 e 1600. Comunque, definire una tabella con un numero di colonne anche minimamente vicino al limite, è molto inusuale e spesso è sintomo di un design discutibile.

Una tabella non più necessaria può essere rimossa con il comando DROP TABLE(7) . Per esempio:

DROP TABLE my_first_table;
DROP TABLE products;

Il tentativo di rimozione di una tabella non esistente è considerato un errore. Ciò nonostante, nei file di script SQL è molto comune eliminare in modo incondizionato ogni tabella prima di crearla, ignorando qualsiasi messaggio di errore. In questo modo, lo script è in grado di funzionare a prescindere dall'esistenza della tabella (è possibile utilizzare la variante DROP TABLE IF EXISTS per evitare i messaggi di errore, anche se non contemplata dallo standard SQL).

Per la modifica di tabelle esistenti, fare riferimento alla Sezione 5.5, «Modifica di Tabelle», descritta più avanti in questo capitolo.

Gli strumenti discussi fino a questo punto, permettono di creare tabelle completamente funzionanti. Il resto di questo capitolo riguarda funzionalità aggiuntive alla definizione di tabelle per garantire l'integrità dei dati, la sicurezza o per semplice comodità. L'utente ansioso di riempire le proprie tabelle con dati può saltare direttamente al Capitolo 6, Manipolazione dei dati e leggere il resto di questo capitolo in un secondo momento.

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Definizione dei dati
PrecedenteChiamare funzioniValori di DefaultSuccessivo