Aller au contenu

Champs de comptes dans la BDD ?


Sujets conseillés

Posté

Salut à tous,

Question d'optimisation de la base de données, et de simplicité de certaines requêtes également. (Je travaille avec un framework, et je me prends la tête en ce moment)

Est-il bien de mettre un champ de "compte" dans certaines tables ? Par exemple, pour compter le nombre de messages dans un sujet du forum, ou le nombre de sujets dans un "groupe" ?

Il est possible de compter avec SELECT COUNT(*), mais le champ déjà mis à jour permettrait d'avoir une requête en moins, donc d'optimiser de ce côté-là, quitte à utiliser un champ en plus (ce qui en soi n'est pas un énorme problème, sauf côté mémoire disque).

Qu'en pensez-vous ?

Posté

Bonsoir,

d'un point de vue conceptuel, "c'est le mal" : redondance de données = prend plus de place = difficulté à maintenir = risque d'erreur.

En pratique toutefois c'est parfois judicieux, si ça peut éviter les jointures suivies de "group by" sur du gros volume.

C'est surtout une question de volume de données et ratio lectures/écritures. C'est pas mal utilisé pour les forums par exemple.

Je ne réserve ce genre d'agrégation de données que pour les grosses tables, sinon c'est s'embêter pour pas grand chose : le moindre update dans ta table principale à cause d'un insert ou delete dans la table secondaire implique aussi un verrou sur cette table principale et la purge du cache de requête ; ce qui n'aurait pas forcément été le cas sans ça.

Bref, comme d'hab réponse de normand : "ça dépend".

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...