Une question sur la conception d'une BDD

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Une question sur la conception d'une BDD

Re: Une question sur la conception d'une BDD

par tonyrion » 25 juil. 2011, 15:51

Merci pour ta réponse.
Ce que tu m'as conseillé, je l'ai justement fait de moi même car je conçois parfaitement que ma question est délicate étant donné que je suis le seul à connaitre vraiment le besoin.
Au final j'ai revu la conception de ma BDD et j'ai préféré éviter de concaténer les données.
En effet, difficile de réaliser des tests de performances vu que la base est vide, mais pour les mises à jour, la récupération, les opérations dessus, j'ai rapidement compris que je m'y perdrais à trop concaténer.
Si la base montre des limites, il sera temps de regarder une solution plus performante en terme d'hébergement, mais au moins la conception de la base sera, à mon sens, plus propre.

Re: Une question sur la conception d'une BDD

par macgawel » 25 juil. 2011, 12:05

Bonjour.
Tout ce que je lis c'est que lorsqu'on regroupe des données, c'est que les tables sont a priori mal pensées au départ.
Il est toujours possible de "dénormaliser" une table, mais il faut le faire en connaissance de cause et pour une bonne raison.
Pensez-vous que ce que je cherche à créer est une erreur et inadapté au besoin?
C'est toi qui connais le mieux le besoin, c'est à toi de voir...

Pour ton cas j'aurais tendance à dire que le plus simple est de tester les deux solution :mrgreen:
Et je suis sérieux. Pas besoin de faire toutes les fonctions, commence par un comparatif entre une table "détaillée" (comme celle que tu as) et une table "agrégée" (une journée par ligne), et juste une fonction de découpage de chaîne (explode par exemple)...

Et mon avis, à vue de nez : une BDD est conçue pour gérer un gros volume de données. La laisser faire le travail me semble la meilleure solution - surtout si l'autre option implique du traitement.

Une question sur la conception d'une BDD

par tonyrion » 19 juil. 2011, 18:44

Bonjour,

Je me suis lancé dans un projet destiné à décharger du travail de mise à jour manuelle d'un jeu auquel nous prenons part avec des amis depuis quelques années.
Mon exemple sera donc tiré de ce projet et j'espère que vous pourrez m'apporter une réponse claire qui me permettra de pouvoir avancer dans le développement mais surtout de progresser dans ma compréhension des BDD.

J'avais réalisé un site il y a quelques années dans lequel je suivais les résultats d'une équipe de football pour une association avec une partie administration permettant aux personnes habilitées de mettre à jour les données du championnat notamment, de toutes les équipes, avec gestion des buteurs, cartons, temps de jeu, classement, ... Bref une gestion de championnat classique facile à maintenir.

Seulement, au fil des saisons, je me retrouvais avec des tables volumineuses car pour chaque journée, chaque équipe avait une occurence de générée et ce afin d'analyser l'historique des données. Exemple, le classement d'une équipe lors de la 6ème journée alors qu'on en est à la 24°, le classement général de n'importe qu'elle journée, ...
Donc, si on part sur la base d'une championnat à 20 clubs avec de ce fait 38 journées, on arrive à 760 occurences par saison dans la seule table journée.

En même temps à ce rythme je pouvais y aller, avec un seul championnat à gérer la base était loin d'être saturée.

Seulement aujourd'hui mon nouveau projet doit pouvoir permettre de tenir avec beaucoup plus de championnats. En fait mes amis ont un réseau d'autres amis qui ont eux même leur réseau, etc..., sachant que nous avons chacun besoin d'environ 10 championnats et qu'il existe plusieurs centaines de personnes. Donc à l'instant T plusieurs milliers de ligues à gérer.
Dès lors si nous partons sur 760 occurences par ligue et qu'on prend 1000 ligues, nous obtenons par saison 760 000 occurences.
Ca complique les choses.

J'ai donc regardé un peu partout et je me suis demandé si, en regroupant les données contenues sur une ligne pour un club dans le projet précédent dans une chaine et que je mettais les 20 clubs sur une ligne, je divisais déjà par 20 ma consommation en terme d'occurences.
Etant donné que ces données ne serviront de toute manière qu'à la consultation et n'ont donc pas de valeur en terme relationnel dans la BDD, j'ai pensé que la solution serait viable.
Il faudra ensuite traiter ces données via des fonctions en PHP qui seront appelées à chaque fois qu'on en aura besoin à l'affichage ou dans des calculs de stats.
Evidemment la solution est moins facile à entretenir, mais via une console d'administration, si le codage-décodage de ces lignes est bien réalisé, tout sera invisible pour l'utilisateur.

Maintenant je ne trouve pas d'information là dessus.
Tout ce que je lis c'est que lorsqu'on regroupe des données, c'est que les tables sont mal pensées au départ.
Pensez-vous que ce que je cherche à créer est une erreur et inadapté au besoin?
Qu'est ce qui prend le plus de temps et de ressrouces? Une table trop lourde ou le codage-décodage de chaines via des arrays dans des tables plus légères?

Bref, c'est toute la base de mon futur développement que je remet en question, donc merci à vous si vous pouvez me guider sur la solution à adopter.

Si par ailleurs vous avez des exemples de conception de tables pour ce type de projet sur lesquels je pourrais m'appuyer ou que vous avez besoin que je vous présente la structure précise de ce que je voulais faire, merci de le dire.