Conventions de nommage de base de données pour un panneau d'administration lisible
Utilisez des conventions de nommage pour la base de données du panneau d'administration afin de conserver des écrans générés lisibles : règles claires pour tables et champs, enums, relations et une checklist rapide.

Pourquoi les noms déterminent si un panneau d'administration semble clair ou confus
La plupart des panneaux d'administration sont construits à partir de votre modèle de données. Les noms de tables et de champs se retrouvent comme éléments de menu, titres de pages, en-têtes de colonnes, libellés de filtre, et même les mots que les gens tapent dans la recherche.
Quand les noms sont clairs, un administrateur peut parcourir une liste et la comprendre en quelques secondes. Quand les noms sont ambigus, il s'arrête, devine, ouvre un enregistrement, revient en arrière et réessaie. Cette hésitation s'accumule. Elle se transforme en questions du type « Comment trouver le bon client ? » et en documents de formation que personne ne veut lire.
Les développeurs nomment généralement les choses pour construire et déboguer. Les opérateurs nomment les choses pour faire le travail. Un développeur peut se satisfaire de acct, addr1 ou stat parce qu'il sait ce que ça veut dire. Un opérateur a besoin de lire « Account », « Address line 1 » et « Status » sans décoder.
Dans un écran d'administration, « lisible » signifie généralement :
- Vous pouvez parcourir un tableau et comprendre chaque colonne sans ouvrir une ligne.
- Vous pouvez rechercher et filtrer avec les mêmes mots que vous utilisez au quotidien.
- Vous pouvez trier et comparer des valeurs sans surprises (par exemple, des dates réellement des dates, et des statuts cohérents).
Si vous utilisez une plateforme qui génère des écrans depuis le modèle (par exemple AppMaster et le Data Designer pour des vues de type admin), le nommage devient une partie du design UI. De bons noms vous donnent des écrans par défaut propres dès le premier jour, avant même de peaufiner les libellés et la mise en page.
Une base de nommage simple que toute votre équipe peut suivre
Si vous voulez que les écrans générés soient propres dès le départ, mettez-vous d'accord sur une base avant quiconque ajoute la première table. La plupart des problèmes de nommage ne sont pas techniques. Ce sont des problèmes de cohérence.
Choisissez un style d'identifiants et ne le mélangez pas. Pour les bases de données, le snake_case est généralement le plus facile à lire et à rechercher. Si votre stack attend du camelCase, appliquez-le partout (tables, colonnes, clés étrangères, enums). Changer de style en cours de projet rend les libellés et filtres incohérents.
Une base qui fonctionne pour la plupart des équipes :
- Utilisez des mots complets :
customer_id, pascust_id;description, pasdesc. - Utilisez des noms clairs : noms pour les entités et verbes clairs pour les actions :
invoice,payment,refund_requested. - Utilisez des noms de timestamp cohérents :
created_at,updated_at,deleted_at. - Évitez les mots vagues comme
data,info,valueoutypesauf si vous ajoutez du contexte (par exempleshipping_address,payout_method). - Gardez la cohérence singulier/pluriel (beaucoup d'équipes utilisent des tables au pluriel comme
customerset des colonnes au singulier commecustomer_id).
Rédigez un petit glossaire et gardez-le visible. Décidez tôt si vous dites customer, client, account ou user, puis tenez-vous-y. Faites de même pour « order » vs « purchase » ou « ticket » vs « case ».
Un contrôle rapide : si deux personnes regardent une colonne comme account_status et s'accordent sur sa signification sans demander, la base fonctionne. Sinon, renommez-la avant de construire des écrans et filtres dessus.
Règles de nommage des tables qui se mappent bien aux menus et listes
La plupart des panneaux d'administration transforment les noms de tables en éléments de menu, titres de listes et fil d'Ariane. Votre schéma n'est pas seulement pour les ingénieurs. C'est le premier jet de votre UI.
Choisissez un style pour les tables d'entités et tenez-vous-y : singulier (user, invoice, ticket) ou pluriel (users, invoices, tickets). Le singulier se lit souvent mieux dans les titres de formulaire (« Edit Ticket »), tandis que le pluriel peut être plus naturel dans les menus (« Tickets »). L'important est de ne pas mélanger.
Nommez les tables pour ce qu'elles sont, pas pour ce qu'elles font. Une table devrait représenter une chose que vous pouvez pointer. payment est une chose ; processing est une action. Si vous ajoutez plus tard des refunds, retries et settlements, processing devient trompeur.
Règles pour garder menus et listes propres :
- Utilisez des noms concrets (
customer,subscription,invoice,ticket_message). - Évitez les tables fourre-tout pour des données permanentes (
settings,misc,temp,data). Scindez-les en entités réelles (notification_setting,tax_rate,feature_flag). - Préférez des noms composés courts et lisibles avec underscore (
purchase_order,support_ticket) plutôt que des abréviations. - Ajoutez un préfixe de module seulement s'il évite des collisions (par exemple
billing_invoicevsinvoice). Si vous préfixez, faites-le de façon cohérente dans tout le module.
Si vous utilisez AppMaster pour générer des écrans directement depuis votre schéma, des noms de tables en forme de noms d'entités donnent généralement un menu et une vue de liste propres par défaut, avec moins de nettoyages à faire plus tard.
Tables de jointure et identifiants : garder les many-to-many lisibles
Les relations many-to-many sont souvent là où les panneaux d'administration commencent à paraître brouillons. Si la table de jointure et ses clés sont bien nommées, les écrans générés restent lisibles sans nettoyage manuel.
Commencez par une règle ennuyeuse et ne la cassez pas : chaque table a une clé primaire nommée id. Ne mélangez pas user_id comme clé primaire dans une table et id dans une autre. Des identifiants uniformes rendent les relations prévisibles et aident les formulaires et champs de référence générés à rester cohérents.
Pour les tables de jointure pures, nommez-les d'après les deux entités en suivant un modèle et un ordre unique. Des options courantes sont alphabétique (product_tag) ou « chose principale d'abord » (user_role). Choisissez un ordre et appliquez-le partout.
Évitez des noms vagues comme links ou mappings sauf si la table contient vraiment des liens génériques entre objets. Dans la plupart des panneaux d'administration, la spécificité vaut mieux que la créativité.
Quand une table de jointure devient une vraie entité
Si la relation contient des champs supplémentaires, traitez-la comme un modèle à part entière et nommez-la par un nom que les gens comprennent : membership, assignment, subscription. Par exemple, si le rôle d'un utilisateur a starts_at, ends_at et granted_by, user_role convient, mais membership peut être plus lisible dans l'UI.
Un jeu de règles simple qui garde les écrans professionnels :
- Utilisez
idcomme clé primaire dans chaque table. - Nommez les tables de jointure avec les deux entités dans un ordre cohérent (
user_role). - Utilisez des clés étrangères claires comme
user_idetrole_id. - Ajoutez une règle d'unicité qui reflète la réalité (par exemple, une seule
role_idparuser_id). - Si vous autorisez l'historique, adaptez la règle d'unicité aux enregistrements « actifs » (par exemple unique là où
ended_atest null).
Ces choix tiennent la route à mesure que vos données grandissent, et ils fonctionnent bien avec AppMaster Data Designer, où les écrans peuvent être générés directement depuis le modèle.
Modèles de nommage des champs qui produisent des colonnes et filtres clairs
Les noms de champs font plus que guider les développeurs. Ils déterminent ce que les utilisateurs voient comme en-têtes de colonnes, libellés de filtres et champs de formulaire.
Des suffixes prévisibles suppriment l'incertitude :
- Utilisez
_idpour les clés étrangères :customer_id,assigned_agent_id. - Utilisez
_atpour les timestamps :created_at,paid_at,closed_at. - Utilisez
_countpour les compteurs :login_count,attachment_count.
Les booléens doivent se lire comme des phrases. Préférez is_ et has_ pour que les cases à cocher aient du sens d'un coup d'œil : is_active, has_paid, is_verified. Évitez les doubles négations comme is_not_approved. Si vous avez besoin d'un état « non », modélisez le positif et inversez la logique dans le code.
Les champs monétaires sont une source fréquente de confusion dans les grilles d'admin. Choisissez une approche et tenez-vous-y : stocker en unités mineures (centimes) dans un entier, ou stocker en décimal avec une précision fixe. Nommez le champ pour que personne n'ait à deviner. Par exemple total_amount_cents + currency_code, ou total_amount + currency_code. Ne mélangez pas price, amount et total à moins qu'ils n'aient des sens différents.
Les champs texte doivent préciser leur usage, pas seulement leur type. description est destiné aux utilisateurs. internal_comment est privé. notes est fourre-tout et doit être utilisé avec précaution. Si vous avez plusieurs notes, nommez-les par audience : customer_note, agent_note.
Les champs de contact doivent être littéraux car ils servent souvent de filtres rapides : website_url, contact_email, billing_email. Dans les écrans générés par AppMaster, des noms comme ceux-ci deviennent en général des libellés par défaut propres.
Relations et clés étrangères : des noms qui expliquent le modèle de données
De bonnes relations se lisent comme de l'anglais couramment. Quand un panneau d'administration est généré depuis la base, les noms de clés étrangères deviennent souvent des titres de colonnes, des filtres et des libellés de formulaire.
Gardez une seule règle : la colonne de clé étrangère est le nom de la table référencée plus _id. Si vous avez customer.id, utilisez customer_id. Si vous avez order.id, utilisez order_id. Cette cohérence rend évident ce que pointe une colonne.
Les auto-relations demandent un soin supplémentaire car elles se lisent facilement mal plus tard. Évitez related_id générique. Utilisez des noms qui expliquent la direction et le sens, comme parent_id pour des arbres, manager_id pour des organigrammes, ou merged_into_id pour le dédoublonnage.
Quand une relation passe par une table de jointure, nommez-la pour qu'elle se lise comme une phrase. Par exemple, ticket_assignee.user_id est plus clair que ticket_user.user_id si le rôle est « assignee » (et pas « reporter » ou « watcher »).
Contrôles pratiques qui évitent la plupart des problèmes :
- Ne réutilisez pas
owner_idavec des sens différents selon les tables. Préférezcreated_by_user_id,account_manager_user_idoubilling_contact_id. - Si vous avez plusieurs relations vers la même table, incluez le rôle :
requested_by_user_idetapproved_by_user_id. - Choisissez un marqueur soft-delete et tenez-vous-y.
deleted_atest largement compris et fonctionne bien avec les filtres.
Si vous construisez des écrans dans AppMaster plus tard, ces noms apparaissent partout, donc un peu d'attention ici vous évite beaucoup de nettoyage d'UI.
Enums et champs de statut qui restent compréhensibles dans le temps
Si votre panneau d'administration est généré depuis la base, la façon la plus rapide de rendre les écrans confus est de disperser la sémantique dans beaucoup de petits flags. Préférez un enum de statut clair pour le cycle de vie principal d'un enregistrement, et gardez les flags supplémentaires seulement pour des comportements réellement séparés.
Une règle utile : si les utilisateurs demanderaient « Où en est cet élément dans son parcours ? », c'est un statut. Si la question est « Doit-on le cacher ? » ou « Est-il verrouillé ? », c'est un booléen séparé.
Un statut vaut mieux que cinq booléens
Au lieu de is_new, is_in_progress, is_done, is_cancelled, utilisez un seul ticket_status. Cela se lit mieux dans les colonnes de liste, les filtres et les actions en masse. Et ça évite des combinaisons impossibles comme « done + in_progress ».
Gardez les valeurs d'enum stables. Le texte affiché peut changer, mais les valeurs stockées ne devraient pas. Stockez pending, pas waiting_for_review. Stockez rejected, pas rejected_by_manager. Vous pouvez toujours afficher des libellés plus conviviaux plus tard sans migrer les données.
Quand vous avez besoin de détails supplémentaires, ajoutez un second champ plutôt que de surcharger le statut. Exemple : conservez payment_status pour le cycle de vie, et ajoutez failure_reason (texte) si nécessaire.
Nommez les enums par domaine (pour que les filtres aient du sens)
Utilisez un préfixe de domaine pour que les écrans restent lisibles quand plusieurs modèles ont un « status » :
payment_status(checkout)ticket_priority(urgence support)user_role(niveau d'accès)invoice_status(cycle de facturation)delivery_status(cycle d'expédition)
Séparez le cycle de vie des flags opérationnels. Par exemple : status décrit où en est l'élément dans le workflow, tandis que is_archived signifie qu'il doit être caché des listes quotidiennes.
Rédigez une phrase pour la signification de chaque valeur d'enum dans vos notes d'équipe. Vous oublierez la différence entre cancelled et voided. Si vous utilisez AppMaster, ces courtes définitions aident aussi à garder les dropdowns et filtres cohérents entre web et mobile.
Cas limites : dates, champs d'audit et colonnes "type"
Les guides de nommage couvrent souvent les tables et champs basiques, mais les panneaux d'administration deviennent confus sur les cas limites. Les dates, champs d'audit et colonnes « type » sont des endroits où des noms confus donnent des écrans confus.
Pour les dates et timestamps, faites en sorte que le nom raconte l'histoire : est-ce planifié, réel ou un rappel ? Un pattern simple est un sens verbal plus un suffixe clair. Par exemple due_at (deadline prévue) et completed_at (fin réelle) se lisent comme des colonnes et filtres compréhensibles. Évitez des paires vagues comme start_date / end_date quand vous voulez en réalité scheduled_at / finished_at.
Les relations optionnelles sont un autre piège courant. N'inventez pas de nouveaux patterns table par table. Gardez le nom de relation stable et exprimez l'optionnalité par des nulls, pas par un renommage. manager_id doit rester manager_id même si c'est optionnel.
Les adresses peuvent sembler correctes en code mais être laids dans les grilles. Les lignes numérotées sont acceptables seulement si votre équipe s'accorde sur leur signification partout. Restez explicite :
address_line1,address_line2,city,region,postal_code,country_code- Évitez
address1,address2(plus dur à lire, plus facile à dupliquer)
Les champs d'audit doivent être ennuyeux volontairement :
created_at,updated_atcreated_by_id,updated_by_id(seulement si vous avez vraiment besoin du suivi utilisateur)
Soyez prudent avec type. C'est presque toujours trop large et ça se dégrade avec le temps. Au lieu de type, nommez le sens : payment_method, ticket_channel, customer_tier. Dans des écrans pilotés par le schéma (y compris AppMaster), ce choix unique fait souvent la différence entre un filtre clair et un dropdown confus.
Exemple : nommer un modèle de ticket de support qui ressemble à quelque chose de propre en admin
Un petit cas réaliste : des clients écrivent, le personnel répond, et les tickets peuvent être taggés. Les conventions de nommage font que les menus, écrans de liste et filtres auto-générés sont évidents.
Commencez par des noms de table qui se lisent comme des noms dans une barre latérale :
customerticketticket_messageticket_tagticket_tag_link
Dans la plupart des panneaux d'administration, ces noms deviennent des libellés comme “Tickets” et “Ticket Messages”, et la table de jointure reste discrète.
Pour l'écran de liste des tickets, choisissez des noms de champs qui deviendront des en-têtes de colonne et des filtres clairs :
subject,status,priorityassigned_to_id(pointe vers un user staff)last_message_at(sert à trier par le plus récent)created_at(standard et prévisible)
Les enums sont souvent le point où la lisibilité casse plus tard, donc gardez l'ensemble stable et simple :
ticket_status:new,open,pending_customer,resolved,closedticket_priority:low,normal,high,urgent
Un choix de nommage qui évite la confusion constante : ne surchargez pas « customer ». Dans le support, le demandeur n'est pas toujours le client (un collègue peut soumettre au nom de quelqu'un). Si vous stockez la personne ayant soumis, nommez-la requester_id, et stockez séparément customer_id pour le compte concerné. Cette distinction garde formulaires et filtres fidèles dès le départ.
Étape par étape : comment nommer un nouveau modèle avant de créer les écrans
La façon la plus simple de garder des écrans lisibles est de nommer les choses pendant que vous pensez en langage courant, pas quand vous êtes déjà en train de construire.
Un processus reproductible pour chaque fonctionnalité
-
Commencez par un mini-glossaire (5 à 10 termes). Écrivez les mots qu'un collègue non technique utiliserait en réunion, puis choisissez un terme préféré pour chaque concept (par exemple « customer » vs « client »).
-
Esquissez les écrans attendus : liste, détail, création, édition. Pour la vue liste, décidez quelles 5 à 8 colonnes doivent être immédiatement claires comme en-têtes. Si un nom de champ sonnerait bizarrement comme en-tête, il a probablement besoin d'être retravaillé.
-
Ébauchez tables et relations, puis nommez les champs en utilisant les suffixes (
*_id,*_at,is_*,*_count). Quand vous générez ensuite les écrans (y compris dans AppMaster), ces patterns ont tendance à produire des libellés propres et des filtres prévisibles.
Avant d'aller plus loin, assurez-vous de ne pas mélanger les styles (customer_id dans une table, clientId dans une autre). La cohérence bat l'originalité.
-
Définissez les enums tôt, pas après l'apparition de la première UI. Rédigez une phrase décrivant chaque valeur, comme si vous l'expliquiez au support. Préférez des valeurs durables comme
pending,active,archivedplutôt quenew,newer,newest. -
Faites une « lecture des en-têtes de colonne ». Faites comme si vous étiez l'utilisateur admin parcourant une table :
- Est-ce que « Created At », « Updated At », « Status », « Assigned To », « Total Amount » auraient du sens sans formation ?
- Y a-t-il des champs qui ressemblent à du code interne (
tmp_flag,x_type,data1) ? - Les unités sont-elles évidentes (
amount_centsvsamount,duration_secondsvsduration) ?
Si quelque chose sonne flou à voix haute, renommez-le maintenant. Renommer plus tard est possible, mais ça fuit souvent dans des rapports, filtres et habitudes.
Erreurs courantes de nommage qui rendent les panneaux d'administration difficiles à utiliser
Si le schéma est bordélique, les écrans le seront aussi, peu importe la qualité de l'UI. Les conventions de nommage concernent moins le « style » que l'utilisabilité quotidienne.
Le premier piège est le vocabulaire mixte. Si une table dit client et une autre customer, vos menus, filtres et résultats de recherche donnent l'impression de parler de choses différentes. Choisissez un mot par concept et utilisez-le partout, y compris dans les relations.
Un autre problème fréquent est la sur-abbréviation. Des raccourcis comme addr, misc ou info économisent quelques caractères mais coûtent beaucoup en clarté dans des tableaux et exports.
Un troisième piège est d'inscrire le flux UI dans la base. Un champ comme new_customer_wizard_step a du sens au lancement, puis devient confus quand le flux change. Stockez le fait métier (par exemple onboarding_status) et laissez l'UI décider comment guider les gens.
Faites aussi attention à la surcharge de booléens. Quand vous ajoutez is_new, is_open et is_closed, vous aurez finalement des conflits (deux vrais à la fois) et des filtres flous. Préférez un champ de statut unique avec un petit ensemble de valeurs bien nommées.
Signaux d'alerte qui conduisent généralement à des écrans moches :
- Deux noms différents pour la même chose (
client_idà un endroit,customer_idailleurs) - Colonnes fourre-tout (
notes,misc,extra) contenant des données mélangées - Noms dépendants du temps (
summer_campaign_*) qui survivent à la campagne - Plusieurs booléens décrivant un seul état
- Renommages effectués sans plan de migration
Renommer n'est pas juste un find-and-replace. Si vous changez customer_phone en phone_number, planifiez la migration, mettez à jour les écrans générés et conservez la compatibilité en arrière si nécessaire (surtout si d'autres systèmes lisent l'API). Dans AppMaster, des noms propres paient immédiatement, car listes, formulaires et filtres héritent de ces libellés depuis votre modèle.
Checklist rapide avant de livrer le panneau d'administration
Avant de déclarer le schéma « terminé », faites une passe du point de vue de quelqu'un qui vivra dans le panneau d'administration au quotidien.
- Les tables ressemblent à de vraies choses. Un collègue devrait pouvoir dire ce que représente une table (
ticket,customer,invoice) sans deviner. - Les champs clés suivent des suffixes prévisibles. Utilisez des patterns reconnus d'un coup d'œil :
*_idpour les références,*_atpour les timestamps,*_amount(ou*_amount_cents) pour l'argent, etis_*pour les flags vrai/faux. - Les enums sont stables et simples. Stockez des valeurs comme
pending,paid,failedplutôt que des phrases d'UI qui changeront. - Un nouveau collègue peut déduire le sens. Si les champs apparaissaient dans une vue générée sans aide, l'intention serait-elle toujours évidente ?
- Les mots ambigus sont supprimés ou rendus spécifiques. Remplacez des noms tiroir comme
data,value,typeouinfopar des termes concrets commestatus,source,category,notesouexternal_reference.
Si vous utilisez AppMaster Data Designer pour générer des vues de type admin depuis votre schéma, cette checklist est immédiatement pratique : des noms clairs deviennent des colonnes et filtres clairs, et vous passez moins de temps à corriger les libellés après que les utilisateurs commencent à travailler dans le système.
Prochaines étapes : faire du nommage une habitude (et garder les écrans cohérents)
Un bon nommage n'est pas un nettoyage ponctuel. C'est une routine légère qui garde votre UI d'administration lisible à mesure que le schéma grandit.
Commencez par un module existant et appliquez les règles seulement à la prochaine table que vous ajoutez. Cela évite une réécriture effrayante et vous donne un endroit concret pour vous entraîner. Si votre prochaine fonctionnalité ajoute des « returns » au système de commandes, nommez la table, les clés étrangères et les statuts selon vos patterns dès le départ, puis réutilisez l'approche pour la suivante.
Gardez une page de guide de nommage à portée de main là où vous travaillez sur le schéma. Gardez-le court : comment vous nommez les tables, clés primaires, clés étrangères, timestamps et enums de statut. L'objectif est de permettre des décisions rapides, pas de lancer de longs débats.
Si vous développez avec AppMaster, il est utile de définir ces patterns dans le Data Designer avant de toucher aux écrans UI. Quand vous renommez des tables ou champs, régénérez l'app pour que les écrans, l'API et la logique restent alignés au lieu de dériver.
Une revue légère avant chaque release suffit généralement :
- Les noms de tables et champs se lisent bien comme éléments de menu, en-têtes de colonnes et filtres ?
- Les statuts et enums sont clairs sans explication supplémentaire ?
- Les relations et clés étrangères s'expliquent d'elles-mêmes (pas d'abréviations mystérieuses) ?
- Les modèles similaires sont nommés de façon cohérente (mêmes mots, même ordre) ?
Avec le temps, le vrai gain est la cohérence. Quand chaque nouveau modèle suit les mêmes règles, vos panneaux d'administration commencent à paraître conçus même s'ils sont générés, parce que les libellés et listes se lisent comme un produit cohérent.
FAQ
Utilisez des noms qui lisent ce qu'est l'enregistrement, pas ce qu'il fait. Une table nommée ticket ou invoice se convertira en un élément de menu clair, tandis que quelque chose comme processing devient rapidement déroutant si le flux change.
Choisissez un style et appliquez-le partout. Pour la plupart des bases, le snake_case est le plus facile à lire et aide à éviter des labels et filtres générés qui semblent aléatoires.
Préférez des mots complets et évidents par défaut : ils deviennent des en-têtes de colonne et des libellés de filtres. Des abréviations comme acct ou addr1 créent souvent de l'hésitation pour les opérateurs, même si les développeurs les comprennent.
Choisissez une approche et restez cohérent : soit singulier (ticket), soit pluriel (tickets). L'important est que la navigation et les titres de pages ne changent pas de style selon les modules.
Règle simple : la clé primaire de chaque table s'appelle id, et les clés étrangères suivent le modèle quelque_chose_id. Cela rend les relations prévisibles et aide les formulaires et champs de référence générés à rester cohérents.
Nommez les tables de jointure pures par les deux entités en suivant un ordre cohérent, par exemple user_role ou product_tag. Si la relation possède des champs propres et un sens métier, renommez-la comme un vrai nom (membership, assignment) pour que l'UI reste naturelle.
Utilisez des suffixes prévisibles correspondant au type et à l'intention, comme _at pour les timestamps et _count pour les compteurs. Pour les booléens, privilégiez is_ et has_ afin que les cases à cocher se lisent comme des phrases simples dans les écrans générés.
Privilégiez un champ de statut clair pour le cycle de vie principal, comme ticket_status ou invoice_status, plutôt que plusieurs booléens qui se chevauchent. Conservez des valeurs stockées stables et simples pour pouvoir changer le texte d'affichage sans migrer les données.
N'utilisez pas owner_id générique ou type quand ils signifient des choses différentes. Préférez des noms de rôle comme created_by_user_id, approved_by_user_id ou payment_method pour que les écrans et filtres s'expliquent d'eux-mêmes.
Renommez tôt, avant que les écrans, filtres et rapports ne dépendent de l'ancien libellé. Dans AppMaster, mettez à jour les noms dans le Data Designer et régénérez pour que l'UI et l'API restent alignées.


