2009-11-25 4 views

Répondre

13

Avantages:

  • Vous pouvez lier rien à quoi que ce soit assez facilement
  • relations Adaptables aider à recevoir des circonstances imprévues
  • Très facile à mettre en œuvre des relations
  • grands pour les systèmes ad hoc

Inconvénients:

  • clés étrangères ne pratique
  • indices comprennent une autre dimension de la complexité
  • Les relations entre les tables difficiles à identifier lors de l'utilisation des IST
  • Base de données des outils de schématisation ne peuvent pas interpréter
  • Pas toujours pratique pour rejoindre les modèles
  • fortement Découragé pour les systèmes où l'intégrité des données doit être vérifiée

Je suis un grand fan de l'utilisation de relations de ce type pour les enregistrements qui sont attachés à un grand nombre de choses comme requis, par exemple, un commentaire ou un enregistrement d'annotation qui peut s'appliquer à une grande variété d'enregistrements.

Il n'est pas très bien adapté aux situations où la relation s'exerce fréquemment dans un JOIN. C'est-à-dire que l'association polymorphique ne devrait pas être au milieu d'une relation entre des enregistrements, mais plutôt comme quelque chose sur le périmètre.

+0

Pouvez-vous expliquer pourquoi il n'est pas bien adapté pour être au milieu d'une relation entre les enregistrements? Les clés étrangères ne sont pas pratiques, mais l'intégrité est gérée sur la couche Rails plutôt que sur DB, n'est-ce pas? – Turadg

+2

L'utilisation d'une association polymorphique au milieu signifie que vous avez un minimum de trois composants dans vos conditions de jointure, quatre si les deux sont polymorphes. Cela peut avoir un effet néfaste sur les performances car la taille de l'index peut augmenter considérablement avec le nombre d'éléments dans la clé concernée. Les index plus volumineux deviennent beaucoup plus coûteux à mettre à jour, il est donc avantageux d'indexer uniquement le minimum requis. Comme toujours, prenez le temps de comparer toute structure de base de données proposée avec des * grandes * quantités de données représentatives de votre système à l'échelle. – tadman

+0

Réponse très claire, merci. – Turadg

Questions connexes