Creare tabelle

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.

Figura 1. Tabella “Contatti” creata con Microsoft Access

Tabella "Contatti" creata con Microsoft Access

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
Risultato della query

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.

Figura 2. Nomi composti

Nomi composti

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 tipoVARCHAR2 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.

Both comments and pings are currently closed.

Comments are closed.