29-04-2016, 02:36 PM
(29-04-2016, 02:18 PM)xanthius a écrit : En gros quand un joueur s'inscrit je ne fais qu'une insertion dans les tables, je ne m'occupe pas de l'ID je laisse à la BDD cette gestion. D'où l'auto incrément.
Si par exemple dans les tables A, B, C on est à la ligne 18 et qu'un joueur vient à s'inscrit alors automatiquement il aura l'id 19 dans les tables A,B,C.
Quand je parle de la possibilité d'un plantage j'ai cette exemple en tête :
Dans ma BDD, les tables qui seront utilisées pour l'inscription sont à la ligne 20, toi et moi nous nous inscrivons sur le jeu pratiquement au même moment, dans les conditions normales tu devrais avoir l'id 21 sur toutes les tables (A,B,C) et moi l'id 22 ou inversement mais imaginons un instant que le système pour une raison x ou y s'emballent
... ...
Ah mais je viens de comprendre .. ça peut pas s'emballer en fait fin si, si j'oubli de supprimer un champs dans une table et dans ce cas et dans cet unique cas, tout partira en cacahuète. Bref, Je n'ai rien dis ..
C'est pour cela que dans ta table B et C, personnellement, je mettrais un champ supplémentaire qui servirait de référence à l'ID de la table A.
Ainsi, même si deux personnes s'inscrivent en même temps, je reprend ton exemple :
J'arrive avec l'ID 21 toi l'ID 22 dans la table A.
Ma connexion échoue, je n'ai pas eu le temps d'être inscrit sur les tables B et C (admettons).
On se retrouve avec cette structure si tu n'utilise que des ID auto-incrementé :
Table A:
ID | champ_1 | champ_2
21 | moi | foo
22 | toi | foo
Table B:
ID | c1 | c2
20 | 1 | 2
21 | 1 | 2
Je vois donc 2 problème :
Si ma connexion échoue, j'imagine que je reçois une erreur alors que je pourrais techniquement me connecté et avoir mes infos dans table B.
Toi par contre, tu n'auras aucune donnée dans table B...
Imagine un système de rpg ou le joueur choisis ça classe, je choisi mage tu choisi guerrier, on s'inscris en même temps, imagine ma frustration si en me connectant j'obtiens la classe guerrier lol
La méthode que j'utilise ferais la relation sur ENTITY_ID:
Table A:
ID | champ_1 | champ_2
21 | moi | foo
22 | toi | foo
Table B:
ID | c1 | c2 | ENTITY_ID
20 | 1 | 2 | 20
21 | 1 | 2 | 22
Puisque même s'il y as un gap sur l'ID, l'entity_id pointeras sur l'ID de Table A.
Parceque si quelqu'un s'inscrit maintenant tu aurais :
Table A:
ID | champ_1 | champ_2
21 | moi | foo
22 | toi | foo
22 | inconnu| foo
Table B:
ID | c1 | c2 | ENTITY_ID
20 | 1 | 2 | 20
21 | 1 | 2 | 22
22 | 1 | 2 | 23