Structure de tables mysql [SGBD] - SQL/NoSQL - Programmation
Marsh Posté le 13-07-2003 à 23:56:53
*Syl* a écrit : Mauvaise cat ! |
tu veux que je mette ça dans quoi mauvaise sous-cat si tu veux (j'avoue que j'ai choisi un peu vite )
Marsh Posté le 14-07-2003 à 00:13:13
KT-RedFOX a écrit : Hello,
|
Si tu choisis la seconde, tu sais comment a quel joueur appartient tel map,x,y
Marsh Posté le 14-07-2003 à 00:16:50
avec le champ "name" ou serait stocké le pseudo du joueur
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
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
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 |
Oui mais dans ce cas tu seras pas dans quel monde est le joueur
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 ?
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 ? |
Oui voila et là ca marchera en théorie...mais c'est bien complexe cette affaire
Pourquoi ne pas utilisé deux tables :
Table 1 : Pseudonyme, Password
Table 2 : Monde, X, Y, Pseudonyme
Marsh Posté le 14-07-2003 à 00:36:05
et après je fait (pour l'affichage de ma map)
Code :
|
En fait ca revient un peu a la méthode 1. C'est pas génant d'utiliser un WHERE pour la rapidité?
Marsh Posté le 14-07-2003 à 00:37:48
KT-RedFOX a écrit : et après je fait (pour l'affichage de ma map)
|
Euh tu as deja fait du SQL ou c'est ton premier projet ?
Marsh Posté le 14-07-2003 à 00:38:22
ReplyMarsh Posté le 14-07-2003 à 00:40:17
KT-RedFOX 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
Marsh Posté le 14-07-2003 à 00:42:30
Christaline a écrit : |
je veux pas absolument faire avec 2 tables
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
Je part donc sur la 1
Marsh Posté le 14-07-2003 à 00:44:55
KT-RedFOX 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
Marsh Posté le 14-07-2003 à 00:48:52
Christaline a écrit : |
avec la 2e solution, y'aurait pas eu besoin de WHERE. (de filtrage ). Donc même avec 10000 joueurs (soyont prévoyant ) le WHERE nickera pas trop les perfs?
Marsh Posté le 14-07-2003 à 00:50:47
KT-RedFOX 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.
Marsh Posté le 14-07-2003 à 00:51:09
KT-RedFOX a écrit : |
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"
Je vois pas comment tu pourrais autrement ?
Marsh Posté le 14-07-2003 à 00:52:51
tetedeiench a écrit : |
Ah oué toi aussi tu t'es dit "c un noob celui là"
J'allais tout lui expliquer aussi, mais comme tu l'as fait
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.
Marsh Posté le 14-07-2003 à 00:54:47
Christaline 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?
bon c pas grave en fait, je vais me lancer, puis on verra bien
Marsh Posté le 14-07-2003 à 00:55:59
KT-RedFOX a écrit : |
Tu savais au moins les notions que tetedeiench a évoqué ?
Parceque sinon
Marsh Posté le 14-07-2003 à 00:57:11
Christaline a écrit : |
Je ne commenterai pas
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 ?
Marsh Posté le 14-07-2003 à 00:59:17
KT-RedFOX 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
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
Merci quand même pour tes explications
Marsh Posté le 14-07-2003 à 00:59:45
tetedeiench a écrit : |
Mais je suis pas sur que ca lui serve a grand chose ce que tu expliques
Il ferait mieux d'apprendre les bases au lieu de se lancer dans un tel projet...
Marsh Posté le 14-07-2003 à 01:00:33
tetedeiench a écrit : |
c pour ca que je me lance pas tout de suite
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 |
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
Marsh Posté le 14-07-2003 à 01:02:16
Christaline 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...
Marsh Posté le 14-07-2003 à 01:03:57
tetedeiench a écrit : |
mais qu'est ce que tu crois que je fait en venant ici?
Je cherchait un peu d'aide pour débuter...
Marsh Posté le 14-07-2003 à 01:04:04
KT-RedFOX a écrit : |
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
Marsh Posté le 14-07-2003 à 01:04:07
KT-RedFOX 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 J'expliquerai pas ca tous les jours
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
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 |
Marsh Posté le 14-07-2003 à 01:12:26
tetedeiench a écrit : |
désolé
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
Bon, je vais au lit, ça me changera les idées.
Quoique, je vais p-e lire la doc de mysql avant
Marsh Posté le 14-07-2003 à 01:16:11
ReplyMarsh 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
Marsh Posté le 14-07-2003 à 01:19:33
KT-RedFOX a écrit : je regarde, mate un passage au pif et tombe sur |
Enfin t'as pas besoin de connaitre ca pour faire ton projet quand meme
Suffit d'avoir les bases c'est tout
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
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
et ensuite une table par monde avec
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