[SGBD] Structure de tables mysql

Structure de tables mysql [SGBD] - SQL/NoSQL - Programmation

Marsh Posté le 13-07-2003 à 23:46:08    

Hello,
j'aurais besoin de quelques explications sur la structure de mes tables mysql.
Je compte faire une sorte de jeu avec des map et des joueurs se déplacant dessus. Il y a donc plusieurs map.
J'hésite entre faire:
 
Une table "membres" avec comme champs

Code :
  1. name | password | monde | x | y

 
ou x et y seraient les coordonées du joueur sur la map et "monde" la map ou il est.
 
Ou, autre solution: deux tables, une "membres" toujours avec
 

Code :
  1. name | password

 
et ensuite une table par monde avec
 

Code :
  1. name | x | y

 
Je pense que la deuxième solution est la mieux, mais je n'en suis  pas certain, et il peut y avoir encore mieux...
Merci de votre aide.


Message édité par Kt-Redfox le 14-07-2003 à 01:05:50
Reply

Marsh Posté le 13-07-2003 à 23:46:08   

Reply

Marsh Posté le 13-07-2003 à 23:56:10    

Mauvaise cat !

Reply

Marsh Posté le 13-07-2003 à 23:56:53    

*Syl* a écrit :

Mauvaise cat !


tu veux que je mette ça dans quoi  :sleep: mauvaise sous-cat si tu veux (j'avoue que j'ai choisi un peu vite :D )

Reply

Marsh Posté le 14-07-2003 à 00:13:13    

KT-RedFOX a écrit :

Hello,
j'aurais besoin de quelques explications sur la structure de mes tables mysql.
Je compte faire une sorte de jeu avec des map et des joueurs se déplacant dessus. Il y a donc plusieurs map.
J'hésite entre faire:
 
Une table "membres" avec comme champs

Code :
  1. name | password | monde | x | y

 
ou x et y seraient les coordonées du joueur sur la map et "monde" la map ou il est.
 
Ou, autre solution: deux tables, une "membres" toujours avec
 

Code :
  1. name | password

 
et ensuite une table par monde avec
 

Code :
  1. name | x | y

 
Je pense que la deuxième solution est la mieux, mais je n'en suis  pas certain, et il peut y avoir encore mieux...
Merci de votre aide.


 
Si tu choisis la seconde, tu sais comment a quel joueur appartient tel map,x,y  :??:

Reply

Marsh Posté le 14-07-2003 à 00:16:50    

avec le champ "name" ou serait stocké le pseudo du joueur

Reply

Marsh Posté le 14-07-2003 à 00:17:51    

en fait avec la deuxième j'aurais différentes tables nommées genre  monde1,monde2 avec comme champs name,x,y


Message édité par Kt-Redfox le 14-07-2003 à 00:18:09
Reply

Marsh Posté le 14-07-2003 à 00:27:38    

KT-RedFOX a écrit :

avec le champ "name" ou serait stocké le pseudo du joueur


 
Oui d'accord mais il existe pas de relation entre la table des noms et la table où sont stockés les maps  :??:

Reply

Marsh Posté le 14-07-2003 à 00:28:31    

KT-RedFOX a écrit :

en fait avec la deuxième j'aurais différentes tables nommées genre  monde1,monde2 avec comme champs name,x,y


 
 :ouch:  
 
Oui mais dans ce cas tu seras pas dans quel monde est le joueur  :whistle:

Reply

Marsh Posté le 14-07-2003 à 00:30:37    

A ouais je capte ce que tu veux dire, dans ce cas la, je rajoute un champ "monde" dans la table ou est stockée les noms (pour la 2e solution), nan ?  :heink:

Reply

Marsh Posté le 14-07-2003 à 00:32:28    

KT-RedFOX a écrit :

A ouais je capte ce que tu veux dire, dans ce cas la, je rajoute un champ "monde" dans la table ou est stockée les noms (pour la 2e solution), nan ?  :heink:  


 
Oui voila et là ca marchera en théorie...mais c'est bien complexe cette affaire  :ouch:  
 
Pourquoi ne pas utilisé deux tables :
 
Table 1 : Pseudonyme, Password
Table 2 : Monde, X, Y, Pseudonyme


Message édité par Christaline le 14-07-2003 à 00:32:45
Reply

Marsh Posté le 14-07-2003 à 00:32:28   

Reply

Marsh Posté le 14-07-2003 à 00:36:05    

et après je fait (pour l'affichage de ma map)

Code :
  1. SELECT pseudomnyme,x,y FROM table2 WHERE monde='pouet'


 :??:  :??:  :??:  
En fait ca revient un peu a la méthode 1. C'est pas génant d'utiliser un WHERE pour la rapidité?


Message édité par Kt-Redfox le 14-07-2003 à 00:36:21
Reply

Marsh Posté le 14-07-2003 à 00:37:48    

KT-RedFOX a écrit :

et après je fait (pour l'affichage de ma map)

Code :
  1. SELECT pseudomnyme,x,y FROM table2 WHERE monde='pouet'


 :??:  :??:  :??:  
En fait ca revient un peu a la méthode 1. C'est pas génant d'utiliser un WHERE pour la rapidité?


Euh tu as deja fait du SQL ou c'est ton premier projet ?  :??:

Reply

Marsh Posté le 14-07-2003 à 00:38:22    

Christaline a écrit :


Euh tu as deja fait du SQL ou c'est ton premier projet ?  :??:  


déjà fait  :whistle:

Reply

Marsh Posté le 14-07-2003 à 00:40:17    

KT-RedFOX a écrit :


déjà fait  :whistle:  


 
Non parceque c'est clair que c'est le projet 1 le mieux (1 table) mais là j'ai fait comme tu voulais avec 2 tables...meme si ca sert a rien puisque un pseudo ne joue que sur une seule et unique map :whistle:  
 

Reply

Marsh Posté le 14-07-2003 à 00:42:30    

Christaline a écrit :


 
Non parceque c'est clair que c'est le projet 1 le mieux (1 table) mais là j'ai fait comme tu voulais avec 2 tables...meme si ca sert a rien puisque un pseudo ne joue que sur une seule et unique map :whistle:  
 
 


je veux pas absolument faire avec 2 tables :D
Je me demandais juste si le fait de faire un WHERE si il y a beaucoup de joueur va pas trop géner. Enfin il fait chaud et je suis complètement lessivé, je dois avoir perdu toutes mes facultés mentales  :cry:  
Je part donc sur la 1  :o  :jap:

Reply

Marsh Posté le 14-07-2003 à 00:44:55    

KT-RedFOX a écrit :


je veux pas absolument faire avec 2 tables :D
Je me demandais juste si le fait de faire un WHERE si il y a beaucoup de joueur va pas trop géner. Enfin il fait chaud et je suis complètement lessivé, je dois avoir perdu toutes mes facultés mentales  :cry:  
Je part donc sur la 1  :o  :jap:  


 
Ben euh un WHERE c'est pour posé une condition, un filtrage... Je vois pas en quoi ca serait plus rapide avec deux tables puisque un pseudo = 1 map  :whistle:

Reply

Marsh Posté le 14-07-2003 à 00:48:52    

Christaline a écrit :


 
Ben euh un WHERE c'est pour posé une condition, un filtrage... Je vois pas en quoi ca serait plus rapide avec deux tables puisque un pseudo = 1 map  :whistle:  


avec la 2e solution, y'aurait pas eu besoin de WHERE. (de filtrage :D). Donc même avec 10000 joueurs (soyont prévoyant :D) le WHERE nickera pas trop les perfs?

Reply

Marsh Posté le 14-07-2003 à 00:50:47    

KT-RedFOX a écrit :


je veux pas absolument faire avec 2 tables :D
Je me demandais juste si le fait de faire un WHERE si il y a beaucoup de joueur va pas trop géner. Enfin il fait chaud et je suis complètement lessivé, je dois avoir perdu toutes mes facultés mentales  :cry:  
Je part donc sur la 1  :o  :jap:  


 
Bon, plusieurs choses.
 
MySQL est un SGBD a part  entière. il a rien a faire avec PHP qui est un langage orienté Web.
 
Ensuite, tu va  avoir pleins de joueur, un joueur est une entité, donc une table.
 
Name, Password  
 
Ensuite, tu as des  cartes, hop une table :
 
monde, description (exemple)
 
Enfin, tu dois relier les deux. Un joueur peut etre sur plusieurs cartes en meme temps ? Non. Plusieurs joueurs sur la meme carte ? oui. Dans ton MCD, la clef étrangère va a  la cardinalité la plus faible, aka joueur.
 
Donc, comme tu dois relier la table joueur avec  la table monde, tu mets le nom du monde  dans la table joueur.
 
Les propriétés de localisation sont aussi propres au joueur.
 
Ca te  donne le système :
 
table joueur :
 
Nom Password X Y Monde
 
et la table monde :
 
Monde  Description
 
Si tu as pas  de description de  ton monde, ou que tu t'en fous finalement du monde et que ton monde dans ta base c'est juste un nom, tu te retrouves avec :
 
table joueur :
Nom Password X Y monde
 
table Monde:
Monde
 
La table monde  sert plus a rien.
 
Dis, MySQL et  le monde des BDDs, c'est  pas de l'ultra bidouille en PHP qu'on peux faire sans avoir rien lu dessus hein. Faudrait peut etre penser a se renseigner sur le sujet, et sur l'analyse de  l'existant, le dictionnaire des données  et tout cva, sinon, tu ira pas loin ( ca vaut poiur les intervenants du topic).
 
En gros, faut que tu soie capable de refaire toute l'analyse que je viens de te pondre.
 

Reply

Marsh Posté le 14-07-2003 à 00:51:09    

KT-RedFOX a écrit :


avec la 2e solution, y'aurait pas eu besoin de WHERE. (de filtrage :D). Donc même avec 10000 joueurs (soyont prévoyant :D) le WHERE nickera pas trop les perfs?


 
 :heink:  
 
Ca depend ce que tu veux faire...tu voulais faire quoi ? Savoir la map,x, y du joueur "Toto" par exemple non ?
 
Ben 1ere solution ou seconde tu es obligé de faire un WHERE pseudo = "Toto"  :D  
Je vois pas comment tu pourrais autrement ?  :??:

Reply

Marsh Posté le 14-07-2003 à 00:52:51    

tetedeiench a écrit :


 
Bon, plusieurs choses.
 
MySQL est un SGBD a part  entière. il a rien a faire avec PHP qui est un langage orienté Web.
 
Ensuite, tu va  avoir pleins de joueur, un joueur est une entité, donc une table.
 
Name, Password  
 
Ensuite, tu as des  cartes, hop une table :
 
monde, description (exemple)
 
Enfin, tu dois relier les deux. Un joueur peut etre sur plusieurs cartes en meme temps ? Non. Plusieurs joueurs sur la meme carte ? oui. Dans ton MCD, la clef étrangère va a  la cardinalité la plus faible, aka joueur.
 
Donc, comme tu dois relier la table joueur avec  la table monde, tu mets le nom du monde  dans la table joueur.
 
Les propriétés de localisation sont aussi propres au joueur.
 
Ca te  donne le système :
 
table joueur :
 
Nom Password X Y Monde
 
et la table monde :
 
Monde  Description
 
Si tu as pas  de description de  ton monde, ou que tu t'en fous finalement du monde et que ton monde dans ta base c'est juste un nom, tu te retrouves avec :
 
table joueur :
Nom Password X Y monde
 
table Monde:
Monde
 
La table monde  sert plus a rien.
 
Dis, MySQL et  le monde des BDDs, c'est  pas de l'ultra bidouille en PHP qu'on peux faire sans avoir rien lu dessus hein. Faudrait peut etre penser a se renseigner sur le sujet, et sur l'analyse de  l'existant, le dictionnaire des données  et tout cva, sinon, tu ira pas loin ( ca vaut poiur les intervenants du topic).
 
En gros, faut que tu soie capable de refaire toute l'analyse que je viens de te pondre.
 
 


Ah oué toi aussi tu t'es dit "c un noob celui là"  :whistle:  
 
J'allais tout lui expliquer aussi, mais comme tu l'as fait  ;)

Reply

Marsh Posté le 14-07-2003 à 00:53:20    

Une autre chose importante :
*Dans ton systeme, deux joueurs ne peuvent avoir le meme nom, pareil pour les mondes. T'y as pensé ?
*Dans toute ton analyse tu as pris  lle probleme a l'envers, mettre pseudonyme  dans le monde  est débile. Ca voudrait dire que un joueur peut etre dans plusieurs  mondes  ( ben oui... réflléchit si tu entre une ligne dans ta table... ) et un monde ne peut contenir qu'un joueur...
 
Tu te retrouves avec un joli jeu de dieus vivants solitaires avec un joli paradoxe.

Reply

Marsh Posté le 14-07-2003 à 00:54:47    

Christaline a écrit :


 
 :heink:  
 
Ca depend ce que tu veux faire...tu voulais faire quoi ? Savoir la map,x, y du joueur "Toto" par exemple non ?
 
Ben 1ere solution ou seconde tu es obligé de faire un WHERE pseudo = "Toto"  :D  
Je vois pas comment tu pourrais autrement ?  :??:  


je veux afficher une carte (qui sera découpée en plusieurs cases) avec les différents joueurs dessus. C'est plus clair? :D
bon c pas grave en fait, je vais me lancer, puis on verra bien :D

Reply

Marsh Posté le 14-07-2003 à 00:55:59    

KT-RedFOX a écrit :


je veux afficher une carte (qui sera découpée en plusieurs cases) avec les différents joueurs dessus. C'est plus clair? :D
bon c pas grave en fait, je vais me lancer, puis on verra bien :D


 
Tu savais au moins les notions que tetedeiench a évoqué ?  :sarcastic:  
 
Parceque sinon [:mouais]

Reply

Marsh Posté le 14-07-2003 à 00:57:11    

Christaline a écrit :


Ah oué toi aussi tu t'es dit "c un noob celui là"  :whistle:  
 
J'allais tout lui expliquer aussi, mais comme tu l'as fait  ;)  


 
Je ne commenterai pas :D
 
Pour le where, il est essentiel à toute requete (  j'imagine mal des  requetes sans WHERE ou GROUP BY... ) pour lui donner une signification et faire un tri.
 
Le where est  couteux dans le sens ou il te coute un parcours de  ta BDD... bref, spa grand chose.
 
Au pire tu peux faire un index sur la clef étrangère *monde* dans la table*joueur* accéllérant ainsi le where, et  encore dans ton cas on pinaille.
 
Si un systeme comme ca est pas capable de  gérer 1 millions de joueurs simultanés dans problème, je me coupe les burnes. Y a rien dans ta base la hein. Qu'on se pose des questions dans un systeme a 80  tables et jointures je veux bien, mais la...
 
KT, t'es sur d'avoir déjà  travaillé dans les bases  de données ?

Reply

Marsh Posté le 14-07-2003 à 00:59:17    

KT-RedFOX a écrit :


je veux afficher une carte (qui sera découpée en plusieurs cases) avec les différents joueurs dessus. C'est plus clair? :D
bon c pas grave en fait, je vais me lancer, puis on verra bien :D


 
Mouarf, tu vas te  marrer.
 
Entre nous, va lire un chti pneu sur les bases  de données.
 
Enfin, essaie  de  retenir ceci :
 
-MySQL c'est  différent de  PHP
-Un identifiant est unique
-Les liens ont des cardinalités pour lesquelles il faut réfléchir un tantinet  pour savoir ou placer la clef étrangère.
-Pense a toutes les données dont tu aura besin avant  de te lancer la dedans ( dico des données)
 
et on aura déjà franchi un graaaaaand pas :D

Reply

Marsh Posté le 14-07-2003 à 00:59:22    

nan je travaille pas dans les bdd, j'ai autre chose a faire, c mon premier projet sérieux et j'ai pas touché a mysql avant a part pour pondre un script de news, voila  :o  
Merci quand même pour tes explications

Reply

Marsh Posté le 14-07-2003 à 00:59:45    

tetedeiench a écrit :


 
Je ne commenterai pas :D
 
Pour le where, il est essentiel à toute requete (  j'imagine mal des  requetes sans WHERE ou GROUP BY... ) pour lui donner une signification et faire un tri.
 
Le where est  couteux dans le sens ou il te coute un parcours de  ta BDD... bref, spa grand chose.
 
Au pire tu peux faire un index sur la clef étrangère *monde* dans la table*joueur* accéllérant ainsi le where, et  encore dans ton cas on pinaille.
 
Si un systeme comme ca est pas capable de  gérer 1 millions de joueurs simultanés dans problème, je me coupe les burnes. Y a rien dans ta base la hein. Qu'on se pose des questions dans un systeme a 80  tables et jointures je veux bien, mais la...
 
KT, t'es sur d'avoir déjà  travaillé dans les bases  de données ?


 
Mais je suis pas sur que ca lui serve a grand chose ce que tu expliques [:mouais]
 
Il ferait mieux d'apprendre les bases au lieu de se lancer dans un tel projet...  :sarcastic:

Reply

Marsh Posté le 14-07-2003 à 01:00:33    

tetedeiench a écrit :


 
Mouarf, tu vas te  marrer.
 
Entre nous, va lire un chti pneu sur les bases  de données.
 
Enfin, essaie  de  retenir ceci :
 
-MySQL c'est  différent de  PHP
-Un identifiant est unique
-Les liens ont des cardinalités pour lesquelles il faut réfléchir un tantinet  pour savoir ou placer la clef étrangère.
-Pense a toutes les données dont tu aura besin avant  de te lancer la dedans ( dico des données)
 
et on aura déjà franchi un graaaaaand pas :D


c pour ca que je me lance pas tout de suite  :o

Reply

Marsh Posté le 14-07-2003 à 01:01:53    

KT-RedFOX a écrit :

nan je travaille pas dans les bdd, j'ai autre chose a faire, c mon premier projet sérieux et j'ai pas touché a mysql avant a part pour pondre un script de news, voila  :o  
Merci quand même pour tes explications


 
OK, t'as  fait une et une seule table quoi ;) style une table NEWS avec en attributs titre corps nomduposteur date quoi.
 
Bon enfin bref ;)
 
Sérieusement, renseigne toi la dessus un peu plus en avant. Une base de données qui fait une table, entre nous, c'est guère mieux qu'un tableau dans un fichier, a la base :D

Reply

Marsh Posté le 14-07-2003 à 01:02:16    

Christaline a écrit :


 
Mais je suis pas sur que ca lui serve a grand chose ce que tu expliques [:mouais]
 
Il ferait mieux d'apprendre les bases au lieu de se lancer dans un tel projet...  :sarcastic:  


j'ai parfaitement compris ce qu'il a dit. D'accord, je connait a peine mysql, ca m'empêche pas de vouloir m'en servir...

Reply

Marsh Posté le 14-07-2003 à 01:03:57    

tetedeiench a écrit :


 
OK, t'as  fait une et une seule table quoi ;) style une table NEWS avec en attributs titre corps nomduposteur date quoi.
 
Bon enfin bref ;)
 
Sérieusement, renseigne toi la dessus un peu plus en avant. Une base de données qui fait une table, entre nous, c'est guère mieux qu'un tableau dans un fichier, a la base :D


mais qu'est ce que tu crois que je fait en venant ici?  
Je cherchait un peu d'aide pour débuter...

Reply

Marsh Posté le 14-07-2003 à 01:04:04    

KT-RedFOX a écrit :


j'ai parfaitement compris ce qu'il a dit. D'accord, je connait a peine mysql, ca m'empêche pas de vouloir m'en servir...


 
Ah oué  :??:  
 
Dico des données, MCD, MLD, Relation, Graphe des dépendances fonctionnels, cardinalités, ...
 
Tu sais ce que ca veut dire tout ca  :??:

Reply

Marsh Posté le 14-07-2003 à 01:04:07    

KT-RedFOX a écrit :


j'ai parfaitement compris ce qu'il a dit. D'accord, je connait a peine mysql, ca m'empêche pas de vouloir m'en servir...


 
Ben mets ca dans la bonne cat au moins alors ;)
 
Et oui tu veux t'en servir. mais pour s'en servir faut savoir un tantinet s'en servir avant de  demander  de l'aide.
 
lire un peu, se documenter quoi.
 
Car bon, une analyse comme la tienne + le coup du WHERE couteux, ben  j'ai du mal j'avoue :D J'expliquerai pas ca tous les jours :D

Reply

Marsh Posté le 14-07-2003 à 01:05:25    

Ca  me fait penser aux gars  qui apellent le SAV et  font suer les  gens au bout sans lire  la notice en fait :D

Reply

Marsh Posté le 14-07-2003 à 01:07:25    

tetedeiench a écrit :

Ca  me fait penser aux gars  qui apellent le SAV et  font suer les  gens au bout sans lire  la notice en fait :D


 
[:zytrayaisse]

Reply

Marsh Posté le 14-07-2003 à 01:12:26    

tetedeiench a écrit :


 
Ben mets ca dans la bonne cat au moins alors ;)
 
Et oui tu veux t'en servir. mais pour s'en servir faut savoir un tantinet s'en servir avant de  demander  de l'aide.
 
lire un peu, se documenter quoi.
 
Car bon, une analyse comme la tienne + le coup du WHERE couteux, ben  j'ai du mal j'avoue :D J'expliquerai pas ca tous les jours :D


désolé  :sweat:  
Et puis de toutes façons, j'ai pas besoinde vous je sais faire un script de news avec une table Mysql , donc je le connait parfaitement  :o  :D  
Bon, je vais au lit, ça me changera les idées. :D
Quoique, je vais p-e lire la doc de mysql avant :D

Reply

Marsh Posté le 14-07-2003 à 01:13:50    

Voilà une bonne attitude :D

Reply

Marsh Posté le 14-07-2003 à 01:16:11    

tetedeiench a écrit :

Voilà une bonne attitude :D


 
T'etais pas un moderateur avant toi ?  :??:

Reply

Marsh Posté le 14-07-2003 à 01:17:36    

je regarde, mate un passage au pif et tombe sur
"InnoDB fournit à MySQL un gestionnaire de table transactionnelle (compatible ACID  ), avec validation (commits), annulations (rollback) et capacités de restauration après crash. InnoDB utilise un verrouillage de lignes, et fournit des lectures cohérentes comme Oracle, sans verrous. Ces fonctionnalités accroissent les possibilités d'utilisation simultanées des tables, et les performances. Il n'y a pas de problème de queue de verrous avec InnoDB, car les verrous de lignes utilisent très peu de place. Les tables InnoDB sont les premières tables MySQL qui supportent les contraintes de clés étrangères ( FOREIGN KEY  )."
 
bon, y'a du boulot  :D

Reply

Marsh Posté le 14-07-2003 à 01:19:33    

KT-RedFOX a écrit :

je regarde, mate un passage au pif et tombe sur
"InnoDB fournit à MySQL un gestionnaire de table transactionnelle (compatible ACID  ), avec validation (commits), annulations (rollback) et capacités de restauration après crash. InnoDB utilise un verrouillage de lignes, et fournit des lectures cohérentes comme Oracle, sans verrous. Ces fonctionnalités accroissent les possibilités d'utilisation simultanées des tables, et les performances. Il n'y a pas de problème de queue de verrous avec InnoDB, car les verrous de lignes utilisent très peu de place. Les tables InnoDB sont les premières tables MySQL qui supportent les contraintes de clés étrangères ( FOREIGN KEY  )."
 
bon, y'a du boulot  :D  


 
Enfin t'as pas besoin de connaitre ca pour faire ton projet quand meme  :p  
 
Suffit d'avoir les bases c'est tout  :o

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed