Je dois stocker des paires clé-valeur dans une base de données, où la clé est, par ex. une chaîne, et la valeur peut être de plusieurs types (entier, chaîne, flottant/date, GUID, BLOB). La base de données est accessible via OLE DB, je veux donc coller aux types "normaux". Ces clés peuvent être impliquées dans des requêtes "exists", les valeurs ne sont pas impliquées dans les requêtes (c'est-à-dire que je ne demanderai pas "toutes les clés dont la valeur est 17"). Des paires valeur/clé supplémentaires seront ajoutées ultérieurement.Stockage de divers types de valeur dans une base de données
Je vois actuellement les options suivantes:
1. blob sérialisé
Sérialisation la valeur-clé-ensemble (cette fonctionnalité est déjà disponible) et le stocker en tant que blob unique.
Le seul problème que j'ai avec cela est que les valeurs individuelles ne peuvent pas être mises à jour facilement lorsque la base de données est partagée. C'est actuellement un problème (l'ensemble actuel de valeurs n'est mis à jour que lorsque le DB est ouvert exclusivement) mais cela semble être une limitation pour l'accès futur.
2.-BLOB Key
rang consisterait à Key, Type, BLOB
stocker les données brutes. fait pour une conversion et des tests laids, mais permettrait d'étendre les types de var plus tard facilement. Je ne sais pas à quel point les frais généraux est pour blob storign de, mais le nombre d'éléments est faible (environ une douzaine.
3. Une colonne pour chaque type de valeur
rang consisterait Key, Type, int, double, sting, blob
, le type indiquerait quelle colonne est utilisée. on dirait horrible à moi, mais aussi moins « abusive ».
4. une colonne par réglage
(en utilisant une seule ligne). Je ne considère pas vraiment.
Idées? Commentaires? Autre a pproaches?
Comment votre application sait-elle quel type est la valeur lors de l'enregistrement et du chargement? Le sait-il avant de demander la valeur, c'est-à-dire qu'il sait à l'avance que seule une valeur int aurait du sens? Cela conduit certains des choix. – Mark
Oui, il le sait à l'avance. Fondamentalement, il est défini (implicitement) par la clé, par ex. la clé 'DBDefaultNodeID' serait toujours un' GUID'. Cependant, les clés inconnues ne doivent pas être affectées. – peterchen