2010-06-24 57 views
3

我有一個數據密集型問題,需要大量的按摩和數據操作,我將它放在那裏以查看是否有人有關於如何處理它的想法。處理SQL數據問題的最佳方法

最簡單的形式。我有很多桌子可以放在一起給我一個牙醫的價格清單,以及每個程序的費用。

所以我們有多個表,看起來像這樣。

Dentist | Procedure1 | Procedure2 | Procedure3 | .........| Procedure? 
John | 500  | 342  | 434  | .........| 843 
Dave | 343  | 434  | 322  | NULLs....| 
Mary | 500  | 342  | 434  | .........| 843 
Linda | 500  | 342  | Null  | .........| 843 

牙醫可以有不同數量的程序和不同的價格爲每個程序。但是有很多牙醫擁有相同數量的手術和相同的費率。在內部,我們爲每個這些所謂的費用列表創建一個唯一的ID。

像約翰將是001,戴夫將是002,但瑪麗將收費001和琳達將003 如果我不得不處理這些數據一次,但這些費用清單來平面文件(csvs ),我基本上必須DTS到一個SQL服務器工作。他們每月都會來。每個牙醫的定價可能會逐月改變,然後在內部將它們置於不同的唯一ID中。

有人可以解釋一下如何最好地解決這個問題,以便每月處理最有效率,而無需做大量的數據操作?

  1. 什麼是找出費用清單重複的最佳方法?
  2. 我如何跟蹤更新牙醫的費用清單,以便他們在下個月更改費率?如果瑪麗決定對程序2收取不同的費用,那麼她在內部會有不同的唯一ID。我如何跟蹤每月的基礎,而不必刪除所有內容並重新插入?
  3. 我正在使用幾百萬個費用清單,有些清單是基於郵政編碼的標準規則,有些只是獨特的費用清單,這裏有什麼方法?
  4. 我可以編寫一些ad-hoc .net程序來處理它,但它是大量的數據,直接在SQL服務器上工作對我來說會更容易。

任何幫助將是偉大的,謝謝你們。

回答

1

你可能需要unpivot的數據正常化它 - 讓你最終有:

Doctor: DoctorID, DoctorDetails... 
FeeSchedule: DoctorID, ScheduleID, EffectiveDate, OtherDetailAtThisLevel... 
FeeScheduleDetail: ScheduleID, ProcedureCode, Fee, OtherDetailAtThisLevel... 

當數據進入了一個醫生,它轉動時,會創建一個新的時間表和細節行是從未轉發的數據創建的。

SSIS有一個不透明的組件,這很好 - 你會先加載調度,然後再加載細節。如果格式變化很大,則可能需要自定義數據源或避免使用SSIS。

該系統將跟蹤醫生的新時間表。如果醫生的時間表相同,則可以不插入。

如果這個邏輯非常廣泛,您可以將數據加載到登臺表(SSIS或其他),然後在SQL中執行所有操作(T-SQL也有UNPIVOT運算符)。這樣做的優點在於代碼全部集中在一個地方,並且可以集中執行所有操作。

關於郵政編碼,如果醫生沒有收費,是否像通常和慣常的費用?這可以簡單地從醫生行的郵政編碼確定。在這種情況下,你有幾個選擇。您可以通過郵政編碼收費表覆蓋醫生的收費表:

ZipCodeSchedule: ZipScheduleID, ZipCode, EffectiveDate 
ZipCodeScheduleDetail: ZipScheduleID, ProcedureCode, Fee 

或者你也可以在常規feeschedule保存這個(可能與某種標誌,它被默認爲UCR)。

+0

不幸的是,我們爲這些費用清單創建了內部唯一ID。所以如果醫生共享相同的費用列表,他們將具有相同的內部唯一ID。這是在正常化的嘗試失敗。但那是個別情況。現在我們有基於郵編的區域費用清單。現在如果這些費用計劃列表更改,那麼實際上沒有辦法跟蹤它們,因爲根據費用列表的類型,同一個拉鍊可能會有不同的費用列表。 – stevenjmyu 2010-06-25 16:56:42

+0

@megatoast,在這種情況下,我的郵編時間表需要在ZipCode,FeeType,EffectiveDate上具有唯一的ekey – 2010-06-25 22:20:49

相關問題