2010-10-26 58 views
1

SQL Server 2008的2 XML進口 - 數據庫設計

上午,

如果有人可以提供他們的意見,這將是非常讚賞。

目前我正在尋找導入兩個XML文件,捐款額和捐贈者。

捐款金額文件將包含一個金額字段和一個DonationMakerID,並且捐贈者文件將包含名稱字段和DonationMakerID。捐獻者將捐獻一定數量的金額文件。

我的問題是,我偶爾會收到一個捐款捐助者ID號的文件,該文件與當前數據庫中的任何捐贈者無關,但可能與Donation Maker XML文件中的Donation MakerID有關,我將當天晚些時候收到。

現在,在我收到Donation Maker文件之前,如何存儲捐贈金額信​​息的最佳方式是?我明顯可以不加載捐款金額文件,直到我有一個匹配的捐款MakerID,但我寧願加載文件,當我得到他們。

理想情況下,我需要一個FK約束,只有強制爲已經在捐贈設備表中存在的ID在捐款金額表引用完整性...

我有例如一些想法,兩列的dbo.DonationAmount DonationMakerID和XMLDonationMakerID,其中DonationMakerID可以允許NULL。然後,當我收到捐款金額文件時,我將DonationMakerID加載到XMLDonationMakerID字段中,並且如果製造商表中有匹配的ID,我將其加載到Donation makerID列,否則我將其保留爲NULL。然後,當我收到後續的Donation Maker XML文件時,我可以根據捐助者XML文件中的ID檢查XMLDonationMakerID字段,如果找到與更新DonationMakerID相匹配的字段。

希望大家都有道理。

非常感謝

回答

1

首先,您是否可以等到收到第二個文件並按正確順序處理它們?或者你可以讓他們在同一時間發送它們或首先發送捐助者文件?解決時間問題是第一個,也是最好的選擇。

如果這是不可能的,將壞記錄移出到一個單獨的表中,這樣可以保持外鍵約束(這是非常重要的,不要擺脫約束)。 然後在第二次導入後檢查該表並在正確的捐助者進入後添加任何記錄。不管你做什麼,你都不想把數據放到生產表中,直到關聯的數據與它在一起,否則你的數據庫中會有無意義的垃圾。爲了做到這一點,擺脫必要的FK約束是未來保證數據完整性的其他問題。

+0

乾杯的答覆。在閱讀完您的建議之後,我重新設計了建議,並添加了臨時表格,以便在沒有相關捐贈人的情況下投入捐款。然後當我加載下一個Donation Maker文件時,我檢查相關的ID並刪除,插入,更新等。你的毫無意義的垃圾聲明引起了人們的注意,因爲我不認爲我正在以足夠的尊重對待某些數據。 – Pixelated 2010-10-27 09:59:05

1

你能不能

  • 檢測何時DomainMakerID尚不存在
  • 如果是這樣:添加一個新條目到您的DomainMaker表,其標記爲「臨時工」 「臨時」或任何其他
  • 一旦您獲得帶有新ID的DomainMaker,更新該行並刪除「臨時」標誌

像這樣的東西應該工作(我希望!),並允許您從XML中插入數據。

+0

@ Marc_S.Many感謝您的回覆。我帶了一些相當類似的東西,當我導入DonationDetail文件時,我將XMLDonationDetailID的ID導入到XMLDonationDetailID中,無論金額和金額字段。我也加入了LEFT JOIN Donation Maker表格,如果ID匹配,我將DonationDetailID更新爲相關的ID.So,如果我目前沒有系統中的捐贈者,DonationID爲空,並且XMLDonationID填充了missingID。然後,當我收到下一個Donation Maker XML文件時,我檢查是否存在XMLDonationID,如果是,請更新DonationAmount中的DonationID。 – Pixelated 2010-10-26 12:17:49