FirebirdSQL logo
 DOMAININDEX 
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

contrainte de clé étrangère (FOREIGN KEY)

La contrainte de clé étrangère garantit que la ou les colonnes membres ne peuvent contenir que des valeurs qui existent dans la ou les colonnes spécifiées de la table principale.Ces colonnes de référence sont souvent appelées colonnes de destination.Ils doivent être la clé primaire ou une clé unique dans la table de destination.Ils peuvent ne pas avoir de contrainte NOT NULL` s’ils font partie de la contrainte de clé unique.

Les colonnes de clés externes ne nécessitent pas de contrainte `NOT NULL'.

Au niveau de la colonne, la contrainte de clé étrangère est définie en utilisant le mot-clé REFERENCES.

... ,
ARTIFACT_ID INTEGER REFERENCES COLLECTION (ARTIFACT_ID),

Dans cet exemple, la colonne ARTIFACT_ID fait référence à une colonne du même nom dans la table COLLECTION.

Une clé étrangère sur une ou plusieurs colonnes peut être définie au niveau de la table.Les clés étrangères sur plusieurs colonnes ne peuvent être définies qu’au niveau de la table.

La syntaxe pour définir une clé étrangère au niveau de la table est légèrement différente.Après avoir défini toutes les colonnes, avec leurs contraintes de niveau colonne, vous pouvez définir une contrainte de clé étrangère de niveau table nommée en utilisant les mots-clés FOREIGN KEY et les noms des colonnes pour lesquelles elle s’applique :

... ,
CONSTRAINT FK_ARTSOURCE FOREIGN KEY(DEALER_ID, COUNTRY)
  REFERENCES DEALER (DEALER_ID, COUNTRY),

Notez que les noms des colonnes dans la table cible (maître) peuvent être différents de ceux de la clé externe.

Note

Si aucune colonne cible n’est spécifiée, la clé étrangère fait automatiquement référence aux colonnes de la clé primaire de la table cible.