Bonjour à vous tous et merci d'avance pour votre aide.

J'ai une table "utilisateurs" avec deux types d'utilisateurs, les clients et les propriétaires de boutiques.
Ainsi qu'une table "boutiques" en relation hasOne.

Quel serait la conception la plus approprié ?
Créer une table d'association, boutiques_utilisateurs.
Ou Un champ "boutique_id" dans la table utilisateurs et attribuer la valeur 0 pour les clients (car ne peuvent être propriétaire d'une boutique)

Encore merci et bonne année à tous,

2 réponses


FactureHero.com
Réponse acceptée

Effectivement, il n'y a pas qu'une façon de faire et la tienne en est une. Le mieux est je pense de faire :
1/ le plus logique possible en scindant les données "logiquement"
2/ penser performance selon TES requêtes en plaçant les index sur les champs qui vont être requêtés.

(Je pars du principe qu'un utilisateur peut avoir plusieurs boutiques)

1 Pour le côté logique

  • perso je distinguerai les Users avec un champ type dans la table UTILISATEURS (0 ou 1 pour Client ou propriétaire de boutique)
  • Et c'est dans la table BOUTIQUES que j'associerai un champ Utilisateur_id (Au cas où un Utilisateur peut avoir plusieurs boutiques ? )

Du coup dans ce système le modèle UTILISATEURS hasMany BOUTIQUES et le modèle BOUTIQUES belongsTo UTILISATEURS

2 Pour le côté performance

Si je veux lister majoritairement les boutiques je met l'index sur le champ id de la table BOUTIQUES, si je veux lister les utilisateurs et la ou les boutiques associées, je mettrai plutôt l'index sur le champ utilisateur_id de la table BOUTIQUE

Pour finir un autre conseil, si tu es sur Cake 2.X, nommer les tables en anglais et au pluriel c'est mieux ;) (USERS, STORES)

C'est une façon de faire, il y en a d'autres, j'ai choisi les clés étrangères plutôt que les tables de liaison car visiblement un utilisateurs n'aura pas non plus 200 boutiques :)

en espérant que ces qq conseils t'aident un peu.

Merci pour ces explications, je vais donc revenir sur mes pas et oublier la table de liaisons.
J'avais aussi pensé à faire deux tables distinctes pour les clients et les commerçants, mais avec les ACL c'est compliqué ?