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.