Devez-vous transformer une colonne de table à référence automatique en une clé étrangère?

StackOverflow https://stackoverflow.com/questions/246477

Question

Par exemple, pour créer une hiérarchie de catégories, utilisez une colonne "parent_id" pointant vers une autre catégorie de la même table.

Cela devrait-il être une clé étrangère? Quels seraient les inconvénients / avantages?

Était-ce utile?

La solution

Oui. Garantit que vous n'avez pas d'orphelin (entrée sans parent) et, selon l'utilisation, si vous définissez une suppression en cascade, lorsqu'un parent est supprimé, tous ses enfants seront également supprimés.

L’inconvénient serait une légère baisse des performances, comme toute autre clé étrangère.

Autres conseils

Oui, vous devriez. Si vous avez un attribut dans une relation de base de données qui sert de clé primaire à une autre relation de la même base de données, vous devez en faire un FK.

Vous apprécierez les avantages associés aux clés étrangères :

  • En supposant que les relations soient bien conçues, les contraintes de clé étrangère compliquent la tâche du programmeur pour introduire une incohérence dans la base de données.
  • La centralisation de la vérification de ces contraintes par le serveur de base de données évite d'avoir à effectuer ces vérifications côté application. Ceci élimine la possibilité que différentes applications ne vérifient pas les contraintes de la même manière.
  • L'utilisation de mises à jour et de suppressions en cascade peut simplifier le code de l'application.
  • Des règles de clé étrangère bien conçues aident à documenter les relations entre les tables.

Les inconvénients:

  • Si vous définissez des clés étrangères, il est parfois plus difficile d'effectuer des opérations en bloc.
  • Cela implique peut-être davantage d'utilisation du disque et un léger impact sur les performances.

Oui, vous devriez.

Avantages (comme pour toute clé étrangère):

  • Garantit que parent_id référence une vraie ligne dans la table
  • Empêche la suppression accidentelle d'un parent qui a des enfants ou veille à ce que la suppression cascade de supprimer les enfants également
  • Fournit des informations pouvant être utilisées par l'optimiseur

Je ne vois aucun inconvénient réel.

Oui, vous devriez en faire une clé étrangère.

Les avantages seront un meilleur modèle de données avec moins de redondance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top