2009-05-14 14 views
0

Ich habe eine Tabelle namens "Felder", die Anwendungsfelder enthält. In dieser Tabelle speichere ich Metadaten für die einzelnen Felder (Tablename, Spaltenname, joinType (innen/außen).Hat jemand eine dynamische Abfrage-Engine mithilfe von Tabellen definierten Spalten erstellt?

ich etwas arbeiten, aber es ist nicht so sauber, wie Ich mag würde.

Hat jemand in Angriff genommen, bevor?

ich bin für einige Ideen um bessere Praktiken suchen.

+0

Gilt der Join-Typ nicht nur für ein Paar Felder, normalerweise (aber nicht notwendigerweise) in verschiedenen Tabellen? Und können Joins nicht manchmal auf der Basis von mehr als einer Spalte erstellt werden? –

Antwort

0

ich eine Abfrage-Generator in der Vergangenheit geschrieben habe, die Tabellen automatisch und die Dinge zusammen dynamische Berichte generieren beitreten könnten.

ich denke, heute , Ich würde nimm NHibernate. Obwohl es sich um ein ORM handelt, verwaltet es Joins und erstellt die Abfragen entsprechend den Mapping-Daten, die Ihren Metadaten sehr ähnlich sind.

Natürlich müssen Sie bestimmte Dinge tun, die nicht von NHibernate abgedeckt werden. Aber es ist ein ausgezeichneter Start.

1

Dynamische Daten/Felder machen immer Spaß.

Die Art, wie ich das vorher angegangen bin, ist eine Tabelle, die die Felder definiert, die ich will. Ein sehr einfaches Beispiel ist:

GroupId int, < - erlaubt mir, Gruppenfelder zusammen für einen gemeinsamen Zweck

fieldID int, < - eindeutige Kennung für

Field varchar (100) verbindet, < - Offensichtlich

DataType Int < - Joins auf einer Tabelle, die verfügbare Typen wie Text, Telefon, E-Mail enthält, die spezielle Verarbeitungsmerkmale haben können.

DisplayOrder int, < - In welcher Reihenfolge werden die Felder auf dem Bildschirm angezeigt.

Dann habe ich eine andere Tabelle, um die tatsächlichen Daten zu halten: EntryId int, < - Gruppiert die Werte zu einem eindeutigen Einstiegspunkt. GroupId int, FieldId int, Wert varchar (max) < -wie auch immer die Zahl, die Sie fühlen, die Daten enthalten wird; oder max, wenn Sie die richtige Version von SQL-Server haben

Schließlich erzeuge ich dynamisch Ansichten, die die tatsächlichen Daten um 90 Grad für eine einfachere Berichterstattung drehen.

Auf diese Weise haben Sie eine Menge Freiheit bei dem, was Sie sammeln, ohne den zugrunde liegenden Code zu ändern.