ФОН
Я работал над инструментом, который должен работать в сочетании с унаследованным приложением, и попал в маленькую кирпичную стену. Я провел последний день или около того в поисках подсказок для этого, но мне не повезло.
Я пытаюсь отобразить связь между таблицей и несколькими другими таблицами следующим образом:
Родительская таблица представляет собой «словарь». Этот словарь представляет собой список всех полей базы данных, которые можно использовать в специальных запросах записей в (ужасном) унаследованном приложении. Каждая запись содержит таблицу и столбец, в котором можно найти элемент, уникальное идентифицирующее «понятное» имя, ключ для использования в таблице поиска глобальных значений и флаг, определяющий, как извлекаются эти значения поиска, и текстовый столбец, который определяет SQL для запуска, чтобы получить данные поиска, если значение флага установлено соответствующим образом. Имя таблицы - [словарь] (структуру таблицы см. Ниже)
Флаг может иметь одно из четырех значений:
- FREEFORM
- СТАНДАРТ
- SYSTEM
- DYNAMIC
Если флаг установлен в FREEFORM, то конечный пользователь может ввести любое значение, которое он хочет. Если это любое другое значение, то значение должно быть выбрано из списка следующим образом:
- STANDARD : Устаревшее приложение извлекает все значения из запроса «объединить все» двух таблиц, единственное отличие которых состоит в том, что одна таблица основана на финансовом году, а другая - «глобальная» таблица значений , Эти таблицы содержат ВСЕ значения поиска для всех записей словаря, помеченных как «СТАНДАРТНЫЕ». Эти две таблицы называются [fy_lookup_values] и [lookup_values] соответственно (структуру таблицы см. Ниже)
- SYSTEM : Если понятное имя в таблице словаря - «состояние», оно вытягивает список всех состояний в таблице [состояние]; если страна, то она делает то же самое для таблицы [страна] (структура таблицы приведена ниже)
- DYNAMIC : значения поиска заполняются на основе запроса из динамического поля SQL, описанного выше в таблице словаря. Эти запросы не создают псевдонимы выбранных столбцов с именами, даже похожими на имена столбцов из двух других типов поиска выше. Ниже я приведу пример одной из многих таблиц, используемых в этих запросах.
СТОЛОВЫЕ КОНСТРУКЦИИ
Table [dictionary]
token int not null identity primary key
name varchar(10) not null
table_name varchar(50) not null
column_name varchar(30) not null
lookup_key varchar(10) not null
lookup_type varchar(8) not null
query_text text
Table [lookup_values]
lookup_key varchar(10) not null primary key
lookup_value varchar(20) not null primary key
lookup_description text not null
Table [fy_lookup_values]
lookup_key varchar(10) not null primary key
lookup_value varchar(20) not null primary key
lookup_description text not null
fy_year_token int not null
Table [state]
state_code varchar(4) not null primary key
state_name varchar(30) not null
Table [country]
country_code varchar(4) not null primary key
country_name varchar(50) not null
Table [banks]
bank_token int not null identity primary key
bank_name varchar(50) not null
Все извлечения значений поиска в приложении включают два столбца: код и описание. Устаревшее приложение в настоящее время массирует все входящие данные на основе позиции столбца, а не имени.
Я не могу коснуться структуры базы данных (даже чтобы добавить процедуру хранения), а также не могу изменить способ выполнения поиска, поскольку все они используются некоторыми устаревшими приложениями, и любые изменения могут сделать управление очень несчастным ... I Если бы я мог, так как это только одна из многих вещей, которые делают мои волосы седыми, когда дело доходит до этого приложения. Итак ...
Мой главный вопрос, я полагаю, возможно ли сопоставить их таким образом с NHibernate, чтобы, когда я беру элемент словаря, мне заполнялись значения поиска? Если это возможно, то как? Я знаю, что если бы все поиски были выполнены одинаково, я мог бы, но я даже не знаю, возможно ли отобразить на основе полученных извне запросов.
Надеюсь, это имеет смысл, поскольку мне потребовалось некоторое время, чтобы обернуть вокруг него свой мозг.
EDIT
Вот несколько примеров того, чего я пытаюсь достичь.
У нас есть следующие записи в таблице [словарь]:
token, name , table_name, column_name, lookup_key, lookup_type, query_text
1 , gender , customer , gender , gender , STANDARD , NULL
2 , addr_st , customer , addr_st , state , SYSTEM , NULL
3 , acct_type, cust_accts, type_code , acct_type , DYNAMIC , select type_code, descr from acct_types where active = 1
Итак, в унаследованном приложении, когда они загружаются, вот SQL, который выполняется для получения значений поиска.
Пол:
select lookup_value,
lookup_description
from lookup_values
union all
select lookup_value,
lookup_description
from lookup_values
where fy_year_token = @P1
Адрес:
select state_code,
state_name
from state
Тип учетной записи:
select type_code,
descr
from acct_types
where active = 1