JeuWeb - Crée ton jeu par navigateur
Nombre de tables - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Nombre de tables (/showthread.php?tid=2424)

Pages : 1 2


Nombre de tables - alfanor - 16-02-2008

Bien le bonjour à tous,

J'écris ce message afin de vous demander s'il est grave d'avoir de nombreuses table, c'est à dire si avoir 50 tables au lieu de 3 risque de ralentir le serveur (en dehors du fait que ça demande plus de requête je veux dire). En l'occurrence je suis en train (encore Tongue ) de faire un MCD, la totalité des tables sont en InnoDB et afin de garantir que les données contenues dans mes tables soient logiques (donc que les clés étrangères des tables filles existent dans les tables mères) je me retrouve à avoir des dizaines (40 à peut près) de tables de liaisons entres les tables principales que sont :

- planete
- donnee_ressource
- donnee_habitant
- donnee_technologie

Et les tables secondaires qui sont donc toutes les autres, donc bien sûr avec ce système mon MCD est horrible et illisible (à telle point que j'ai viré à peut près tout pour essayer de recommencer car avec toutes les relations qui s'entrecroisaient je m'y perdais un petit peu) et ma Base De Donnée possèdera beaucoup plus de tables, mais à côté de ça je suis garantis que mes données soient logiques.

Aussi ma question est donc de savoir si d'après vous ce système vaut le coup ou non ou s'il vaut mieux que je fasse à l'arrache une seul table pour les bâtiments qui réunira tout les types de bâtiments (actuellement j'ai les bâtiments économiques, de recrutement de soldat, de constructions de machines, de recherches scientifiques, de défense, d'habitation et tout cela fait à chaque fois trois 5 tables (donnee_batiment_X, donnee_batiment_X_cout_ressource, donnee_batiment_X_technologie, donnee_batiment_X_habitant, batiment_X_planete), autant dire que ça fait pas mal, bien sûr je précise que les caractéristiques attachées à chaque type de bâtiments sont différents.) et tout de même pour le reste donc.

Après bien entendu la formation de la Base De Donnée n'est pas en soit le problème, le MCD est laid, mais ça ne l'empêche pas d'être bon. (enfin il était laid vu que j'ai quasiment recommencé à zéro Tongue)

Voilà, merci d'avance de vos avis Smile


RE: Nombre de tables - pascal - 16-02-2008

salut,

50 tables, c'est beaucoup et peu à la fois Wink

en fait ça dépend de la modélisation des données :
s'il faut 50 tables, fais en 50.

mais à te lire, j'ai l'impression qu'il y a des mécanismes similaires selon les 6 types de bâtiments.

vas-tu refaire du code identique pour ces 6 types de bâtiments, et un peu de code différent à chaque fois ?
les 7eme et 8eme types de bâtiments vont ils arriver bientôt, t'obligeant à recopier du code et en créer selon ces types ?

bref, je pense qu'il faut être plus souple : garder les quelques tables gérant un type de bâtiment générique et ajouter une table "type_batiment" pour différencier le tout (notamment les caractéristiques ).

et dans le code, une classe / des fonctions gérant le coté générique et selon le type de bâtiment écrire des fonctions spécialisées.

A+

Pascal


RE: Nombre de tables - alfanor - 16-02-2008

Bah les bâtiments pour l'exemple possèdent effectivement tous quelques petites choses en commun, en l'occurrence il s'agit des caractéristiques suivant :

- resistance
- duree_creation
- terrain (n'est pas compté comme ressource, ce pourquoi je l'ai mit)
- entretien

Sinon après il n'y a absolument plus rien d'identique, les bâtiments économiques étant liées aux ressources pour savoir ce dont ils ont besoin / ce qu'ils produisent, les bâtiments scientifiques étant liés aux technologies, les bâtiments d'enrôlement aux types de soldats et ainsi de suite.

Et c'est à cause de ces relations avec d'autres tables qui diffèrent selon les types de bâtiments que je ne vois pas trop comment gérer cela autrement. Après le problème c'est pour la table "type_batiment" donc, si tout est géré comme il faut côté BDD, il faudra encore des tables intermédiaires pour lier des caractéristiques aux types de bâtiments, donc à l'arrivée où se retrouve avec 1 table par type de bâtiment si je comprend bien ? (ça supprime quand même toutes les liaisons avec ressources / planètes / technologie certes)

EDIT : Donc, si j'ai bien compris, je me retrouverai avec une Base De Donnée qui ressemblerait à ça en ce qui concerne les bâtiments :

[Image: bddyp2.png]

Mais donc dans ce cas je ne serai plus assuré que ma table "donnee_batiment" et mes tables "donnee_militaire", "donnee_scientifique" (et autres) possèdent des données logiques étant données qu'elles ne seraient plus directement liées.


RE: Nombre de tables - pascal - 16-02-2008

essaie de faire un tableau avec d'un coté les types de bâtiments, de l'autre les caractéristiques. il y sûrement des similitudes :
_ taux de progression
_ besoin de telle ou telle ressource
_ unité qui se débloque
etc...

si des mécanismes similaires se dégagent ici, c'est gagné Smile

sinon une grande table type de batiment avec plein de champs, utilisés ou pas, est aussi une piste.

A+

Pascal


RE: Nombre de tables - alfanor - 16-02-2008

Bon, j'ai un peu regardé le problème et voilà ce que j'obtiens, ça me paraît pas trop mal et je pense qu'avec ça je peux avoir à la fois un nombre de type de bâtiment infini, un nombre de bâtiment infini, un de caractéristique infini.

Voici donc ce petit bout de MCD :

[Image: bddek5.png]

Le seul problème étant que lorsqu'un des caractéristiques appelle à avoir une relation avec une autre table la relation n'est pas gérée comme telle. (par exemple pour un bâtiment économique "ressource_produite" -> 5 (5 étant l'id de la ressource), la relation liant la ressource produite à la table ressource n'existera pas. Du coup ça pose problème.

EDIT : D'ailleurs dans les tables en InnoDB, il y a les relations ON DELETE et ON UPDATE, ON DELETE je vosi bien à quoi ça peut servir, par contre ON UPDATE je n'arrive pas à me trouver un contexte où ça peu servir (en fait je ne vois pas vraiment ce que c'est censé modifier dans une table liée alors que seul les id sont transmises quoi), donc s'il y a quelqu'un (je pense que oui ^^) qui connait l'utilité exacte de cette relation, merci de l'expliquer Smile (je ne crois pas que ce soit dans le wiki.)


RE: Nombre de tables - pascal - 16-02-2008

c'est un peu dur d'entrer de modéliser, il faudrait expliquer les grandes lignes de chaque type de bâtiment.

mais on avance Smile

A+

Pascal


RE: Nombre de tables - alfanor - 16-02-2008

Et bien pour ce qui est des explications, il s'agit de détailler les différents champs nécessaires à chaque type de bâtiment ? Ou bien d'expliquer ce que c'est censé donner à l'arrivée ? (en gros les données du problème quoi.)


RE: Nombre de tables - pascal - 16-02-2008

oui, tout ça Smile

A+

Pascal


RE: Nombre de tables - alfanor - 17-02-2008

Bon alors je vais lister un peu ce qu'il y a à savoir sur les différents bâtiments (le problème étant que c'est lié un peu à tout.)

1- Les habitations :
Il s'agit simplement d'une structure permettant d'héberger les citoyens (=> liaison vers donnee_habitant) qui sont donc des habitants sans emploie et non formés.

2- Les infrastructures économiques de premier niveau :
Il s'agit de toutes les infrastructures exploitant des matières premières (=> liaison vers donnee_ressource), chaque infrastructure a besoin d'un type d'employé pour fonctionner correctement (=> liaison vers donne_habitant)

3- Les infrastructure économiques de second niveau :
Il s'agit de toutes les structures produisant une matière secondaire à partir de deux matières premières (=> trois liaisons vers donnee_ressource), une fosi de plus un type d'employé doit y être présent pour faire fonctionner le tout (=> liaison vers donne_habitant).

4- Les centres de formations civils :
Il s'agit des bâtiments permettant de former un certain type d'employé (=> liaison vers donnee_habitant), chaque centre de formation ne peut accueillir qu'un certain nombre de citoyens à la fois pour les former en un certain temps prédéfinis pour la bâtiment en question.

5- Les centres de formations militaire :
Ces bâtiments permettent d'enrôler des citoyens et de les former à l'art de la guerre, chaque type de bâtiment de ne peut entraîner qu'un type de soldat (=> liaison vers donnee_soldat), une fois de plus un nombre maximum de personne peuvent être accueillis et la formation dure un temps définis.

Voilà, il n'y a pas du tout tout les bâtiments et c'est très résumé, mais je pense que pour l'exemple ça devrait suffire non ? (en gros pour voir comment faire pour garantir que les données soient logiques tout en utilisant un MCD proche de celui de mon message précédent)

Donc c'est là que l'on voit bien que le problème est lié aux liaisons qui ne sont jamais les mêmes pour chaque type de bâtiment et je ne vosi pas comment gérer cela ...

Voilà encore merci Smile


RE: Nombre de tables - pascal - 19-02-2008

pour gérer tout ça de la même manière, je vois bien la notion de ressource étendue :
bâtiments, ressources, habitants ...

ces ressources peuvent être utilisées en entrée ( mobilisées ou consommées ) et produisent d'autres ressources en sortie.

c'est une piste...

A+

Pascal