2009-05-14 4 views
0

J'ai une table appelée 'Fields' qui contient des champs d'application. Dans ce tableau, je stocke les métadonnées pour chaque champs (TableName, ColumnName, JoinType (intérieur/extérieur).Est-ce que quelqu'un a construit un moteur de recherche dynamique en utilisant des colonnes définies par table?

J'ai quelque chose de travail mais il est

pas aussi propre que je voudrais. Quelqu'un at-il abordé auparavant?

Je cherche quelques idées pratiques autour de mieux.

+0

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? –

Répondre

0

J'ai écrit un générateur de requête dans le passé, qui pourraient se joindre à des tables automatiquement et mettre les choses ensemble pour générer des rapports dynamiques.

Je pense, aujourd'hui , Je voudrais Prenez NHibernate. Bien qu'il s'agisse d'un ORM, il gère les jointures et crée les requêtes en fonction des données de mappage qui sont assez similaires à vos métadonnées.

Bien sûr, vous auriez encore à faire des choses spécifiques qui ne sont pas couverts par NHibernate. Mais c'est un excellent début.

1

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.

Questions connexes