Table unique avec plus de colonnes vs plusieurs tables avec moins de colonnes

8

Quelle serait une meilleure conception de base de données pour un site Web de réseau social? Une seule table avec plus de colonnes et moins de lignes, ou plusieurs tables avec moins de colonnes mais plus de lignes?

Par exemple: un utilisateur peut publier une mise à jour sur son mur ou dans un groupe.

Je peux penser à deux conceptions de bases de données:

Conception 1

UserPosts

  • id
  • identifiant d'utilisateur
  • Publier
  • datetime

UserGroupPost :

  • id
  • groupId
  • identifiant d'utilisateur
  • Publier
  • datetime

Problème potentiel : pourrait nécessiter des jointures, ce qui peut (à l'avenir) être une requête lente.

Conception 2

Messages :

  • id
  • identifiant d'utilisateur
  • groupId
  • Publier
  • datetime (où groupid serait nul si l'utilisateur poste sur son mur)

Problème potentiel : la boucle sur un grand ensemble de données peut prendre un (long) temps.


Comment obtenir de meilleures performances lorsque les données augmentent? Existe-t-il un autre (meilleur) moyen?

Siddharth Patel
la source
Pour moi, quelques colonnes de plus de lignes. Il est facile de gérer une partie par partie que d'avoir un grand ensemble de données. Si votre grande préoccupation concerne les grandes données à l'avenir, ne le faites pas. Le serveur SQL est conçu avec ce genre de problème, tout ce que vous avez à faire est de le concevoir correctement. Avoir un grand ensemble de données n'est pas un problème si vous savez comment optimiser votre requête
Vincent Dagpin
L'utilisation du plan d'exécution est vraiment d'une grande aide. Il vous indique quel est le problème avec votre requête. Ps: ne faites pas de boucle, si possible utilisez le traitement en masse, cette fonctionnalité est déjà là, utilisez-la
Vincent Dagpin

Réponses:

2

Mon inclinaison ici serait toujours l'option de conception 1, ou du moins le long de ces lignes. Ne vous inquiétez pas trop d'essayer d'éliminer la nécessité de joindre des tables dans les requêtes futures - toute base de données normalisée va utiliser des jointures dans toutes les requêtes utiles, c'est juste des bases de données relationnelles.

De plus, pourquoi devez-vous nécessairement rejoindre les tables userPosts et userGroupPosts pour votre site Web? Ne seraient-ils pas affichés séparément? La seule raison pour laquelle vous rejoindriez ces tables est peut - être lors de la recherche de publications, mais il ne devrait pas être trop difficile d'écrire des requêtes efficaces pour cela. En dehors de cela, vous pouvez finir par vouloir interroger les tables à des fins d'analyse, mais ce n'est pas le but principal de cette base de données.

Le design 2 pourrait au moins signifier que vous vous retrouvez avec une table très occupée.

La meilleure option serait cependant de prototyper chacun et d'exécuter quelques tests. Créez un prototype de chaque option de conception et effectuez une analyse comparative des performances sur différentes opérations avec des données factices.

Ian_H
la source
-3

Pour moi, selon votre structure actuelle, Design 2 est meilleur. Vous pouvez implémenter le partitionnement, une requête optimisée et un moyen structuré pour créer une base de données / table diminuera le temps d'exécution. Mais la normalisation de certains cas fonctionne mieux, mais dépend totalement de l'architecture de conception de votre base de données.

Dipa
la source