2008-10-29 7 views

Répondre

26

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.

Un désavantage serait une légère baisse des performances, comme n'importe quelle autre clé étrangère.

+4

Un "orphelin sans enfant" ??? ;-) – Yarik

4

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

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

13

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

Vous apprécierez la advantages associated to foreign keys:

  • En supposant que la bonne conception des relations, les clés étrangères rendent plus difficile pour un programmeur d'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 rend inutile l'exécution de ces vérifications côté application. Cela é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 correctement conçues facilitent la documentation des 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 vrac. Peut-être que cela implique plus d'utilisation du disque et un léger impact sur les performances.
5

Oui, vous devriez.

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

  • assure que parent_id fait référence à une vraie ligne de la table
  • empêche la suppression accidentelle d'un parent qui a des enfants, ou veille à ce que les cascades de suppression pour supprimer les enfants ont également
  • Fournit des informations l'optimiseur peut utiliser

Je ne peux pas penser à des inconvénients réels.