2011-03-28 5 views
0

Actuellement, j'ai plusieurs n: relations m entre 2 tables:Plusieurs plusieurs à plusieurs relations entre les mêmes tables ou une relation n: m avec l'attribut d'identification?

Users --> Favourites(user_id,post_id) <-- Posts 
Users --> Follow(user_id,post_id)  <-- Posts 

Auriez-vous plutôt 2 tables de jointure ou juste une table de jointure avec un attribut qui marque le type de la jointure, donc quelque chose comme:

Ce n'est pas exactement le même exemple que dans mon application, mais je pense que vous pouvez avoir l'idée.

Répondre

1

Je ne pense pas qu'il y ait une "bonne" réponse ici. Je pense cela dépend. Si vous utilisez une seule table avec une colonne "type de relation" et souhaitez fréquemment extraire des relations d'un seul type - par exemple des favoris - alors chaque requête sur cette table devra appliquer une clause WHERE pour filtrer les types ne veulent pas veulent. Cela peut entraîner des requêtes lentes si vous n'indexez pas correctement la colonne "type de relation" non-clé. En outre, cela fait en sorte que les futurs développeurs auront toujours besoin de savoir et de se souvenir de filtrer sur les types qu'ils veulent ou ils peuvent récupérer de manière inattendue des données de relations qu'ils n'ont pas l'intention de faire. Avoir deux tables séparées est plus facile à comprendre. Par exemple, il m'est plus facile de savoir rapidement à quoi m'attendre dans une table "Favoris" que dans une table "Mes_postes_utilisateurs". Par conséquent, des tables séparées peuvent communiquer les différences plus rapidement. D'un autre côté, si vous avez souvent besoin de sélectionner les deux types de relations dans un seul ensemble, les avoir dans une seule table est plus simple car vous n'avez pas besoin de faire UNION pour combiner les données de deux tables en une seule vue. Et s'il y avait 10 000 types de relations possibles différents? Voudriez-vous 10 000 tables différentes, ou préférez-vous une seule table? La plupart des gens préfèrent une seule table dans ce cas. Je pense donc que cela dépend de nombreux facteurs, tels que l'utilisation prévue, la taille, etc. La «bonne» réponse est plus un art qu'une science.

Questions connexes