2013-07-06 44 views
0

我有一個應用程序,我有3個表,其結構如下:有重複的條目的問題在導出的文件

1) Program 
    -------- 
    Program_ID 
    Description 

2) SubProgram 
    ---------- 
    SubProgram_ID 
    Program_ID 
    Description 

3) Tuning 
    -------- 
    Tuning_ID 
    SubProgram_ID 
    Program_ID 
    Description 

例。表值:

計劃:

Program_ID Description 
------------------------ 
1   ABCD 

子程序

SubProgram_ID Program_ID Description 
----------------------------------------- 
1    1   EFGH 
2    1   IJKL  // Here is the problem 
3    1   IJKL  // Here is the problem 

優化

Tuning_ID SubProgram_ID Program_ID Description 
-------------------------------------------------- 
1   1    1   MNOP 
2   2    1   QRST 
3   1    1   UVWX 

現在我有一個模塊在那裏我可以導出XML文件,任何一個可以記錄將其重新導入其主鍵可能不同的軟件中。

導出XML看起來是這樣的:

<?xml version="1.0" standalone="yes"?> 
<DocumentElement> 
<Program> 
    <Program_ID>123</Program_ID> 
    <Description>ABCD</Description> 
</Program> 
<SubProgramList> 
<SubProgram> 
    <SubProgram_ID>1195</SubProgram_ID> 
    <Descr>EFGH</Descr> 
</SubProgram> 
<SubProgram> 
    <SubProgram_ID>1195</SubProgram_ID> 
    <Descr>IJKL</Descr> 
</SubProgram> 
<SubProgram> 
    <SubProgram_ID>1195</SubProgram_ID> 
    <Descr>IJKL</Descr> 
</SubProgram> 
<SubProgramList> 

<TuningList> 
<Tunings> 
    <Program_ID>True</Program_ID> 
    <SubProgram_ID>0</SubProgram_ID> 
    <Description>MNOP</Description> 
</Tunings> 
<Tunings> 
    <Program_ID>True</Program_ID> 
    <SubProgram_ID>0</SubProgram_ID> 
    <Description>QRST</Description> 
</Tunings> 
<Tunings> 
    <Program_ID>True</Program_ID> 
    <SubProgram_ID>0</SubProgram_ID> 
    <Description>UVWX</Description> 
</Tunings> 
</TuningList> 
</DocumentElement> 

所以我的問題是:
我插入基於描述記錄,所以當子程序具有相同的描述則Tunings是子程序下將在只能插一個子程序並沒有創建第二個。

如何在導入時識別特定調整的父子程序。

那麼我該如何解決這個問題。

+0

請多解釋一下這個問題,你是否想要阻止dupl通過查找與匹配的描述相關的預先存在的條目並使用條目標識符,或者您已經試過並且未成功? – MEYWD

+0

是的。如果我使用記錄的條目ID,但是如果其他人會在他們的軟件中導入,那麼它可能不在那裏。所以這是問題。我如何識別特定的「父子程序」調整' –

+0

我的答案解決了你的問題嗎? – MEYWD

回答

0

我相信這是一個設計決策 - 也可以根據自己的業務需求不同,但總的來說它看起來應該像下面這樣:

  • 你應該有,你導入的數據做一箇中心點確保重複檢查是按順序進行,而不是平行進行,否則您需要時間戳字段根據創建順序同步數據。
  • 您應該檢查導入數據中是否有重複記錄,重複描述或重複ID並清除那些或返回驗證異常
  • I如果您對所有級別(Program,SubProgram,Tunning)都有規則(無重複描述),那麼您應該首先檢查程序是否重複(通過將描述與現有數據進行比較),如果是,則從數據庫中獲取id並放入在映射字典

    var ProgramIdMapping = new Dictionary<int,int>(); 
    ProgramIdMapping.Add(ImportedDataId, DatabaseId); 
    
  • 現在重複此爲子程序和調諧記錄,當你開始將它們插入到數據庫中,你從映射字典

    var DbProgramId = ProgramIdMapping[subProgram.ProgramId]; 
    
找到父數據庫ID