La tabella è identificata da un nome e da un insieme di colonne, ciascuna avente un determinato tipo di dato e capacità di memorizzazione. Il nome della tabella deve essere univoco per il proprietario (schema), pertanto un utente non può possedere due tabelle con lo stesso nome, anche se queste hanno colonne differenti. È invece consentito che due o più utenti abbiano tabelle con lo stesso nome all'interno dello stesso database.
Il comando per la creazione di una tabella è CREATE TABLE, con moltissime opzioni. La sua forma più semplice prevede il nome della tabella e la definizione delle colonne.
Prendiamo ad esempio la tabella di "Contatti" in figura: sono elencate le colonne che la compongono e, sulla i rispettivi tipi di dato. Progettiamo la stessa tabella in Oracle.
Nel mondo dei database relazionali una tabella può rappresentare una "entità", ovvero un oggetto indivisibile, avente caratteristiche ben distinte (le colonne).
Con SQL* Plus in modalità grafica, colleghiamoci al database "ARCHIVIO" tramite l'utente "myself", creati entrambi nella lezione precedente. Ogni utente autorizzato a creare oggetti logici (tabelle, indici, ecc.) ne diventa l'unico proprietario e su di loro ha poteri assoluti. Procediamo quindi con la creazione della tabella "contatti".
SQL> CREATE TABLE contatti 2 ( IDContatto NUMBER (5,0), 3 Cognome VARCHAR2 (20), 4 Nome VARCHAR2 (20), 5 Indirizzo VARCHAR2 (40), 6 Citta VARCHAR2 (25), 7 Provincia CHAR (2), 8 Cap VARCHAR2 (5), 9 TelAbit VARCHAR2 (15), 10 TelCell VARCHAR2 (10), 11 EMail VARCHAR2 (25), 12 DataNascita DATE, 13 StatoCivile VARCHAR2 (10) 14 );
La tabella contatti è stata creata sotto lo schema myself. Le lettere maiuscole usate per i nomi di colonne non hanno alcuna importanza per Oracle, infatti anche le lettere in minuscolo sono automaticamente convertite in maiuscolo, ma le utilizziamo negli esempi per una migliore leggibilità. Proviamo a visualizzare la struttura della tabella contatti.
SQL> DESC contatti
La tabella contatti è formata da dodici colonne, ciascuna con il suo datatype. Nel comando CREATE TABLE
le colonne vengono elencate in successione, separate da virgole e racchiuse da parentesi tonde.
La scelta dell'ordine di successione è importante, perché dovrà essere rispettato nell'inserimento dei record.
I nomi delle tabelle e delle colonne possono essere lunghi al massimo 30 caratteri. Devono, inoltre, sempre iniziare con una lettera ma possono anche contenere numeri. Gli unici caratteri speciali consentiti nella scelta dei nomi sono il dollaro ($
), l'underscore (_
) e il cancelletto (#
). È buona norma utilizzare l'underscore per i nomi composti di colonna o di tabella.
Valori di default per le colonne
Ia fase di creazione di una tabella (CREATE TABLE
) o di modifica (ALTER TABLE
), possiamo specificare dei valori di default per una o più colonne. I valori predefinito sono assegnati a quelle colonne per le quali non viene specificato un valore in fase di inserimento (INSERT
).
La dichiarazione di questi valori è posta alla destra del datatype della colonna e essi devono naturalmente essere compatibili con il datatype stesso (ad una colonna di tipo VARCHAR2
non possiamo dare un valore di default di tipo NUMBER
). I valori di default possono anche fare riferimento a funzioni speciali di Oracle, come SYSDATE
e USER
. Facciamo ancora un esempio.
Esempio di output su console
SQL> CREATE TABLE impiegati 2 ( ID_Impiegato NUMBER (5,0), 3 Nominativo VARCHAR2 (40), 4 Data_Assunz DATE DEFAULT SYSDATE, 5 Paese_Residenza VARCHAR2 (40) DEFAULT 'ROMA', 6 UtenteDB VARCHAR2(50) DEFAULT USER 7 );
Agli ultimi tre campi di questa tabella sono assegnati i valori di default. Se, nell'inserimento di un nuovo record, omettessimo il campo Data_Assunz
questo prenderebbe il valore della data e dell'ora attuali. Il campo Paese_Residenza
, se non fosse inserito, prenderebbe la stringa 'ROMA'
mentre UtenteDB
il nome dell'utente che effettua l'inserimento.
Nota: L'utente che crea una tabella ne assume la proprietà, ma la stessa tabella può essere concessa per gli inserimenti (e per altre operazioni) anche ad altri utenti del database.