Mes exigences sont les suivantes :
- Nécessité d'être en mesure d'ajouter dynamiquement des champs définis par l'utilisateur, quel que soit le type de données.
- Nécessité de pouvoir interroger les UDF rapidement
- Il faut pouvoir effectuer des calculs sur les UDF en fonction du type de données.
- Il faut pouvoir trier les UDF en fonction du type de données.
Autres informations :
- Je recherche avant tout la performance
- Il y a quelques millions de fiches qui peuvent contenir des données UDF.
- La dernière fois que j'ai vérifié, il y avait plus de 50 millions d'enregistrements UDF dans notre base de données actuelle.
- La plupart du temps, un UDF n'est attaché qu'à quelques milliers de fiches, et non à toutes.
- Les UDF ne sont pas jointes ou utilisées comme clés. Ce sont juste des données utilisées pour des requêtes ou des rapports.
Options :
-
Créer une grande table avec StringValue1, StringValue2... IntValue1, IntValue2,... etc. Je déteste cette idée, mais je l'envisagerai si quelqu'un peut me dire qu'elle est meilleure que les autres idées et pourquoi.
-
Créez un tableau dynamique qui ajoute une nouvelle colonne à la demande, selon les besoins. Je n'aime pas non plus cette idée car je pense que les performances seraient lentes à moins d'indexer chaque colonne.
-
Créez un tableau unique contenant UDFName, UDFDataType et Value. Lorsqu'un nouvel UDF est ajouté, générez une vue qui récupère uniquement ces données et les analyse en fonction du type spécifié. Les éléments qui ne répondent pas aux critères d'analyse syntaxique renvoient NULL.
-
Créez plusieurs tables UDF, une par type de données. Nous aurions ainsi des tables pour les UDFStrings, les UDFDates, etc. Il est probable que nous fassions la même chose que le n°2 et que nous générions automatiquement une vue chaque fois qu'un nouveau champ est ajouté.
-
Types de données XML ? Je n'ai pas encore travaillé avec ces types de données, mais j'en ai entendu parler. Je ne suis pas sûr qu'ils me donneraient les résultats que je souhaite, notamment en termes de performances.
-
Quelque chose d'autre ?
8 votes
Martin Fowler recommande 2 (schéma actualisable par l'utilisateur) ou 5 (LOB XML indexé) : martinfowler.com/bliki/champdeconfigurationdel'utilisateur.html
1 votes
Voir aussi la question de StackOverflow sur schémas de base de données dynamiques .
1 votes
Aujourd'hui, de nombreuses bases de données prennent en charge les champs JSON... mais l'indexation et les performances restent un problème. Par exemple PostgreSQL (v13) supporte Les index GIN sur JSON ... mais seuls les opérateurs d'égalité sont pris en charge (pas les requêtes de plage). MongoDB semble avoir un meilleur support avec index joker .