Contraintes de clé étrangère autorisant les valeurs nulles
Dans la conception de bases de données, il est souvent nécessaire d'utiliser des clés étrangères pour établir des relations entre les tables afin de garantir l'intégrité référentielle. Cependant, dans certains cas, il peut être nécessaire d'assouplir les contraintes en permettant à certaines colonnes de clé étrangère d'être nulles.
Question :
Les colonnes de table avec des clés étrangères dans la base de données peuvent-elles être vides ?
Réponse :
Oui, les colonnes de clé étrangère peuvent contenir des valeurs nulles. Cela rend la modélisation des données plus flexible et peut être utilisée dans des scénarios dans lesquels l'intégrité référentielle est appliquée uniquement lorsqu'il n'y a que des données non nulles dans la colonne de clé étrangère.
Exemple MySQL :
Considérons une base de données MySQL avec les tables suivantes :
<code class="language-sql">CREATE DATABASE t; USE t; CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB; CREATE TABLE child ( id INT NULL, parent_id INT NULL, FOREIGN KEY (parent_id) REFERENCES parent(id) ) ENGINE=INNODB;</code>
Dans cet exemple, la colonne parent_id de la table enfant est définie comme nullable. Cela signifie que la table enfant peut avoir des lignes avec une valeur NULL dans la colonne parent_id.
Appliquer la contrainte uniquement si la valeur n'est pas vide :
Pour appliquer l'intégrité référentielle uniquement lorsque la valeur de la clé étrangère n'est pas nulle, définissez la contrainte de clé étrangère à l'aide de la clause ON DELETE SET NULL ou ON UPDATE SET NULL. Par exemple, l'instruction suivante applique une contrainte de clé étrangère uniquement si la valeur de la clé étrangère n'est pas nulle :
<code class="language-sql">ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL ON UPDATE SET NULL;</code>
Cette configuration permet d'insérer des valeurs nulles dans la colonne parent_id, mais toute mise à jour ou suppression ultérieure dans la table parent sera répercutée sur la table enfant, ce qui entraînera la définition de la valeur parent_id correspondante dans la table enfant sur NULL.
Conclusion :
En permettant aux colonnes de clé étrangère d'être nulles et en utilisant la clause ON DELETE SET NULL ou ON UPDATE SET NULL, les administrateurs de bases de données peuvent établir des relations entre les tables tout en offrant une flexibilité dans la gestion des données. Cela garantit l'intégrité référentielle tout en permettant une utilisation dans des situations où une référence spécifique peut ne pas être immédiatement disponible ou a été intentionnellement laissée vide.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!