2010-09-10 5 views
0

Je travaille sur une structure DB et il semble que j'ai fini avec beaucoup de beaucoup de tables. La raison pour laquelle je reçois beaucoup d'entre eux est que ma table de base est des éléments et que chaque élément peut avoir plusieurs occurrences des critères de recherche qui apparaîtront aux utilisateurs. J'ai donc normalisé tous les critères de recherche et utilisé de nombreux tableaux pour lier les éléments et les critères de recherche. Pour quelque raison que ce soit, il ne semble pas juste d'avoir 7 tables de critères de recherche et 7 beaucoup de manys. Y a-t-il de meilleurs moyens de formuler ces relations tout en conservant la 3ème forme normale?Beaucoup de Many To Manys

Comme toujours apprécier grandement l'entrée.

-S-

+3

Ce titre serait meilleur que beaucoup de beaucoup à beaucoup: P – msarchet

+1

Pouvez-vous nous donner quelques exemples de données? –

+1

Est difficile à dire sans le diagramme ER. @msarchet Ou à beaucoup de beaucoup à beaucoup. –

Répondre

0

Je suppose que vous seriez mieux servi par un schéma en étoile et tables de dimension dénormalisées. Votre table de base ferait office de table de faits. Vos critères de recherche seront affichés dans plusieurs colonnes et placés dans une ou plusieurs tables de dimension. Par exemple, si l'attribut A dépend entièrement de l'attribut B et que l'attribut B dépend entièrement de l'attribut C, vous pouvez créer une table de dimension avec (C, B, A), puis migrer C vers votre table de base en tant que une clé étrangère. Répétez pour tous les ensembles d'attributs associés.

Si vous avez des attributs de faible cardinalité de balle impaire qui ne sont pas clairement liés mais qui se regroupent, vous pouvez créer une autre table de dimension à partir de leur produit intermédiaire, coller sur une clé primaire et migrer cette clé vers table de base aussi bien.

Si la 3ème forme normale est requise (et qu'elle ne devrait être requise que si les données sont mises à jour par plusieurs processus), vous pouvez normaliser les tables de dimension en ce qu'on appelle les dimensions de flocon de neige. Vous paierez un coût pour cela, car chaque requête nécessite plus de jointures.

+0

Merci Peter ... Je pensais vraiment cela, mais j'essayais de m'en tenir à une structure normalisée pour nos Inser/Updates/Deletes, etc. Cependant, ces données ne seront pas modifiées fréquemment et l'approche normalisée semble juste être un peu douloureux en termes de rejoindre toutes les tables. – scarpacci

0

Je ne suis pas vraiment sûr si j'ai compris votre modèle .. je crois que vous avez un article table et 7 autres tables liées à elle (disons, catégorie, auteur, pays, etc, etc). Et votre recherche doit rechercher ces 7 relations NxN, et vous n'aimez pas une requête qui fait 7 jointures ... si c'est le problème, alors vous devriez penser à utiliser full text search.

+0

Vous avez raison dans les 7 tables, mais ces 7 tables sont liées à un élément par un nombre de plusieurs (les éléments peuvent avoir plusieurs auteurs et l'auteur peut avoir plusieurs éléments) – scarpacci