8800 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Pour l'inscription sur un site internet que je développe, les utilisateurs auront la possibilité de renseigner leurs coordonnées via un formulaire contenant en partie :

- une liste déroulante contenant toutes les régions françaises
- une liste déroulante contentant tous les départements, ou tous les départements d'une région sélectionnée
- un champ texte pour la ville, qui fera des propositions en fonction de ce que l'utilisateur saisit et des régions/département qu'il a sélectionné
- et enfin un champ texte pour le code postal, qui sera pré-rempli si l’utilisateur a renseignée une ville dans la liste, ou alors l’inverse le fait de renseigner le code postal lui remplira tous les autres champs

En sachant qu’aucune des ces informations n’est obligatoire, il pourra très bien renseigner uniquement sa région. J’ai récupéré un fichier .xls mis à jour contenant toutes les communes françaises (région, dép., ville, CP) de 2011.

J'aurais besoin d'un avis d'un point de vue de l'organisation des données dans la base (Mysql)
Cette structure approximative vous parait elle être la plus optimisée :

[b]tbl_region[/b]
reg_id – INT – PK, AI
reg_lib – VARCHAR

[b]tbl_dep[/b]
dep_id – INT – PK, AI
dep_lib – VARCHAR
dep_reg – INT – FK (reg_id)

[b]tbl_ville[/b]
ville_id – INT – PK, AI
ville_lib – VARCHAR
ville_reg – INT – FK (reg_id)
ville_dep – INT – FK (dep_id)

[b]tbl_user[/b]
usr_id – INT – PK, AI
…
usr_reg – INT – FK (reg_id)
usr_dep – INT – FK (dep_id)
usr_ville – INT – FK (ville_id)


Merci.
Modifié par romrom (06 Dec 2011 - 14:33)
Vu que les champs ne sont pas obligatoires, la structure de la table user est correcte. Celle des autres tables aussi; cependant, elles peuvent être optimisées:

- en FK, tbl_vile a juste besoin de l'id_dep (vu que id_reg peut être retrouvé à partir de id_dep).
- la clef primaire de tbl_region est son libellé.
- la clef primaire de tbl_dep est son libellé.
- pour les villes, si certaines ont le même nom mais dans des départements différents, la clef primaire va être (ville,département).



Là, je te donne une solution plus optimisée du point de vue base de donnée (texte en marron); mais ça va compliquer la partie programmation du site.

Personnellement, je préfère utiliser des entiers en tant que clefs, même si ça revient à dupliquer des informations: les vérifications/manipulations/traitements PHP et tout le bordel sécuritaire en sont simplifiés. Donc si j'étais toi, la partie en marron, tu l'oublies. (c'est juste à titre indicatif Smiley lol )
Merci pour ta réponse,

pour la table tbl_ville, je comprend le champ reg_id est inutile.

Mais par contre je ne comprend pas pourquoi les clés primaires des tables régions et département devraient être leur libellé pour une structure optimisée, cela voudrait dire que dans ma table user je devrait renseigner les libellés des regions / département en clé étrangère ? C'est pourtant plus lourd pour la table user de stocker des libellés que des numéros d'index.
Modifié par romrom (06 Dec 2011 - 15:17)