JeuWeb - Crée ton jeu par navigateur
[Réglé] Modéliser des tables SQL - 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églé] Modéliser des tables SQL (/showthread.php?tid=2132)



[Réglé] Modéliser des tables SQL - appzer0 - 12-12-2007

Ma base MySQL pour mon projet a la structure définie ici : http://chobodo.free.fr/wakka.php?wiki=ModelisationDeLaBaseDeDonnees .

Il se trouve que chaque épreuve (les quêtes) ne sont activables qu'une ou plusieurs fois par jour (on peut faire l'épreuve x à raison de y fois par jour par exemple) ; j'ai donc besoin de logger les dates et heures de dernière visite dans ma base pour chaque épreuve.

Dois-je selon vous créer une table de "traçage" comme ceci :

-- Table tracking --
| ID membre INT | ID quête INT | derniere_date DATE | derniere_heure TIME

1) Me fourvoie-je sur la modélisation à votre avis ?

2) Puis-je intégrer ces données dans une table existante (je pense à ma table de "jointure" entre ID membres et ID quêtes) ?


RE: Modéliser des tables SQL - Roworll - 12-12-2007

Si tu as déjà une jointure entre le joueur et les quêtes, les informations sur le temps/traçage ont leur place dedans.

Ta table aurait alors la tête suivante:
Code PHP :
<?php 
CREATE TABLE
`mb_quests` (
`
mb_id` int(10) unsigned NOT NULL default '0',
`
quest_id` int(10) unsigned NOT NULL default '0',
`
quest_mb_time` int(10) unsigned NOT NULL default '0'
PRIMARY KEY (`mb_id`, `quest_id`)
)
ENGINE=MyISAM DEFAULT CHARSET=latin1 ;

Tu remarqueras que j'ai viré l'id dans cette table.
Il ne sert en effet à rien car le couple mb_id / quest_id doit être unique (et fait donc office de clef primaire).
De plus, cette table a peu de chance d'être référencée ailleurs ce qui rend l'id encore plus inutile.

Ensuite, pour stocker le temps, j'utilise un INT (enregistré avec UNIX_TIMESTAMP(NOW()))
C'est moins lisible dans la base de données mais plus facile à manipuler vu que c'est une valeur directe en milisecondes.


RE: Modéliser des tables SQL - Plume - 12-12-2007

Je plussoie Roworll.

Par contre, mb_id, c'est la même chose que membre_id, non ?
J'trouve inconvenu de ne pas utiliser le même nom d'attribut ..

~L~


RE: Modéliser des tables SQL - Sephi-Chan - 12-12-2007

Je plussoie également, sauf en ce qui concerne le stockage de la date. Une précision en secondes suffit amplement, utiliser un champ TIMESTAMP me paraît donc plus justifié puisqu'il facilite l'utilisation du temps sans avoir à le traiter.


RE: Modéliser des tables SQL - Shidame - 12-12-2007

Je plussoie également, et juste pour préciser et pour donner une piste poiur ceux que ca interesse cette table `mb_quests` est ce qu'on appelle une entité faible c'est à dire une table représentant une relation n-m.
A savoir qu'un joueur peut effectuer 0..* quêtes, généralement pour ce type de table comme l'a souligné Roworll il n'est pas necessaire de rajouter un identifiant, le couple de chacune des deux tables liées faisant office de primary key


RE: Modéliser des tables SQL - Plume - 12-12-2007

Je crois bien que pour n'importe quelle table liante, il est { très } rare de voir un identifiant qui ne soint pas une clé étrangère.

~L~


RE: Modéliser des tables SQL - Shidame - 12-12-2007

Mais la il n'y a pas besoin d'identifiant, la clef primaire c'est un couple de FK. (j'ai peut être mal compris ce que tu voulais dire Lex)


RE: Modéliser des tables SQL - Plume - 12-12-2007

Je crois oui xD
Ce que je disais c'est que les cas où une table liante a besoin d'un identifiant autre que le couple d'identifiants des tables liées, est un cas rare. Je dis rare comme une réserve. Je suis pas capable de dire quels cas le demandent, c'est pas pour ça qu'il n'y en a pas Smile

~L~


RE: Modéliser des tables SQL - appzer0 - 13-12-2007

Merci beaucoup à tous, je vais partir sur le modèle de Roworll mais conserver le format de type TIMESTAMP pour des raisons pratiques (j'utilise cette classe : http://www.wikistuce.info/doku.php/php/classe/operation_sur_les_dates).

Je tague le topic en [Réglé] et vous fais des bisous dans le cou pour la peine (à dire avé l'accent espagnol).