J'ai travaillé sur un système où nous avions de telles installations. Pour rester efficace, nous générerions/modifierions la table dynamiquement pour le schéma client. Nous avions également besoin d'incorporer un méta-modèle (le modèle du modèle) pour traiter les informations dans les entités de façon dynamique. Avec les tables personnalisées, vous disposez d'une flexibilité totale, mais cela augmente également considérablement la complexité, notamment la mise à jour/la migration des données existantes. Voici une liste de choses que vous devrez prendre en considération:
- Que faire si le type d'une colonne change?
- Que faire si une colonne est ajoutée? Y a-t-il une valeur par défaut?
- Que faire si une colonne est supprimée? Puis-je supprimer les informations existantes?
- Comment gérer le changement de nom d'une colonne?
- Comment rendre les choses portables dans les bases de données?
- Comment le rendre efficace au niveau de la base de données (par exemple, des index)?
- Comment gérer une erreur humaine (par exemple, un utilisateur supprime une colonne puis change d'avis)?
- Comment gérer la migration (script, déploiement, etc.) lorsqu'une nouvelle version du système est installée sur le site du client?
- Comment avoir ceci en utilisant un ORM?
Option 2: Une alternative légère est d'ajouter quelques colonnes "de rechange" dans les tables d'affaires de différents types (par exemple: "USER_DATE_1", "USER_DATE_2", etc.) Je l'ai vu qu'une quelques fois. Cela fera hurler votre DBA et n'est pas vraiment considéré comme une bonne pratique, mais au moins peut faciliter certaines choses, par ex. (scripts de migration, intégration ORM).
Option 3: Une autre option consiste à stocker tout dans une table avec une propriété/des données de structure. Mais alors c'est vraiment un désastre pour la performance de la base de données. Tout ce qui n'est pas complètement trivial nécessitera beaucoup de jointures. Et le DBA criera encore plus.
Option 4: Il s'agit d'un mélange d'options 2 et 3. Les tables de base sont fixes, mais une table avec des propriétés/données peut être utilisée pour les étendre en quelque sorte. En résumé: réfléchissez-y à deux fois avant de passer à l'étape suivante. Cela peut être fait, mais a un impact significatif sur la conception et la maintenance de l'application.
Qu'entendez-vous par modèle? Parlez-vous d'une base de données? – Pace
J2EE qui est mort depuis plus de 5 ans, n'a pas d'annotations. Mais Java EE fait. –
Quelle est l'exigence fonctionnelle? Un clone basé sur JavaEE (ou * toux * J2EE) de PhpMyAdmin? – BalusC