Clés étrangères

Quelqu'un peut-il s'il vous plaît, laissez-moi savoir la meilleure façon de supprimer une table référencée par une key étrangère.

Merci, Chris

L'objective visé est-il d'orphelins ces loggings et de ne plus jamais utiliser la key étrangère? Si oui, la méthode mentionnée précédemment à propos de la désactivation de la key est correcte, sinon vous pouvez supprimer les loggings référençant la table que vous voulez supprimer en premier (ou mettre à jour le pour pointer vers un logging plus approprié ou NULL si cela est logique). Cas). Il me semble que vous venez d'une direction différente de celle des autres, êtes-vous sûr que la key étrangère est inutile, et si oui, pourquoi ne pas l'enlever? À un moment donné, quelqu'un a voulu contraindre ce comportement, avant de simplement désactiver les contraintes. Je m'assure de comprendre leur but et d'avoir une bonne justification pour contourner ces mesures de protection.

Supprimez la contrainte de key étrangère, puis supprimez la table lorsque personne n'est forcé de la reconnaître. Si la colonne de la deuxième table (celle qui n'est pas supprimée) n'est pas utilisée ailleurs, vous devriez probablement supprimer toute la colonne après avoir supprimé la contrainte.

Vous devez supprimer la contrainte avant de pouvoir supprimer la table référencée par celle-ci. SQL Server utilise la syntaxe suivante:

ALTER TABLE <table_name> DROP FOREIGN KEY <foreignkey_name> 

Gardez à l'esprit que la contrainte existe sur la table qui reference celle que vous voulez supprimer, c'est donc la table que vous devriez modifier.

Ne supprimez PAS une table avec des contraintes de key étrangère sans tenir count de l'impact sur les tables de foreign keys. Laissez-moi vous expliquer l'impact de la simple suppression de la key étrangère puis de la table avec un exemple.

Considérez deux tables – des pièces et des détails de command. Une contrainte de key étrangère indique qu'une pièce doit exister avant de pouvoir être placée dans la table orderdetails. Ce qui est stocké dans la table orderdetail est l'identifiant de la pièce dans la table des pièces, pas le nom ou la description de la pièce. Supposons que vous laissiez tomber la key étrangère, puis déposez la table des pièces. Maintenant, toutes datatables de la table de command sont totalement inutiles car vous n'avez aucun moyen de savoir quelle était la pièce commandée. Cela inclut les commands non encore expédiées et les commands que le client pourrait appeler et poser des questions sur. De plus vous n'avez maintenant aucun moyen de recréer ces données, sauf en restaurant une sauvegarde (espérons que vous en avez un).

Supposons en outre que vous souhaitiez supprimer la table et la recréer pour modifier la table. Puis rechargez les informations et remettez la key étrangère. Dans ce cas, vous devriez probablement utiliser alter table au lieu de drop et recréer mais si vous ne le faites pas, vous risquez de vous refind avec des numéros d'identification qui ne sont pas les mêmes qu'à l'origine et donc les ordres referenceront les faux identifiants. Cela peut être fait en toute security, mais vous devrez le faire très soigneusement et avec beaucoup de reflection sur les conséquences.

en utilisant On Delete Cascade