Partage
  • Partager sur Facebook
  • Partager sur Twitter

Organisation des tables et de leurs champs

Jeu de carte en application web

Sujet résolu
    15 septembre 2021 à 20:30:15

    Bonjour,

    J'ai fouiné sur Google et sur quelques autres forums (celui-ci compris) sans vraiment trouver une réponse précise à ma question, je me permets donc d'ouvrir ce sujet qui me pose des soucis depuis un moment.

    Je crée un jeu de cartes en PHP ( ou plutôt j'essaye) et je butte sur une question d'organisation de la base.

    J'avais dans l'idée de créer une table "stockDeCartes" avec un champ "ID", un champ "IdPlayer" et ... mon problème est là... j'ai une cinquantaine de cartes différentes et j'avais dans l'idée de les mettre dans cette table mais ça va me faire plus de 50 champs (voire plus dans l'avenir si je rajoute des cartes)....

    Les caractéristiques de ces cartes seront dans une autre table... dans la table "stockDeCartes" il n'y aura que l'ID de chaque carte, il ne me faut donc qu'un champ par carte mais ça en fait quand même beaucoup (je me trompe peut-être).

    Je trouve ça énorme et je me creuse la tête pour trouver une autre "structure" plus adaptée mais j'avoue que je bloque complètement depuis un bon moment sans trouver d'alternative...

    Je fais donc appel à votre expérience et votre bonne volonté pour m'aiguiller dans la bonne direction.

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2021 à 0:49:31

      Les gestionnaires de BDD, même le plus "simpliste" (sqlite) savent gérer une quantité énorme de données sans que ça impacte grandement ton ordi. Je pense qu'on peut commencer à optimiser au maximum après plus d'1 millions de données. Tu peux voir venir.

      Maintenant, dans ton jeu, rien ne t'empêche de dupliquer le jeu de cartes. Par exemple, si tu fais un match A contre B et un autre C contre D, que A et C ont la carte numéro 125, rien ne sert de créer 2 lignes de cette carte dans la BDD.

      Créer une BDD ne se fait pas en 10 minutes, et tu vas forcément trouver plus optimal. Tu pourrais commencer par rassembler toutes les colonnes dans une seule table. Tu insères 2 ou 3 lignes pour "forcer" une duplication, et tu construis une nouvelle table pour ne plus avoir de données dupliquées et ainsi de suite.

      Par exemple : tu veux stocker une liste de personnes (prénom et nom) ainsi que leur domicile (ville). Ta première table serait :

      TABLE PERSONNES : {id_personne PK, prénom_personne, nom_personne, ville_personne}
      
      Insérer :
      1;Alice;BERNARD;Paris;
      2;Bob;DURAND;Paris;
      3;Charles;DUPOND;Marseille

      Tu crées une table VILLES : {id_ville, nom_ville}

      Si une personne ne peut vivre que dans une seule ville, tu remplaces ville_personne par une clé étrangère qui référence VILLES.id_ville.

      Si une personne peut vivre dans plusieurs villes (maison de vacances, etc.), tu construis une table de jointure qui contiendra les clés étrangères de PERSONNES et VILLES.

      • Partager sur Facebook
      • Partager sur Twitter
        16 septembre 2021 à 13:12:03

        POur moi, je vois 3 tables: une table Joueurs qui décrit les joueurs (id_joueur, pseudo, ...), une table Cartes qui décrit les cartes (id_carte, nom carte, attaque, defense, type, ...) et une dernière table CartesDesJoueurs qui ne contiendrait que id_joueur et id_carte (et éventuellement quantite, si le joueur peut posséder plusieurs fois une même carte); cette dernière sera forcément "énorme" mais pas beaucoup de façon de faire.
        • Partager sur Facebook
        • Partager sur Twitter
          16 septembre 2021 à 19:59:20

          Bonjour et merci de vos réponses,

          Umfred -> Merci pour ton avis, c'est exactement ce que j'ai commencé par faire en me disant que c'était la meilleure des façons...

          CristianoRolando -> merci pour cette précision sur les gestionnaires de BDD, je vais rester sur mon modèle actuel qui me paraît le plus approprié à ma façon de faire, c'était vraiment la question du nombre de champs qui m'interrogeait... Vous m'avez tous les 2 apporté un élément de ma réponse! merci à vous pour ces précisions!

          • Partager sur Facebook
          • Partager sur Twitter
            17 septembre 2021 à 1:33:35

            umfred a écrit:

            si le joueur peut posséder plusieurs fois une même carte); cette dernière sera forcément "énorme" mais pas beaucoup de façon de faire.

            J'ai pas envie d'imaginer, mais, comme ça, me vient l'idée de mettre une colonne qui serait un nombre entier qui stockerait le nombre de fois que le joueur a cette même carte.

            • Partager sur Facebook
            • Partager sur Twitter
              17 septembre 2021 à 10:01:47

              je l'avais précisé au début de ma parenthèse ^^ "(et éventuellement quantite ..."
              • Partager sur Facebook
              • Partager sur Twitter
                17 septembre 2021 à 16:29:48

                Ah oui tu as raison. Pour ma défense, ton message n'est pas aéré. C'est pour ça que je l'ai lu en diagonale.

                En plus, quand tu as dit "cette dernière", je pensais que tu parlais de la table.

                • Partager sur Facebook
                • Partager sur Twitter
                  17 septembre 2021 à 17:20:36

                  oui, le "cette dernière" concernait bien la table, vu que tu vas y avoir plusieurs fois l'id du joueur associé à chaque id de carte (+ la quantité en sa possession); en gros, son nombre de lignes max sera (nombre de joueurs)*(nombre de cartes différentes)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Organisation des tables et de leurs champs

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown