Syntaxe
Le langage DDL permet de spécifier qu'un ensemble d'attributs est clé primaire (PRIMARY KEY), qu'une séquence d'attributs est clé étrangère (FOREIGN KEY/REFERENCES). Il permet aussi de contraindre le domaine d'un attribut (CHECK) ou de vérifier qu'un ensemble d'attributs ne contient pas de valeur manquante (NOT NULL). Enfin, il permet, à la manière de PRIMARY KEY, de préciser qu'un ensemble d'attributs ne contienne pas de doublons (UNIQUE) ; à la différence de PRIMARY KEY, il est possible de spécifier plusieurs UNIQUE sur la même table.
Exemple :
La requête DDL suivante crée la table Coordonnées.
CREATE TABLE coordonnees(
salle VARCHAR(30) PRIMARY KEY,
adresse VARCHAR(255) UNIQUE NOT NULL,
telephone VARCHAR(10)
);
L'attribut salle est la clé primaire donc annoté par PRIMARY KEY. Les contraintes UNIQUE et NOT NULL sur adresse précisent que cet attribut est une clé candidate.
Exemple :
Le deuxième exemple permet de créer la table Film. Notons que nous allons subdivisier la table originale présentée précédemment en trois tables Film, Acteur et Jouedans.
CREATE TABLE film(
idfilm INTEGER(4) PRIMARY KEY,
titre VARCHAR(255) NOT NULL,
directeur VARCHAR(60) NOT NULL,
annee YEAR(4) CHECK(annee > 1900),
titre_vo VARCHAR(255),
CONSTRAINT film_unique_titre_directeur UNIQUE (titre, directeur)
);
CREATE TABLE acteur(
idacteur INTEGER(4) PRIMARY KEY,
nom VARCHAR(255),
prenom VARCHAR(60),
CONSTRAINT acteur_unique_nom_prenom UNIQUE (nom, prenom)
);
CREATE TABLE jouedans(
idacteur INTEGER(4) REFERENCES acteur(idacteur),
idfilm INTEGER(4) REFERENCES film(idfilm),
PRIMARY KEY(idacteur, idfilm)
);
La contrainte référentielle précise que les attributs idacteur et idfilm de la table Jouedans sont des clés étrangères des attributs et tables indiquées dans la clause REFERENCES. Les contraintes NOT NULL sur les attributs titre et directeur indiquent que ces valeurs doivent nécessairement être renseignées. En revanche, le titre_vo peut rester vide (il aura la valeur NULL). Notons que des attributs PRIMARY KEY sont également NOT NULL, en revanche des attributs UNIQUE peuvent contenir de multiples valeurs nulles, mais seulement une valeur non nulle donnée.
La contrainte de domaine sur annee limite aux valeurs supérieures à 1900. La contrainte de table PRIMARY KEY(equipe, no) sur la table Jouedans définit la clé primaire. Enfin, les contraintes de table nommées acteur_unique_nom_prenom et film_unique_titre_directeur précisent d'autres clés candidates.