Construire une base de données relationnelle

Partie 4
Chapitre 3 sur 6
Partie 4 – Organiser et schématiser les données avec SQL

Types de données

Comme nous l’avons observé lors de la création de table, il faut non seulement créer la table mais aussi le squelette dont les noms des colonnes, leurs types et leurs contraintes avant d’insérer des données. Il faut donc construire la classe avant d’y insérer des objets.

La mise en place d’une structure normalisée est essentielle, dès lors qu’on intègre de nouvelles données dans la table. Toutes les valeurs d’un attribut (variable ou colonne) ont le même type, le même format. Les objets ‘voiture’ vont avoir plusieurs attributs mais chaque attribut a ses propres caractéristiques. L’attribut « puissance » va être du même type pour chaque voiture, un nombre de cv, un entier. L’attribut « couleur » va être du même type pour chaque voiture : ‘bleue’, ‘rouge’, ‘verte’, ‘noire’, ‘blanche’. C’est une chaine de caractère et cette couleur ne peut pas être désignée par des chiffres ! Quoique… Si… Ok, mais vous m’avez compris.

La documentation PostgreSQL offre un tableau récapitulant tous les types de données natifs disponibles.

 

Tableau 1 : Types de données

Nom Alias Description
bigint int8 Entier signé sur huit octets
bigserial serial8 Entier sur huit octets à incrémentation automatique
bit [ (n) ] Suite de bits de longueur fixe
bit varying [ (n) ] varbit [ (n) ] Suite de bits de longueur variable
boolean bool Booléen (Vrai/Faux)
box Boîte rectangulaire dans le plan
bytea Donnée binaire (« tableau d’octets »)
character [ (n) ] char [ (n) ] Chaîne de caractères de longueur fixe
character varying [ (n) ] varchar [ (n) ] Chaîne de caractères de longueur variable
cidr Adresse réseau IPv4 ou IPv6
circle Cercle dans le plan
date Date du calendrier (année, mois, jour)
double precision float8 Nombre à virgule flottante de double précision (sur huit octets)
inet Adresse d’ordinateur IPv4 ou IPv6
integer int, int4 Entier signé sur quatre octets
interval [ champs ] [ (p) ] Intervalle de temps
json Données texte JSON
jsonb Données binaires JSON, décomposées
line Droite (infinie) dans le plan
lseg Segment de droite dans le plan
macaddr Adresse MAC (pour Media Access Control)
macaddr8 Adresse MAC (pour Media Access Control) (format EUI-64)
money Montant monétaire
numeric [ (ps) ] decimal [ (ps) ] Nombre exact dont la précision peut être spécifiée
path Chemin géométrique dans le plan
pg_lsn Séquence numérique de journal (Log Sequence Number) de PostgreSQL
point Point géométrique dans le plan
polygon Chemin géométrique fermé dans le plan
real float4 Nombre à virgule flottante de simple précision (sur quatre octets)
smallint int2 Entier signé sur deux octets
smallserial serial2 Entier sur deux octets à incrémentation automatique
serial serial4 Entier sur quatre octets à incrémentation automatique
text Chaîne de caractères de longueur variable
time [ (p) ] [ without time zone ] Heure du jour (sans fuseau horaire)
time [ (p) ] with time zone timetz Heure du jour, avec fuseau horaire
timestamp [ (p) ] [ without time zone ] Date et heure (sans fuseau horaire)
timestamp [ (p) with time zone timestamptz Date et heure, avec fuseau horaire
tsquery requête pour la recherche plein texte
tsvector document pour la recherche plein texte
txid_snapshot image de l’identifiant de transaction au niveau utilisateur
uuid identifiant unique universel
xml données XML

Source : https://docs.postgresql.fr/12/datatype.html

 

NB : La colonne ‘Nom’ est le nom pour l’utilisateur, ‘Alias’ est le nom utilisé en interne par PostgreSQL.

NB : Notez également que cette liste est propre au système de gestion de base de données PostgreSQL, bien que la plupart des types ont une norme SQL, il se peut que les types et leur attribution dans une table soient différents d’un système à un autre.