[英]Matching records based on multiple criteria (from large dataset)
我的數據庫中有一個銀行帳戶清單。 我們想嘗試根據家庭對這些帳戶進行分組。 我們根據以下三個條件進行匹配:
如果這三個事物中的任何一個在兩個帳戶之間匹配,則應將這兩個帳戶放在同一組中。
據我了解, 這無法使用SQL joins來完成 。 我也不知道如何以編程方式進行操作。 我們的數據庫中有數百萬個帳戶,並且每個月的數量增長成千上萬(約15萬個ish),因此遍歷每條記錄並說:“好吧,執行SELECT * WHERE ssn = (this account's SSN)
”,因為它將永遠永久。
我知道這是一個模糊且開放性的問題,但是有關如何進行的任何建議? 我不在乎您在回答中使用哪種語言(如果您使用任何一種語言)。
以我的誠實觀點,您最好的選擇是實現家庭對帳戶的一對多或多對多關系。
我可以想到兩種方式來做這樣的事情。 第一個(可能不是最好的解決方案)是在帳戶表中添加一列來存儲住戶。 我個人將盡可能避免這樣做。
其次,創建一個“家庭”表來存儲家庭PK,並創建一個家庭交叉參考表來存儲家庭FK和帳戶FK。
然后,我將使用您使用的任何編程語言創建一個過程(希望它是面向對象的,您可以創建一個“對象”,該對象可用於下一部分,以后也可以使用)。
建立數據庫后,我將構建一個“方法”來接受一個帳戶,並通過ssn,客戶編號和地址進行比較,並返回一個相似帳戶ID的列表(這可能非常有用,可能會使您的初始處理更快)和/或返回類似帳戶可能屬於的家庭列表
這是讓我擔心的部分……在某些情況下,通過地址鏈接的帳戶可能屬於也可能不屬於與通過帳號鏈接的帳戶屬於或不屬於同一家庭。 父母分開的一個“孩子”(一個客戶編號)有一個由每個父母建立的帳戶(兩個帳戶的地址很可能不同),還有他們的OWN帳戶...等等...我個人會來通過某種商業邏輯將返還的家庭限制為只有1個家庭...
此時,通過具有相似帳戶的列表,並返回至少一個相似帳戶中的一部分的單個家庭,然后可以使用該家庭ID更新這些特定帳戶。
我會在那時設置邏輯,以遍歷表中的每個帳戶並在整個過程中運行它。是的,這將非常昂貴。...但是您只需要執行一次即可。
之后,在輸入帳戶后,為輸入設置過程以自動查找帳戶並將其放入家庭。
根據您的前端,這可能不是一個簡單的過程。
無論如何,我還將開發一個流程/用戶界面,該界面將允許用戶(可能是客戶服務代表)刪除/移動家庭之間的帳戶。
這是一個開始,只是激發您靈感。
好吧,我看不到讓每條記錄檢查其他每條記錄以查看它是否在同一個家庭中的任何方法。 我看到的唯一效率是,如果記錄已經存在於家庭中,則可以跳過檢查。 在偽代碼中
delete all record.household
currentHousehold=1
foreach record
record.household=currentHousehold
foreach record
if record.household is null
if meet criteria 1
record.household=currentHousehold
exit
else if meet criteria 2
record.household=currentHousehold
exit
else if meet criteria 3
record.household=currentHousehold
exit
end if
end if
next record
currentHousehold++
next record
假設您向表中添加了一個家庭列,您可以對其進行分組。 我指出應該清除當前的家庭價值-以防萬一某些數據發生變化。
如果您可以攔截對條件字段的任何可能更改,那么您可以在那里找到該記錄的新家庭。 在這種情況下,住戶價值可以保持不變,腳本僅需尋找住戶即可獲得新記錄(或者,如果可以的話,只需在添加記錄時這樣做即可)。 如果您具有這種控制權,那么應該將每條記錄放入家庭中一次以用於現有記錄(添加時或修改條件字段時)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.