FirebirdSQL logo
 DOMAININDEX 
Contraintes USING

La condition USING permet un nom défini par l’utilisateur pour l’index généré automatiquement pour la contrainte, et définit optionnellement si l’index sera en ordre ascendant (par défaut) ou descendant.

Clé primaire (PRIMARY KEY)

La contrainte de clé primaire PRIMARY KEY est construite sur un champ avec une contrainte NOT NULL donnée et exige que les valeurs des colonnes soient uniques.Une table ne peut avoir qu’une seule clé primaire.

  • Une clé primaire à une seule colonne peut être définie au niveau de la colonne ou de la table.

  • Une clé primaire pour plusieurs colonnes ne peut être définie qu’au niveau de la table.

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