2011-05-11 62 views
0

我有我的數據庫中的銀行帳戶列表。我們想嘗試將這些帳戶分組到家庭。我們符合三個標準:基於多個標準匹配記錄(來自大型數據集)

  • SSN
  • 客戶編號(這是從銀行任意數字)
  • 「地址字符串」(這是基本的街道地址以及郵編)

如果任意這三件事中的一件相匹配,兩個帳戶應該放在同一組中。據我所知,

This can't be done with SQL joins。我也不知道如何以編程方式進行。我們在數據庫中擁有數百萬個帳戶,每個月的數字增長數千(150K-ish),所以通過每條記錄並且說「好吧,做一個SELECT * WHERE ssn = (this account's SSN)」並不是很實際,因爲它會永遠佔用。

我知道這是一個模糊和開放式的問題,但有關如何進行的任何建議?我不在乎你在答案中使用什麼語言,如果你使用任何語言。

+0

對於輸入新/編輯現有「帳戶」的數據庫結構/編碼過程,您有多少控制權? – Patrick 2011-05-11 16:56:36

+0

完全掌控一切。 – 2011-05-11 17:03:28

+0

我認爲無論你採取什麼樣的路徑,都不會有一個乾淨/簡單的答案。 – Patrick 2011-05-11 17:17:49

回答

0

在我誠實的看法下,您最好的選擇是實施一對多或多對多的家庭賬戶關係。

兩種方式我可以想到做這樣的事情。 第一個(也可能不是最好的解決方案)是在帳戶表中添加一列以存儲家庭。就我個人而言,如果可能的話,我會遠離這一點。

第二,創建一個「家庭」表來存儲家庭PK,以及家庭交叉參考表來存儲家庭FK和賬戶FK。

然後,我將創建與任何編程語言的過程您使用(希望其面向對象的,你可以在未來建立一個「對象」,您可以使用下一個零件,然後爲好。

一旦數據庫設置完成,我會建立一個接受帳戶的「方法」,並通過ssn,客戶號碼和地址進行比較,並返回一個類似帳戶ID列表(這可能非常有用,可能會使您的初始過程更快)和/或返回類似賬戶可能屬於的家庭列表

這個是會擔心的部分e ......可能存在這樣的情況,即通過地址鏈接的賬戶可能或可能不屬於通過賬戶號碼鏈接的賬戶可能或不可能在的同一家庭),即,一個父母分居的「孩子」(一個客戶號碼)有一個由每個父母(兩個賬戶最有可能不同地址)設立的賬戶,以及他們的自有賬戶......等等......我親自來以某種形式的業務邏輯限制返回的家庭只有一個家庭......

在這一點上,通過擁有類似帳戶的列表,並且返回至少有一個類似帳戶的單一家庭一部分,然後您可以使用該家庭ID更新這些特定帳戶。

我會設置邏輯在這一點循環表中的每個帳戶,並通過過程中運行...是的這將是昂貴的....但你應該只需要做一次。

在此之後,隨着賬戶被輸入,建立一個進程自動查找並將賬戶放入家庭。

取決於您的前端,這可能或可能不是一個簡單的過程。

無論我還會開發一個流程/用戶界面,允許用戶(可預先設置的客戶服務代表)在家庭之間移除/移動賬戶。

這是一個開始,只是彈出想法。

+0

謝謝。這讓我有些事情要走了。 – 2011-05-11 18:02:42

0

那麼,我沒有看到任何方法讓每個記錄檢查每一個記錄,看看它是否在同一個家庭。我看到的唯一效率是,如果記錄已在家庭中,則可以跳過檢查。在僞代碼中

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 

假設您將一個家庭列添加到表中,您可以對其進行分組。我指出應該清除現有的家庭價值 - 這是在一些數據發生變化的情況下。

如果你可以截取你的標準字段的任何可能的變化,那麼你可以找到那個記錄的新家庭。在這種情況下,家庭價值可以保持不變,劇本只需要爲新記錄找到家庭(如果可以的話,只需添加記錄即可)。如果您有這種控制權,那麼您應該可以將每條記錄放入一個家庭中,以存儲現有記錄,添加時或標準字段被修改時。