2010-12-03 3 views
2

J'ai une table de base de données de personnes qui est un nom de base d'âge, etc., avec un ID unique "personID". Lié à cela, j'ai un ensemble de tables EAV pour stocker des champs supplémentaires qui sont potentiellement différents pour chaque personne. J'ai déjà du code pour enregistrer et charger des enregistrements de la table person dans un objet C# person ou un tableau d'objets person. Cependant, je ne sais pas comment gérer le chargement des enregistrements EAV. Je pensais ajouter un tableau à mon objet de personne appelé "properties" qui serait un tableau de propriétés chacune avec un "nom" et "valeur". Ainsi, par exemple je pourrais coderEnregistrement Chargement des objets en série à partir de la structure de la base de données EAV

PersonA.Properties[i].Name = "Age"; 
PersonA.Properties[i].Value = 22; 

Chargement d'un seul objet semble ok je pouvais faire 1 appel de base de données pour charger les détails de la table personnes et un second appel pour charger les propriétés ou retourner 2 jeux de données avec un seul appel. Cependant, comment puis-je obtenir un tableau de personnes avec chaque personne ayant leur gamme de propriétés. Si quelqu'un a des liens vers des exemples, je serais reconnaissant. Aussi des points bonus si vous pouvez me donner des conseils sur la façon de mettre en œuvre des propriétés afin que je puisse faire du code comme:

PersonA.Properties["Age"] = "22"; 
+0

Doit-il être EAV? Je considérerais sérieusement dans une base de données docuement-based, par exemple stockage JSON ou XML –

+0

Je ne sais rien à base de document ou JSON mais en supposant que j'ai stocké les attributs XML et XML comme champ dans la table de personne (si cela est ce que votre suggestion) comment puis-je interroger cette information? c'est-à-dire retourner tous les enregistrements avec l'âge = 22 par exemple? – Jammy

+0

@Jimmy - bien un document-DB dédié a une syntaxe de requête pour cela. Peut-être regarder Raven? Dans le serveur SQL, vous pouvez utiliser le type de données XML et émettre des requêtes xpath ou promouvoir (via un UDF) un xpath vers une colonne calculée indexée persistante, vous devez donc simplement dire WHERE ColName = value –

Répondre

0

Avec serveur SQL, je suis d'accord avec Marc à obtenir en XML. Facilite l'interrogation

Pour mettre le code dans le format que vous voulez, j'utiliserais un dictionnaire générique si la date est homogène pour cette propriété et ensuite transformer le xml entre et.

Questions connexes