Nous développons une application commerciale. Nos clients demandent des champs personnalisés de soutien. Par exemple, ils veulent ajouter un champ dans le formulaire Client.
Quelles sont les connu des modèles de conception pour stocker les valeurs de champ et les méta-données sur les champs?
Je vois ces options pour l'instant:
Option 1: Ajouter Champ1, Champ2, Champ3, Field4 les colonnes de type varchar à ma table Client.
Option 2: Ajouter une seule colonne de type XML dans la table client et stocker les champs personnalisés' valeurs dans xml.
Option 3: Ajouter un CustomerCustomFieldValue table avec une colonne de type varchar et de stocker des valeurs dans cette colonne. Cette table aurait également un code client, un CustomFieldID.
CustomerID, CustomFieldID, Value
10001, 1001, '02/12/2009 8:00 AM'
10001, 1002, '18.26'
10002, 1001, '01/12/2009 8:00 AM'
10002, 1002, '50.26'
CustomFieldID serait un ID d'une autre table appelée Personnalisé avec ces colonnes: CustomFieldID, FieldName, FieldValueTypeID.
Option 4: Ajouter un CustomerCustomFieldValue tableau avec une colonne pour chaque type de valeur et de stocker des valeurs dans la colonne de droite. Semblable au n ° 3, mais les valeurs de champ sont stockées à l'aide d'une forte colonne type.
CustomerID, CustomFieldID, DateValue, StringValue, NumericValue
10001, 1001, 02/12/2009 8:00 AM, null, null
10001, 1002, null, null, 18.26
10002, 1001, 01/12/2009 8:00 AM, null, null
10002, 1002, null, null, 50.26
Option 5: Options 3 et 4, utiliser un tableau spécifique à un seul concept (le Client). Nos clients demandent champ personnalisé dans d'autres formes. Devrions-nous plutôt nous disposons d'un système à l'échelle de champ personnalisé système de stockage? Donc au lieu d'avoir plusieurs tables comme CustomerCustomFieldValue, EmployeeCustomFieldValue, InvoiceCustomFieldValue, nous aurions une seule table nommée CustomFieldValue? Bien qu'il semble plus élégant de moi, ne serait-ce pas provoquer un goulot d'étranglement des performances?
Avez-vous utilisé l'un de ces approches? Avez-vous réussi? Quelle est l'approche qui choisiriez-vous? Connaissez-vous une autre approche que je dois prendre en compte?
Aussi, mes clients veulent le champ personnalisé pour être en mesure de se référer à des données d'autres tables. Par exemple, un client peut vouloir ajouter un "moyen de Paiement Préféré" pour le Client. Les méthodes de paiement sont définis ailleurs dans le système. Qu'apporte le thème de la "clés étrangères" dans l'image. Devrais-je essayer de créer des contraintes pour assurer que les valeurs stockées dans le champ personnalisé tableaux sont des valeurs valides?
Merci
======================
EDIT 07-27-2009:
Merci pour vos réponses. Il semble que la liste des approches est très complète. J'ai choisi l'option 2 (une seule colonne XML). Il était le plus facile à mettre en œuvre pour l'instant. Je vais probablement avoir à lunette à un plus fortement défini par l'approche de mes exigences deviennent plus complexes et que le nombre de champs personnalisés de soutien va s'agrandir.