MCD web marchand : adresse client

Petit nouveau ! | 6 Messages

17 oct. 2007, 15:46

Bonjour à tous,

Je prepare un site marchand et je me pose une question concernant mon modèle de données. Voici ma problématique :

Un client passe une commande. On a une adresse de facturation qui est celle du client et une adresse de Livraison qui est celle du destinataire de la commande. Je me retrouve donc avec les tables suivantes (entres autres bien sûr) :
- Client
- Commande
- Adresse

Mon souci est de savoir où positionner le nom et prénom (et éventuellement numéro de téléphone) du client.

En effet ma table Adresse va devoir contenir les champs Nom et Prénom car j’en ai besoin pour l’adresse du destinataire. Par contre concernant le Client, ces champs nom et prenom peuvent être liés soit à la definition du Client (tout comme son login, son pmot de passe, son email,…) soit à son adresse. Alors où les mettre ? Dans la table Client ou dans la table Adresse ?

Pour finir, l'adresse du destinataire est liée à la Commande. Par contre l'adresse de Facturation (celle cu client) doit elle être également liée à la commande ou doit elle être lié au Client (avec donc dans ce dernier cas la Commande qui est liée au client pour boucler la boucle des relations entre tables).

J'espere que ma problematique est assez claire car ce n'est pas evident à expliquer par écrit.

Merci par avance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 oct. 2007, 16:48

J'aurais 2 solutions à te proposer

1/ Pas de table adresse et toutes les informations dans la table client. En effet, pourquoi créer une table adresse si tu sais que tu auras 1 adresse de facturation et 1 adresse de livraison, et que tu peux donc prévoir le nombre de champs voulu.

2/ Si tu préfères prévoir aucun destinataire (adresse facturation = adresse livraison) ou plusieurs destinataires potentiels (1 par commande), tu peux créer une table destinataire qui aurait une clé étrangère sur la table client et la table commande aurait une clé étrangère non obligatoire sur la table destinataire

Voilà le MCD de la seconde solution
Image

Du coup, plusieurs cas de figure
  • Adresse de livraison = adresse de livraison : Le champ commande.id_destinataire n'est pas renseigné, il faut chercher l'adresse du client
  • Adresse de livraison != adresse de livraison : Le champ commande.id_destinataire contient le destinataire de la commande
Avec ce système, tu pourras donc éviter de créer des destinataires quand il n'y a pas lieu et tu pourras attribuer plusieurs destinataires pour un unique client ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Qtzph35
Invité n'ayant pas de compte PHPfrance

17 oct. 2007, 20:45

Merci pour cette réponse rapide. Et bien pour ma premiere question sur le forum je ne pouvais pas rever mieux :lol:
Je pensais effectivement à te premiere suggestion en prenant mon bus mais je me disais que c'était dommage d'avoir les infos d'une adresse dans une table Client avec egalement ces infos dans une table Adresse juste à côté.
Ta seconde proposition me ravit donc surtout que je souhaite par ailleurs pouvoir obtenir toutes les adresses des destinataires pour lesquels mon client a passé commande.

Merci beaucoup et bonne soirée

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 oct. 2007, 22:32

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer