Hello,
Je me pose une question quant à l’organisation d’une fonctionnalité du produit sur lequel je bosse.
J’aimerai trouver un compromis correct pour les performances en priorité, mais aussi faire en sorte que ce soit assez simple d’usage/compréhension.
Globalement on veut permettre la définition de champs personnalisés (sur des contacts par exemple, mais on va appliquer le même principe sur d’autres entités) via une interface d’administration. Sachant que chaque organisation (groupe d’utilisateurs) partagera ces définitions, mais que plusieurs organisations sont sur la même base de données.
Pour l’instant on est parti sur l’idée de gérer les définitions de façon plutôt classique : une table à part (pour chaque entité avec des champs custom) avec (id, orgId, label, description, type…)
pour faire simple.
On se dit par contre que pour stocker les valeurs (validées à chaque mise à jour de l’entité) on va stocker ça dans un champ JSON de l’entité concernée par ces champs.
J’ai donc deux questions principales :
- Est-ce pour vous une implémentation raisonnable (sachant qu’on pas forcément prévu de faire de recherche hyper poussée sur ces champs pour le moment, mais que c’est pas exclu à l’avenir non plus)
- Est-ce qu’il vaut mieux stocker sous la forme
[ { customFieldId: "<foreign_key>", "value": "<la_valeur_du_champ>"} ]
ou plutôt directement[ { "<foreign_key>": "<la_valeur_du_champ>" } ]
selon vous ?
Pour info, à l’affichage on part surtout sur du formulaire, avec l’ensemble des champs custom affichés à la fois, qu’ils aient une valeur définie pour l’entité cible ou non.