SQL (Esse-Qu-Elle) o (Se-Qu-El) da a disposizione varie tipi di famiglie.
Caratteri
Il dominio character permette di rappresentare singoli caratteri oppure stringhe.
La lunghezza delle stringhe può essere fissa o variabile. Per lunghezza variabile si intende la lunghezza massima. Per ogni schema si può definire la famiglia di caratteri di default.
La sintassi:
character [ varying ] [ ( lunghezza ) ]
[ character set NomeFamigliaCaratteri ]
Es: Se vogliamo definire una stringa di 20 caratteri e con un set di caratteri appartenente alla famiglia “Greek” dobbiamo fare.
character (20) character set Greek
Es2: Se vogliamo invece definire una stringa di massimo 100 caratteri e con un set di caratteri appartenente alla famiglia “Latin” dobbiamo fare.
character varying (100) character set Latin.
Inoltre sono implementate in SQL delle abbreviazioni per questi domini.
- char = character
- varchar = character varying
Tipi Numerici Esatti
Questa famiglia contiene i domini che permettono di rappresentare i valori esatti, interi o con una parte decimale di lunghezza prefissata. I tipi numerici esatti messi a disposizione da SQL sono:
- numeric [ ( Precisione [ , Scala ] ) ]
- decimal [ ( Precisione [ , Scala ] ) ]
- integer
- smallint
Numeric e Decimal
Rappresentano numeri in base decimale. Dove Precisione specifica il numero di cifre che compone il valore e Scala la posizione della virgola. La differenza tra i domini numeric e decimal consiste nel fatto che la precisione per il dominio numeric rappresenta un valore esatto, mentre per il dominio decimal costituisce un requisito minimo.
Nel caso non sia importante la rappresentazione frazionaria diventa possibile utilizare integer e smallint.
Per questi domini non esiste un vincolo sulla rappresentazione ed essi sono generalmente basati sulla rappresentazione binaria interna del calcolatore.
Tipi numerici approsimati
Per la rappresentazione di valori reali approsimati (utili per esempio per la rappresentazione di grandezze fisiche), SQL fornisce i seguenti tipi:
- float [ ( Precisione ) ]
- real
- double precision
ES: 1.6E12
A float può essere assegnata esplicitamente una precision, interne al numero di cifre della mantissa.
Per gli altri due la precisione dipende dal sistema di calcolo, ma la precision di double precision è ≥ a real (normalmente doppia).
Istanti Temporali
Questa famiglia di domini sono stati introdotti in SQL-2 per descrivere informazioni temporali e permette di rappresentare istanti di tempo in tre diverse forme:
- date
- time [ ( Precisione ) ] [ whit time zone ]
- timestamp [ ( Precisione ) ] [ whit time zone ]
Sono strutturati nelle seguenti maniere.
La forma date accetta il modello americano year-month-day con la regola “(yyyy:mm:dd)“
La forma time accetta il modello hour-minute-second “(hh:mm:ss)”
Di default Precision è 0(s) per time e di 6 per timestamp (μs) metre per “whit time zone” fa riferimento all’ora di Greenwich, questo apre la possibilità di accedere ad altri 2 campi, timezone_hour e timezone_minute. la formula per completo agli standard UTC è 01:03:04+1:00. Timestamp non è nient’altro che date+time.
Intervalli Temporali
Questa famiglia di domini permette di rappresentare intervalli di tempo, come per esempio la durata di un’evento. La sintassi è:
interval PrimaUnitàDiTempo [ to UltimaUnitàDiTempo ]
Specifica un intervallo di tempo cioè un valore relativo utilizzabile per incrementare/decrementare un valore date, time o timestamp.
Es: interval years (5) to month
Permette di rappresentare intervalli temporali fino a 99.999 anni e 11 mesi.
Es: interval day(4) to second (6)
Permette di rappresentare intervalli temporali fino a 9.999 giorni 23 ore, 59 minuti e 59,999999 secondi, con una precisione al milionesimo di secondi.
Definizione di nuovi Domini
E’ possibile definire nuovi domini a partire da quelli elementari alternativamente è possibile dichiarare il dominio e usarlo (peggiora la leggibilità)
create domain NomeDominio as TipoDato [ ValoreDiDefault ] [ Vincolo ]
Es: create domain copie_vendute as smallint default 0