J'ai actuellement une base de données avec deux tables appelées Articles et Tags. Afin de permettre aux articles d'être dans plusieurs catégories j'ai une relation de plusieurs à plusieurs. Est-ce une erreur d'avoir un tel design en termes de performance? ou devrais-je supprimer la relation entre ces deux tables et ajouter une troisième table en tant que pont (articlesTags)?relation plusieurs-à-plusieurs dans la conception de base de données
Répondre
Il n'y a rien de mal à avoir une relation plusieurs-à-plusieurs, vous aurez juste besoin de créer un Junction Table (ce qui ressemble à ce dont vous parlez avec articlesTags
) pour faciliter cette relation.
Il n'y a pas de problème avec une relation plusieurs-à-plusieurs si c'est ce que requièrent les données, mais vous aurez besoin d'une troisième table pour la représenter.
Je dirais "vous aurez besoin d'une troisième table." – Dave
Une relation plusieurs-à-plusieurs existe dans un modèle relationnel, c'est juste une abstraction de l'esprit. Lorsque vous le mettre en œuvre, il y aura une table de articles_to_tags où vous aurez:
fk_article (ENTIER) fk_tag (ENTIER)
Il n'y a pas de problème à l'aide de nombreux à de nombreuses relations. C'est souvent nécessaire.
Et oui, il n'est pas possible de créer une relation many to many, sans utiliser une troisième table.
Vous voyez la différence entre une conception de base de données conceptuelle (la relation N: N) et sa réalisation physique. Peu importe la façon dont vous modélisez votre relation N: N, vous aurez besoin de la table de jonction susmentionnée pour que cela fonctionne.
Il n'y a rien de mal à modéliser une relation du monde réel aussi proche du monde réel que vous le pouvez en général. La clarté est roi.
Quand il s'agit de n'importe quelle question de performance dans n'importe quel système, la réponse se résume habituellement à "ça dépend".
Si votre problème de performance est lié à WRITES, alors une structure hautement NORMALISÉE est la meilleure et vous aurez besoin de cette table de jonction. Vous finirez par écrire beaucoup moins de données et cela peut accélérer considérablement les choses (bien que vous puissiez brûler cet avantage en effectuant des recherches avant de créer les insertions). La lecture des tables normalisées individuelles peut être très rapide aussi.
Si votre problème est lié aux LECTURES analytiques, alors une structure DENORMALISÉE est la meilleure. Les jointures peuvent être très performantes si les tables sont grandes et les indices étalés. Vous allez sacrifier beaucoup d'espace pour gagner beaucoup de temps.
En général, vous voulez examiner les spécificités de votre situation et peser le pour et le contre de chaque approche avant de décider d'une solution. Personnellement, j'ai toujours trouvé préférable de se concentrer sur Clarity dans les premières étapes et de refactoriser pour la performance si je découvre un problème plus tard.
- 1. Problème de conception de base de données
- 2. Question sur la conception de la base de données
- 3. Base de données relation plusieurs à plusieurs
- 4. Comment configurer la relation de base de données MySQL
- 5. Conception de base de données d'inventaire
- 6. données de base iphone readonly relation
- 7. Modélisation de base de données ou conception de base de données: Lequel vient en premier?
- 8. Base de données de conception de téléchargement de données question
- 9. Conception de la base de données de l'école requise
- 10. Conception de la base de données du moteur de recommandation?
- 11. Outils d'analyse statique pour la conception de base de données
- 12. Conception de la base de données Google Analytics
- 13. Conception de base de données: Stocker des données à partir de formulaires papier dans la base de données
- 14. données Interrogation sur la base de 3 relation niveau CakePHP
- 15. Base de données Conception et numéro
- 16. Suggestions de conception de sécurité pour la liste de contrôle d'accès dans la base de données?
- 17. Question de modèle de conception de base de données relationnelle - base de données Massive Read Only
- 18. suppression d'une relation de base de données circulaire
- 19. Conception de base de données pour les révisions de texte
- 20. Instructions de conception de base de données SQL Data Services
- 21. Suivi des impressions de bannières - Conception de base de données
- 22. conception de base de données pour la tradition et des données de type ini avec intégrité
- 23. Persistance Java dans la base de données
- 24. Question de conception de base de données MySQL Drupal
- 25. document/image Base de données de conception du référentiel Question
- 26. Conception de base de données pour les actions conditionnelles
- 27. Internationalisation dans la base de données
- 28. Question de conception de base de données: Comment gérer une énorme quantité de données dans Oracle?
- 29. SQL Server - Conception de base de données - Meilleures pratiques
- 30. Gestion des données de hiérarchie dans la base de données
Comment avez-vous créé une relation plusieurs-à-plusieurs sans l'utilisation d'une table articlesTags? – flayto
Si vous avez une relation plusieurs-à-plusieurs, vous avez besoin de la troisième table à représenter - il n'y a pas d'alternative raisonnable. Votre approche la plus proche pourrait être une structure SET dans chaque table - si votre SGBD le supporte. Mais il n'y a généralement pas beaucoup de vérification inter-tables sur ces types - la table séparée est nécessaire. –