JeuWeb - Crée ton jeu par navigateur
BDD Sql & Php : liaison entre les 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 : BDD Sql & Php : liaison entre les tables. (/showthread.php?tid=7037)



BDD Sql & Php : liaison entre les tables. - Taressik - 12-07-2013

Bonjour a tous.
Comme étant non expérimenté j'étudie les relation entre les tables d'une base de donné. Mon problème se situe donc dans la liaison entre elles, je m'explique.

J'ai donc 3 tables :
1) PERSO ---> idPerso,pseudo,
2) SAC ---> idSac
3) OBJET ---> idObjet, nomObjet,

(Je pense qu'il manque des éléments dans les tables à vous de me dire si possible)
Maintenant mon but c'est que chaque Personnage et son propre Sac avec ses propres Objets.
(Un personnage ne peut qu'avoir un seul sac mais plusieurs objets)
Comment puis je lier les tables ? dois je rajouter d'autres tables ?

Ma seconde question est sur la statistique des objets.
Prenons par exemple une Potion qui rendrait 10 Pv à son utilisateur.
C'est +10 Pv je dois le notifier dans la BDD ? et mettre en relation les PV de l'utilisateur et les Pv que rendrait la potion ??
Si vous pouvez reprendre l'exemple de la potion pour m'expliquer j'en serait ravis.

Voila merci beaucoup de l'attention..


RE: BDD Sql & Php : liaison entre les tables. - Thêta Tau Tau - 12-07-2013

(12-07-2013, 04:42 PM)Taressik a écrit : Comment puis je lier les tables ? dois je rajouter d'autres tables ?

Oui il faut ajoutter des tables de liaison, c'est à dire des tables avec juste les deux clés primaires : idsac et idObjet par exemple. Pour un inventaire on peut aussi imaginer rajouter un champs "nombre d'objets".

Pour la liaison persos<->sac :
Déjà si chaque personnage a un sac et chaque sac un personnage il n'y a pas forcément besoin de faire 2 tables (liaison personnage-objet directement).
Mais il est fort possible qu'il y ait d'autres choses qui puissent avoir un inventaire (=sac) comme par exemple des marchands ou des coffres etc. Du coup faire deux tables est surement justifié.
Dans ce cas il suffit d’ajouter une clé étrangère dans l'une des deux tables, par exemple une clé idSac dans la table Perso.


RE: BDD Sql & Php : liaison entre les tables. - Taressik - 12-07-2013

A daccord !!! Ca ferait :

Tables de base
1) PERSO ---> ( idPerso,pseudo,idSac, idCoffre )
2) SAC --->( idSac )
3) COFFRE ---> ( idCoffre )
4) OBJET ---> ( idObjet, nomObjet )

Tables de Liaison
4) Objet/Sac ---> ( idObjet, idSac )
5) Objet/Coffre ---> ( id Objet, idcoffre )

Si ce que je dis est vrai merci beaucoup de l'explication Thêta Tau Tau ! Smile


RE: BDD Sql & Php : liaison entre les tables. - Ter Rowan - 12-07-2013

un objet n'est que dans un sac, il est inutile de faire une table spéciale objet sac

rajoute plutot id sac dans objet

voire meme si ton jeu dit qu un personnage n'a qu un sac, la notion de sac n a pas d intérêt

tu lies directement objet à perso

SAUF si tu veux rendre évolutif ton jeu et qu un jour si le jeu voit le jour (mais là, sans se mentir, va falloir t améliorer drastiquement en sql ou trouver quelqu un) il est préférable de garder ette notion de sac car tu voudras pouvoir débloquer plusieurs sacs (et dans ce cas dans sac y a id perso, pas dans perso id sac)


RE: BDD Sql & Php : liaison entre les tables. - Taressik - 13-07-2013

Merci du conseil TER Rowan c'est noté. Pour le moment j'en suis vraiment au stade de test et d'apprentissage. Si quelqu'un voit ce message et serait pret a me donner des petits pistons je suis preneur. Merci.


RE: BDD Sql & Php : liaison entre les tables. - Thêta Tau Tau - 13-07-2013

(12-07-2013, 06:39 PM)Ter Rowan a écrit : un objet n'est que dans un sac, il est inutile de faire une table spéciale objet sac
Ça dépends de si on voit la table objet comme une table d'instances (appartenant à un personnage) ou comme une table de "modèles" que plusieurs personnages peuvent avoir (si le joueur A a une épée en fer, un joueur B peut en avoir aussi une).


RE: BDD Sql & Php : liaison entre les tables. - yceos - 13-07-2013

Pour generaliser la chose (dans l'idee de Thêta Tau Tau) je m'orienterai vers un modele du genre:

1) PERSO ---> (idPerso, pseudo, nbrPV)
2) SAC/COFFRE ---> (idSac, idPerso, typeSac) ==> type: sac ou coffre & idPerso est une cle etrangere
3) INVENTAIRE ---> (idInv, idSac, idObjet) ==> idSac: cle etrangere vers un sac & idObjet cle etrangere vers un objet
4) OBJET ---> (idObjet, nomObjet)

Je considere ici qu'un coffre c'est en fait un type de sac.
L'objet est generique (une armure par exemple) pouvant alors etre dans plusieurs sacs (et plusieurs perso).
L'avantage c'est que si tu supprime un joueur tu peux automatiquement supprimer son/ses sacs et toujours en cascade son inventaire.
l'inconvenient, le modele est un brin plus complique de prime abord.

Pour la potion, c'est plus dans la mecanique du jeu que dans le modele de donnees que je mettrais ca.
Le joueur aurai la potion dans un sac (donc 1 entree dans la table OBJET pour decrire la potion, et une entree dans la table INVENTAIRE pour dire que le joueur en possede une) puis lorsqu'il l'utilise, le moteur du jeu lui donnera le +10 PV (action a repercuter la table PERSO de la base de donnees) et fera disparaitre l'objet du sac (suppression de la ligne dans la table INVENTAIRE).

(edit: ajout du morceau sur la potion)


RE: BDD Sql & Php : liaison entre les tables. - Taressik - 13-07-2013

Merci beaucoup Yceos j'ai enfin compris la logique !!!! Smile Smile Smile !