Les données/champs dynamiques sont toujours amusants.
La façon dont je l'ai approché auparavant est d'avoir une table qui définit les champs que je veux. Un exemple très basique est:
GroupId int, < - me permet de regrouper les champs ensemble dans un but commun
FieldID int, < - identifiant unique pour les jointures
FieldName varchar (100), < -
DataType int < - se joint à une table qui contient les types disponibles tels que le texte, le téléphone, le courrier électronique, qui peuvent avoir des caractéristiques de traitement spéciales.
displayorder int, < - quel ordre seront les champs affichés à l'écran.
Puis j'ai une autre table pour contenir les données réelles: EntryId int, < - Regroupe les valeurs à un point d'entrée unique. GroupId int, int FieldID, Valeur varchar (max) < -Utiliser quel que soit le numéro que vous sentez contiendra les données; ou max si vous avez la bonne version du serveur SQL
Enfin, je générer dynamiquement des vues qui tournent les données réelles 90 degrés pour les rapports plus facile.
En ce faisant de cette façon, vous avez beaucoup de liberté sur ce que vous collectez sans modifier le code sous-jacent.
Le type de jointure ne s'applique-t-il pas uniquement à une paire de champs, généralement (mais pas nécessairement) dans des tables différentes? Et les jointures ne peuvent-elles pas parfois être basées sur plus d'une colonne? –