8796 sujets

Développement web côté serveur, CMS

Hello tout le monde,
Voila jai une petite question sur la maniere de modeliser dans ma base un systeme de localisation.

En gros, je souhaite permettre a l'utilisateur de localaliser le lieu ou il habite.
Mon probleme est que le site est international et que stocker dans la base ttes les villes du monde, les regions, etc est impossible.

Je peux deja stocker tous les pays. Ca c'est bon.
Mais ensuite pour les regions et departements de france ca se complique car les autres pays nont pas forcement la meme structure.
Quant a la maniere d'enrichir la base, la seule solution que je vois est un champs ville par exemple avec autocompletion ..

Au final, cela risque d'etre un peu tricky pour faire des recherches d'utilisateur selon sa location .. En gros, je n'aurais pas le choix: pays > ville ?

Voila si vous avez des idees sur la structure de la base ou la methode je suis preneur..
Merci d'avance pour votre aide.
Bonjour,

Tu as deux solutions :

1. Tu prévois une table ville (id_ville, id_pays, nom_ville, code_postal), qui va être énorme.

2. Tu laisse l'utilisateur saisir le nom de sa ville. L'inconvénient makeur est que tu devra faire en sorte que le nom de la ville soit bien orthographié, et il risque d'y avoir des confusions entre des villes qui ont le même nom dans des pays différents (déjà qu'il y a des villes qui portent le même nom en france)).

La première solution sera à privilégier si tu as un grand nombre d'utilisateurs (un très grand nombre).

Il est également possible de "fusionner" les deux solutions en ayant un/des fichiers XML qui contiendont les données des villes/pays et qui permettront de remplir des listes déroulante avec lesquelles l'utilisateur pourra faire son choix et dans ta base de données, les informations de la ville seront directement inscrite dans la table utilisateur (cela peux permettre de contrer les problème d'orthographe et de confusion de villes, mais pas le problème de redondance).

Si tu choisi la solution 2 tu pourra améliorer les temps de recherche en créant un index sur les noms de villes et/ou les code postaux.
Modérateur
Hello,

Laurie-Anne a écrit :

...

1. Tu prévois une table ville (id_ville, id_pays, nom_ville, code_postal), qui va être énorme.
...


Attention, j'ai l'impression que tu as saisie trop vite la table que tu as mise en exemple ^^. Je crois que ce serait plutôt ceci :

* table ville (id_ville, nom_ville, code_postal, ...)
* table pays (id_pays, nom_pays, code_international,..)
* table membre (id_membre, prenom, nom, adresse1, adresse2, id_ville, id_pays, ...)

Laurie-Anne a écrit :

2. Tu laisse l'utilisateur saisir le nom de sa ville. L'inconvénient makeur est que tu devra faire en sorte que le nom de la ville soit bien orthographié, et il risque d'y avoir des confusions entre des villes qui ont le même nom dans des pays différents (déjà qu'il y a des villes qui portent le même nom en france)).


Faire attention avec ce type de saisie :
* PARIS
* Paris
* paris

Je pense que pour contrer ce genre de chose, il serait judicieux d'utiliser avant l'insertion dans la BDD, strtolower() et ucfirst() ou strtoupper() dans le cas d'un script php.

Il y a également de grandes chances que tu te retrouves avec des doublons. Il te suffit de faire une requête adéquate (en exemple, je pense à : distinct). Aussi, fait toujours une sélection (afin d'analyser) avant de supprimer quoique ce soit dans une BDD. Smiley cligne

Bonne journée.
Modifié par Nolem (16 Jul 2009 - 14:29)
Nolem a écrit :
Attention, j'ai l'impression que tu as saisie trop vite la table que tu as mise en exemple ^^. Je crois que ce serait plutôt ceci :
* table ville (id_ville, nom_ville, code_postal, ...)
* table pays (id_pays, nom_pays, code_international,..)
* table membre (id_membre, prenom, nom, adresse1, adresse2, id_ville, id_pays, ...)

Étant donné qu'une ville appartient à un et un seul pays, il est plus judicieux de faire :
* table ville (id_ville, id_pays(foreign key) nom_ville, code_postal, ...)
* table pays (id_pays, nom_pays, code_international,..)
* table membre (id_membre, prenom, nom, adresse1, adresse2, id_ville, ...)[/
donc non je n'avais pas été trop vite.

Nolem a écrit :
Faire attention avec ce type de saisie :
* PARIS
* Paris
* paris

Il y a également de grandes chances que tu te retrouves avec des doublons. Il te suffit de faire une requête adéquate (en exemple, je pense à : distinct). Aussi, fait toujours une sélection (afin d'analyser) avant de supprimer quoique ce soit dans une BDD. Smiley cligne

C'est également ce que j'avais dit (bon après, je ne me suis peut-être pas exprimée clairement).
Modifié par Laurie-Anne (16 Jul 2009 - 15:17)
Merci pour vos reponses !

Vous pensez quoi sinon de la structure region, departement ? adaptee pour la france mais non adaptee pour les autres pays ?

Je pensais avoir une structure du type:
TABLE VILLE (id_ville, id_dep, id_pays, nom_ville)
TABLE DEP (id_dep, id_region, nom_dep)
TABLE_REG (id_reg, nom_reg)
TABLE PAYS (id_pays, ...)

Sachant que tout ca limite la recherche par pays puis par ville pour les pays autre que la france ..
Il y a beaucoup de pays qui ont un système similaire aux départements (les états unis avec les états, les régions en Angleterre ou en Belgique...), donc oui, cela peut être pertinent.

Les régions elles sont superflues selon moi.

Par contre attention si tu utilise les départements, dans la table ville, l'id du pays n'est plus nécessaire (il est dans la table dep), pire il est redondant.
Modifié par Laurie-Anne (16 Jul 2009 - 16:47)
Salut Smiley smile

Une localisation graphique (grâce à l'API google Map) qui n'utilise que la latitude/longitude ne te suffirais pas ?

Au niveau BDD ça ne fairais que 2 champs.

Ensuite, est-ce que GGM est capable de te sortir les noms des villes, il y a quelques temps, ce n'était pas possible, est-ce toujours le cas ?