Кто-нибудь создал динамический механизм запросов, используя таблицы, определенные столбцы? - PullRequest
0 голосов
/ 14 мая 2009

У меня есть таблица «Поля», которая содержит поля приложения. В этой таблице я храню метаданные для каждого поля (TableName, ColumnName, JoinType (внутренний / внешний).

У меня что-то работает, но не так чисто, как хотелось бы.

Кто-нибудь занимался этим раньше?

Я ищу идеи относительно лучших практик.

Ответы [ 2 ]

1 голос
/ 14 мая 2009

Динамические данные / поля всегда веселые.

То, как я подошел к этому раньше, это иметь таблицу, которая определяет поля, которые я хочу. Очень простой пример:

GroupId int, <- позволяет группировать поля для общей цели </p>

FieldId int, <- уникальный идентификатор для объединений </p>

FieldName varchar (100), <- очевидный </p>

DataType int <- объединяет таблицу, которая содержит доступные типы, такие как текст, телефон, электронная почта, которые могут иметь специальные характеристики обработки. </p>

DisplayOrder int, <- в каком порядке поля будут отображаться на экране. </p>

Тогда у меня есть другая таблица для хранения фактических данных: EntryId int, <- группирует значения в уникальную точку входа. GroupId int, FieldId int, Значение varchar (max) <- используйте любое число, которое, по вашему мнению, будет содержать данные; или max, если у вас правильная версия сервера sql </p>

Наконец, я динамически генерирую представления, которые поворачивают фактические данные на 90 градусов для облегчения создания отчетов.

Делая это таким образом, вы получаете большую свободу в том, что собираете, без изменения базового кода.

0 голосов
/ 14 мая 2009

В прошлом я писал генератор запросов, который мог автоматически объединять таблицы и объединять их для создания динамических отчетов.

Думаю, сегодня я бы взял NHibernate. Хотя это ORM, он управляет объединениями и создает запросы в соответствии с данными сопоставления, которые очень похожи на ваши метаданные.

Конечно, вам все равно придется делать определенные вещи, которые не охватываются NHibernate. Но это отличное начало.

...