Daniele Merli
a- a+

Creazione Tavole

Dopo aver visto le metodologie per eseguire interrogazionisulle tavole diamo un occhiata finalmente al modo dicrearle.
Penso che a questo punto sia abbastanza chiaro che cosa siintende per tavola.
La creazione avviene con la parola CREATE usata nel seguentemodo:

CREATE TABLE (CAMPO1, CAMPO2, ....);

Le specifiche tra parentesi sono in pratica i nomi dei campiche si vogoliono avere nella tavola seguiti dalla specificadel tipo che tra poco vedremo.
I nomi dei campinon possono essere parole riservate di SQL.
Prima di vedere la tipologia dei campi facciamo un esempio.

CREATE TABLE (CAMPO1 CHAR(20), CAMPO2 NUMBER(5));

Vediamo i tipi validi.
Voglio premettere che la seguente tipologia e' quella diInformix SQL e che quindi in altri prodotti potrebbe esserepiu' ridotta o piu' espansa.
In ogni caso consiglio la consultazione del manuale delprodotto specifico che utilizzate.

TIPO NOTE
----------------------------------------------------------------
CHAR(n) Una stringa di caratteri lunga n.
n deve essere >= 1 e <= 32.767
SMALLINT Un numero tra -32.767 e +32.767
INTEGER Un numero tra -2.147.483.647 e +2.147.483.647
DECIMAL[(m[,n])] Un numero in virgola mobile con mvalori
significativi (m <= 32) e con n valori 
decimali.
SMALLFLOAT Un numero in virgola mobile corrispondente al
tipo float del linguaggio C
FLOAT Un numero in virgola mobile corrispondente al
tipo double del linguaggio C 
MONEY[(m[,n])] Un numero decimale che indica una cifradi
soldi visualizzata con il simbolo $.
SERIAL[(n)] Un numero sequenziale assegnato 
automaticamente da SQL.
DATE Una data 

In alcuni casi si desidera che un determinato campo nonpossa assumere il valore NULL.
Se si desidera che SQL richieda in modo obbligatoriol'inserimento di un campo e' possibile specificare aseguito del tipo la parola NOT NULL.
Nel caso in cui avviene questa specifica SQL segnalera'un messaggio d'errore tutte le volte che si cerchera'di omettere l'inserimento.

Un esempio:

CREATE TABLE TAVOLA (IDNUM CHAR(5) NOT NULL,NOME CHAR(20),INDIR CHAR(20),IMPORTO INTEGER );

L' assegnazione al campo IDNUM e' obbligatorio.
Se si desidera che il valore di una determinata colonna siaunico in tutta la tabella e' possibile specificare laword UNIQUE.
Fate attenzione che UNIQUE puo' essere specificato solocon quei campi che sono anche stati definiti come NOTNULL.
Riprendendo l'esempio precedente:

CREATE TABLE TAVOLA (IDNUM CHAR(5) NOT NULL UNIQUE,...... .........); 

Nel caso in cui i campi da definire come UNIQUE sianopiu' di uno e' possibile eseguire la specifica anchein fondo alla dichiarazione.
Prendiamo il seguente esempio:

CREATE TABLE TAVOLA (IDNUM CHAR(5) NOT NULL UNIQUE,DITTA CHAR(20) NOT NULL UNIQUE,PIVA CHAR(11) NOT NULL UNIQUE);

potrebbe essere definita anche come:

CREATE TABLE TAVOLA (IDNUM CHAR(5) NOT NULL,DITTA CHAR(20) NOT NULL,PIVA CHAR(11) NOT NULL,UNIQUE (IDNUM,DITTA,PIVA));

E' possibile eliminare una tavola mediante

DROP TABLE NOMTAV;

Quando viene creata una tavola e successivamente si esegue uninserimento i dati vengono accodati a quelli gia'presenti senza che venga dato un preciso ordine.
Se i records sono molti la ricerca e l'accesso ai datipuo' diventare estremamente lento.
Per sveltire le operazioni di interrogazione possono esserecreati e utilizzati gli indici.
Se si richiede la creazione di un indice SQL esegue lacopia, questa volta ordinandoli, dei dati in un altro file(indice).
La copia dei dati non e' completa ma soltanto dei campio delle parti di questi specificati come chiavi per laricerca.

A questi vengono associati dei puntatori al file di dati inmodo tale che se si richiede una ricerca SQL utilizza ilnuovo file e mediante questi rintraccia l'ubicazioneprecisa del record nel file principale.
Il trattamento degli indici avviene mediante un algoritmo diB-Tree di cui non discuteremo in questo testo. SQL e' ingrado di accorgersi automaticamente dell'esistenza di undeterminato indice e quindi di utilizzare questo per ilrintracciamento dei dati al posto della ricerca sequenzialenel file .DAT.
Come avevamo detto precedentemente l'uso degli indici daparte di SQL puo' essere completamente trasparenteall'utente.
Molti prodotti come INFORMIX SQL richiedono, durante laprocedura interattiva di creazione delle tavole, se i varicampi devono possedere un indice associato e se questopuo' contenere chiavi dupplicate. 
La creazione da interprete di un indice puo' avveniremediante:

CREATE INDEX NOMIND ON TAVOLA(CAMPO1, ....);

Se disponessimo di una tavola TAVOLA1 con i seguenticampi

NOME, INDIRIZZO, PIVA, IMPORTO

potremmo, ad esempio, creare un indice utilizzando comechiave NOME+PIVA.

CREATE INDEX NEWINDEX ON TAVOLA1(NOME, PIVA);

Se avessimo scelto di creare un indice in modo che in questonon possano risultare dupplicazioni avremmo dovuto utilizzarela parola SQL UNIQUE nel seguente modo:

CREATE UNIQUE INDEX NEWINDEX ON TAVOLA1(NOME, PIVA);

L'eliminazione di un indice si ottiene mediante

DROP INDEX NOMIND;