JeuWeb - Crée ton jeu par navigateur
[Résolu] Ma base de donnée est-elle correcte ? - 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 : [Résolu] Ma base de donnée est-elle correcte ? (/showthread.php?tid=6482)



[Résolu] Ma base de donnée est-elle correcte ? - Konroy - 08-12-2012

Bonjour à tous,

je me remet à la prog et je développe un petit jeu de fight entre joueur , ou chacun posséde différentes arme, armures...

J'ai pensais a une bdd du type

joueurs
id pseudo... armes botte
1 admin epée1 botte1


id-botte -- nom --- id-joueur -- caracteristique ----- defense ---prix
10 --- botte1 -- 1 -- botte mystique --- 12 -- 5

Ca le fait comme ca ? Merci :langue2:


RE: Ma base de donnée est t'elle correcte - Sephi-Chan - 08-12-2012

Non, ce n'est pas bon. Tu ne dois pas avoir l'id du joueur dans la table des bottes puisque tu as l'id de la botte dans la table des joueurs.

Voilà une meilleure structure :


+----+--------+---------+----------+
| joueurs |
+----+--------+---------+----------+
| id | nom | arme_id | botte_id |
+----+--------+---------+----------+
| 1 | Corwin | 1 | 2 |
| 2 | Caine | 2 | 2 |
+----+--------+---------+----------+
+----+-------------+-----------+------+
| armes |
+----+-------------+-----------+------+
| id | nom | puissance | prix |
+----+-------------+-----------+------+
| 1 | Grayswandir | 100 | 1000 |
| 2 | Epée courte | 30 | 150 |
+----+-------------+-----------+------+
+----+----------------+------------+----------+------+
| bottes |
+----+----------------+------------+----------+------+
| id | nom | protection | regles | prix |
+----+----------------+------------+----------+------+
| 1 | Chaussons | 0 | | 10 |
| 2 | Bottes en cuir | 100 | mystique | 150 |
+----+----------------+------------+----------+------+



RE: Ma base de donnée est t'elle correcte - Mighty - 08-12-2012

Salut,

Il faut essayer d'éviter les redondances. La défense et le prix peuvent-ils varier ? et si oui, les changements peuvent-ils être calculés simplement ? Cela dépend aussi de ton système d'équipement.

Il te faudrait minimum 3 tables
- joueurs
- equipements
- joueurs_equipements

Cordialement

Mighty

Edit : Trop rapide Sephi


RE: Ma base de donnée est t'elle correcte - djidi - 08-12-2012

@Sephi-chan: Ce ne serait pas encore mieux de ne faire qu'une seule table "objets" en regroupant armes et bottes ?


RE: Ma base de donnée est t'elle correcte - Sephi-Chan - 08-12-2012

@ Mighty : le modèle a 3 tables me semble uniquement pertinent si l'on peut posséder plusieurs objets (et en équiper seulement un par emplacement) ou bien si l'on peut personnaliser les objets. Mais c'est effectivement l'approche la plus flexible.

@ Djidi : Clairement. Smile


RE: Ma base de donnée est-elle correcte ? - Konroy - 08-12-2012

Il y aura un système d'inventaire, donc oui on pourra posséder plusieurs objet, mais être equipé que d'un seul. 3 tables sont privilégiés donc?
Merci


RE: Ma base de donnée est-elle correcte ? - Sephi-Chan - 08-12-2012

Dans ce cas tu as besoin d'une structure a 3 tables telles que :


+----+--------+---------+----------+
| joueurs |
+----+--------+---------+----------+
| id | nom | arme_id | botte_id |
+----+--------+---------+----------+
| 1 | Corwin | 1 | 2 |
| 2 | Caine | 2 | 2 |
+----+--------+---------+----------+
+----+-------+----------------+-----------+------------+----------+------+
| equipements |
+----+-------+----------------+-----------+------------+----------+------+
| id | type | nom | puissance | protection | regles | prix |
+----+-------+----------------+-----------+------------+----------+------+
| 1 | arme | Grayswandir | 100 | | | 1000 |
| 2 | arme | Epée courte | 30 | | | 150 |
| 3 | botte | Chaussons | | 0 | | 10 |
| 4 | botte | Bottes en cuir | | 100 | mystique | 150 |
+----+-------+----------------+-----------+------------+----------+------+
+-----+-----------+---------------+--------+
| equipements_joueurs |
+-----+-----------+---------------+--------+
| id | joueur_id | equipement_id | equipe |
+-----+-----------+---------------+--------+
| 1 | 1 | 4 | oui |
| 2 | 1 | 3 | non |
| 3 | 2 | 4 | oui |
+-----+-----------+---------------+--------+

Ici, on utilise la table equipements pour stocker tous les équipements. La colonne type permet de les distinguer.

Cette table contient les colonnes utiles à tous les équipements, même si certaines colonnes ne sont pas utiles à certains équipement. Ici, la colonne puissance ne sert à rien pour une botte, donc on la laisse vide (valeur NULL).

La dernière table sert à indiquer les objets possédés par chaque joueur, et la colonne equipe permet de savoir si un objet est équipé ou non. Ici, le joueur 1 dispose
des objets 4 (qui est équipé) et 3 (qui n'est pas équipé). Le joueur 2 dispose seulement de l'objet 4 (qui est équipé).

L'écriture des requêtes SQL est un peu plus délicate avec cette approche, mais c'est a priori ce que tu peux avoir de mieux.


RE: Ma base de donnée est-elle correcte ? - Konroy - 08-12-2012

Niquel c'est exactement ce que je recherchais, si on possedes bcp d'objets, ca serait plus claire d'avoir une tables pour chaques types d'equipements , ou c'est plus lourd ?


RE: Ma base de donnée est-elle correcte ? - Sephi-Chan - 08-12-2012

Avoir une table pour chaque type d'équipement n'apporterait rien et alourdirait le volume de code et le temps d'exécution (puisqu'on ne pourrait plus récupérer l'ensemble de l'équipement d'un personnage d'une seule requête).


RE: [Résolu] Ma base de donnée est-elle correcte ? - Konroy - 08-12-2012

Ok tu m'as convaincu ^^
Merci !