FirebirdSQL logo
 DOMAININDEX 

contrainte clés unique (UNIQUE)

La contrainte UNIQUE de clé unique spécifie une exigence d’unicité pour les valeurs de la colonne.Une table peut contenir un nombre quelconque de clés uniques.

Comme une clé primaire, la contrainte d’unicité peut être définie sur plus d’une colonne.Dans ce cas, vous devez la définir comme une contrainte de niveau table.

NULL dans les clés uniques

Selon la norme SQL-99, Firebird autorise une ou plusieurs valeurs NULL dans une colonne à laquelle est appliquée une contrainte UNIQUE.Cela vous permet de définir une contrainte UNIQUE sur des colonnes qui n’ont pas de contrainte NOT NULL.

Pour les clés uniques contenant plusieurs colonnes, la logique est un peu plus compliquée :

  • Les entrées multiples avec une valeur NULL dans toutes les colonnes de la clé sont autorisées ;

  • Plusieurs enregistrements avec différentes combinaisons de valeurs nulles et non nulles dans les clés sont autorisés ;

  • Allowed est un ensemble d’enregistrements dans lequel l’une des colonnes de la clé unique contient des valeurs NULL mais les autres colonnes sont remplies de valeurs et ces valeurs sont différentes dans au moins l’une d’entre elles ;

  • Les enregistrements multiples sont autorisés, dans lesquels l’une des colonnes de la clé unique contient une valeur NULL et les autres colonnes sont remplies de valeurs, et ces valeurs ont une correspondance dans au moins l’une d’entre elles.

Cela peut être résumé par l’exemple suivant :

RECREATE TABLE t( x int, y int, z int, unique(x,y,z));
INSERT INTO t values( NULL, 1, 1 );
INSERT INTO t values( NULL, NULL, 1 );
INSERT INTO t values( NULL, NULL, NULL );
INSERT INTO t values( NULL, NULL, NULL ); -- Autorisé
INSERT INTO t values( NULL, NULL, 1 ); -- Interdit