我一直在努力了應該在與傳統的應用程序一起選擇工作的工具,我已經打了一個一對多的關係小磚牆。我花了最後一天左右爲此尋找線索,但我沒有運氣。
我想如下映射表和多個其他表之間的關係:
父表表示「字典」。該字典是可用於(糟糕的)遺留應用程序中的臨時記錄查詢中的所有數據庫字段的列表。每條記錄都包含可找到項目的表和列,唯一標識「友好」名稱,全局值查找表中使用的鍵以及確定如何抽取這些查找值的標誌,以及定義文本列SQL運行以獲取查找數據,如果標誌值設置得當。表名是[辭典](參見下面的表結構。)
該標誌可以具有以下四個值之一:
- FREEFORM
- STANDARD
- SYSTEM
- DYNAMIC
如果該標誌設置爲FREEFORM,則最終用戶可以輸入他們想要的任何值。如果它是任何其他值,那麼值必須從列表如下選擇的是:
- 標準:將遺留應用程序從一個「UNION ALL」拉的所有值兩個表的查詢的唯一區別是,一張表是基於財政年度的,另一張是「全球」價值表。這些表格包含所有「標準」標記的字典記錄的所有查找值。這兩個表分別稱爲[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
所有應用程序中的抓鬥兩列,一代碼和描述查找值retreivals的。遺留應用程序目前基於列位置而不是名稱來處理所有傳入數據。
我無法觸及數據庫結構(即使添加存儲過程),也無法更改查找的方式,因爲這些都是由一些傳統應用程序使用的,任何更改都會使管理非常不快。我希望我能這樣做,因爲這只是讓我的頭髮變灰的許多事情之一。所以...
我想我的主要問題是,如果有可能用NHibernate以這種方式映射這些數據,那麼當我抓取一個字典項目時,它的查找值會填充在我的?如果可能的話,怎麼樣?我知道,如果所有查找都以相同的方式完成,我可以,但我甚至不知道是否可以根據外部獲取的查詢進行映射。
我希望這是有道理的,因爲它花了我一段時間才圍繞它圍繞我的大腦。
編輯 下面是我想要完成的一些例子。
我們在[字典表以下記錄:
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
謝謝你的回覆。我曾看過各種子類策略,但從我讀的內容來看,它要求包含區分信息的表代表父類。就我而言,這是不可能發生的,我不認爲這是可行的,因爲歧視性信息完全基於另一類。也許我的帖子有點混亂。我將添加一些示例記錄以幫助澄清。 – 2011-02-04 18:27:27