08-06-2010, 06:15 PM
Coucou, j'ai une petite quesiton de modélisation:
j'ai deux notions proches mais pas équivalentes dans le traitement et je souhaitais savoir ce que vous en pensiez :
notion1 : "carte"
table :
id / id lieu père / x / y / z / classe / type
id : définit et représente une case de la carte
id lieu père : id d'une "région" (somme de cases, pas de règle mathématiques pour définir une frontière, la région est l'ensemble des cases dont l'id lieu père est l'id de la région)
x : position horizontale, absolue, sur la carte
y : position verticale, absolue, sur la carte
z : altitude max du sol (exemple mer = 0, mont blanc 4800 et des brouettes, prairie chez moi 130, prairie chez argorate 300, etc...)
classe : l'id qui me permettra lors du chargement de générer la classe (ex 1=>plaine, 2=>forêt, etc...)
type : une information compémentaire pour le constructeur de la classe
(grosso modo : $case = new $classe($type))
la carte ne bouge pas, les terraformations(changement de classe et de type) seront très rares. Toute autre donnée concernant la carte sera dans une table relation de type n,n (donc pas dans cette table)
notion2 : "lieu"
j'appelle lieu tout ce qui est "spécifique" (exemple la maison de machin, ou une pièce de la maison, ou un "bosquet notable" ou un village...etc)
table de type :
id / id lieu père / x / y / z / classe / type
id : définit et représente le lieu
id lieu père : où est situé le lieu ? donc cet id peut être l'id d'un autre lieu (l'id du village pour une maison, l'id d'une maison pour une pièce, etc...)
mais aussi l'id d'une case de la carte (la notion 1, exemple le village est sur la plaine truc muche, la grotte notable est sur le mont blanc....)
x : position horizontale, relative, basé sur le lieu père (pour permettre un affichage du détail du père
y : position verticale, relative, basé sur le lieu père (pour permettre un affichage du détail du père
z : altitude / étage
classe : l'id qui me permettra lors du chargement de générer la classe (ex 1=>village, 2=>maison, etc...)
type : une information compémentaire pour le constructeur de la classe
(grosso modo : $case = new $classe($type))
Exemple :
"maison" id = 30; id pere = 28 (l'id du village de rowan), x= 1 (à gauche de l'écran), y=1 (en haut de l'écran), z=0 (ben oui la maison est au sol...)
"la pièce principale de la maison" id = 31; id pere = 30, x = 1, y =1, z = 0 (rez de chaussé)
"la cave" id = 32; id pere = 30; x =1; y=1; z=-1 (sous sol)
les lieux varient bcp plus souvent (on peut construire une maison, rajouter une piece, brûler un village, etc...). Et je ne sais pas si d'autres infos seront utiles.
DU COUP.... une ou deux tables ?
une table :
+ même structure donc même code,
+ id commun entre les deux notions facilitant la relation "père fils" (id père)
deux tables :
+ permet de faire du transactionnel sur les lieux et pas sur la carte (mais est ce vraiment utile pour ce besoin de faire du transactionnel, pas sûr)
+ évolution plus facile (quoique, je pourrais créer une table "détail" pour les lieux spécifiquement par exemple)
alors avant de me lancer dedans, qu'en pensez vous ?
j'ai deux notions proches mais pas équivalentes dans le traitement et je souhaitais savoir ce que vous en pensiez :
notion1 : "carte"
table :
id / id lieu père / x / y / z / classe / type
id : définit et représente une case de la carte
id lieu père : id d'une "région" (somme de cases, pas de règle mathématiques pour définir une frontière, la région est l'ensemble des cases dont l'id lieu père est l'id de la région)
x : position horizontale, absolue, sur la carte
y : position verticale, absolue, sur la carte
z : altitude max du sol (exemple mer = 0, mont blanc 4800 et des brouettes, prairie chez moi 130, prairie chez argorate 300, etc...)
classe : l'id qui me permettra lors du chargement de générer la classe (ex 1=>plaine, 2=>forêt, etc...)
type : une information compémentaire pour le constructeur de la classe
(grosso modo : $case = new $classe($type))
la carte ne bouge pas, les terraformations(changement de classe et de type) seront très rares. Toute autre donnée concernant la carte sera dans une table relation de type n,n (donc pas dans cette table)
notion2 : "lieu"
j'appelle lieu tout ce qui est "spécifique" (exemple la maison de machin, ou une pièce de la maison, ou un "bosquet notable" ou un village...etc)
table de type :
id / id lieu père / x / y / z / classe / type
id : définit et représente le lieu
id lieu père : où est situé le lieu ? donc cet id peut être l'id d'un autre lieu (l'id du village pour une maison, l'id d'une maison pour une pièce, etc...)
mais aussi l'id d'une case de la carte (la notion 1, exemple le village est sur la plaine truc muche, la grotte notable est sur le mont blanc....)
x : position horizontale, relative, basé sur le lieu père (pour permettre un affichage du détail du père
y : position verticale, relative, basé sur le lieu père (pour permettre un affichage du détail du père
z : altitude / étage
classe : l'id qui me permettra lors du chargement de générer la classe (ex 1=>village, 2=>maison, etc...)
type : une information compémentaire pour le constructeur de la classe
(grosso modo : $case = new $classe($type))
Exemple :
"maison" id = 30; id pere = 28 (l'id du village de rowan), x= 1 (à gauche de l'écran), y=1 (en haut de l'écran), z=0 (ben oui la maison est au sol...)
"la pièce principale de la maison" id = 31; id pere = 30, x = 1, y =1, z = 0 (rez de chaussé)
"la cave" id = 32; id pere = 30; x =1; y=1; z=-1 (sous sol)
les lieux varient bcp plus souvent (on peut construire une maison, rajouter une piece, brûler un village, etc...). Et je ne sais pas si d'autres infos seront utiles.
DU COUP.... une ou deux tables ?
une table :
+ même structure donc même code,
+ id commun entre les deux notions facilitant la relation "père fils" (id père)
deux tables :
+ permet de faire du transactionnel sur les lieux et pas sur la carte (mais est ce vraiment utile pour ce besoin de faire du transactionnel, pas sûr)
+ évolution plus facile (quoique, je pourrais créer une table "détail" pour les lieux spécifiquement par exemple)
alors avant de me lancer dedans, qu'en pensez vous ?