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