PostgreSQLLa base de données la plus sophistiquée au monde.

5. Définition des données

Ce chapitre couvre la création des structures de données qui contiendront les données. Dans une base relationnelle, les données brutes sont stockées dans des tables. Du coup, une grande partie de ce chapitre sera consacrée à l'explication de la création et de la modification des tables et des fonctions disponibles pour contrôler les données stockées dans les tables. Ensuite, nous discuterons de l'organisation des tables dans les schémas, et de l'attribution de droits aux tables. Enfin, nous verrons brièvement d'autres fonctionnalités, tel que l'héritage, les vues, les fonctions et les déclencheurs.

5.1. Bases sur les tables

Une table d'une base relationnelle ressemble beaucoup à un tableau sur papier : elle est constituée de lignes et de colonnes. Le nombre et l'ordre des colonnes sont fixés et chaque colonne a un nom. Le nombre de lignes est variable -- il représente la quantité de données stockées à un moment donné. SQL n'apporte aucune garantie sur l'ordre des lignes dans une table. Quand une table est lue, les lignes apparaîtront dans un ordre aléatoire sauf si un tri est demandé explicitement. Ceci est couvert dans le Chapitre 7, Requêtes. De plus, SQL n'attribue pas d'identifieur unique aux lignes. Du coup, il est possible d'avoir plusieurs lignes complètement identiques dans une table. Ceci est une conséquence du modèle mathématique sur lequel repose SQL mais n'est habituellement pas désiré. Plus tard dans ce chapitre, nous verrons comment traiter ce problème.

Chaque colonne a un type de donnée. Ce type de donnée restreint la série de valeurs possibles pouvant être attribuées à une colonne et attribue une sémantique à la donnée stockée dans la colonne pour qu'elle puisse être utilisée pour des calculs. Par exemple, une colonne déclarée comme étant d'un type numérique n'acceptera pas une chaîne arbitraire de texte, et les données stockées dans une telle colonne peuvent être utilisées dans des calculs mathématiques. Par opposition, une colonne déclarée comme étant de type chaîne de caractères acceptera pratiquement n'importe quel type de donnée mais ne se prêtera pas à des calculs mathématiques bien que d'autres opérations tel que la concaténation des chaînes soient disponibles.

PostgreSQL™ inclut une série conséquente de types de données intégrés qui correspondent à plusieurs applications. Les utilisateurs peuvent aussi définir leurs propres types de données. La plupart des types de données intégrés ont des noms et des sémantiques évidents alors nous reportons une explication détaillée au Chapitre 8, Types de données. Quelques-uns des types les plus utilisés sont integer pour les entiers, numeric pour les nombres pouvant être fractionnels, text pour les chaînes de caractères, date pour les dates, time pour les valeurs de type heure et timestamp pour les valeurs contenant une date et une heure.

Pour créer une table, il faut utiliser la commande bien nommée CREATE TABLE. Dans cette commande, vous devez spécifier au moins le nom de la nouvelle table, les noms des colonnes et le type de données pour chacune des colonnes. Par exemple :

CREATE TABLE ma_premiere_table (
    premiere_colonne text,
    deuxieme_colonne integer
);

Ceci crée une table nommée ma_premiere_table avec deux colonnes. La première colonne est nommée premiere_colonne et a un type de données text ; la seconde colonne porte le nom deuxieme_colonne et le type integer. Les noms de table et colonne suivent la syntaxe des identifieurs expliquée dans la Section 4.1.1, « Identifieurs et mots clés ». Les noms des types sont souvent aussi des identifieurs mais il existe des exceptions. Notez que la liste des colonnes est séparée par des virgules et entourée par des parenthèses.

Bien sûr, l'exemple précédant est un peu tiré par les cheveux. Normalement, on donne aux tables et aux colonnes des noms indiquant quels types de données ils stockent. Alors, voyons un exemple plus réaliste :

CREATE TABLE produits (
    no_produit integer,
    nom text,
    prix numeric
);

Le type numeric peut stocker des composants fractionnels par exemple des montants.

[Astuce]

Astuce

Quand vous créez des tables liées entre elles, il est prudent de choisir des règles de nommage pour les tables et les colonnes. Par exemple, il peut y avoir le choix d'utiliser des noms au pluriel ou au singulier pour les noms de table, chaque choix ayant les faveurs d'un théoricien ou d'un autre.

Il y a une limite sur le nombre de colonnes qu'une table peut contenir. Suivant le type de colonne, ce nombre oscille entre 250 et 1600. Par contre, définir une table avec un nombre de colonnes proche de ceux-ci est très inhabituel et est souvent la preuve d'une conception douteuse.

Si vous n'avez plus besoin d'une table, vous pouvez la retirer en utilisant la commande DROP TABLE. Par exemple :

DROP TABLE ma_premiere_table;
DROP TABLE produits;

Tenter de supprimer une table qui n'existe pas est une erreur. Malgré cela, il est habituel dans des fichiers de scripts SQL d'essayer de supprimer chaque table avant de la créer, tout en ignorant les messages d'erreur.

Si vous avez besoin de modifier une table qui existe déjà, regardez la Section 5.5, « Modification des tables » plus loin dans ce chapitre.

Avec les outils dont nous avons déjà discuté, vous pouvez créer des tables fonctionnelles. Le reste de ce chapitre est consacré à l'ajout de fonctionnalités, à la définition de tables pour garantir l'intégrité des données, la sécurité ou la facilité. Si vous êtes impatients de remplir vos tables avec des données, vous pouvez sauter au Chapitre 6, Manipulation de données et lire le reste de ce chapitre plus tard.