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,该子程序下的子程序将插入唯一的一个子程序中,而不是创建第二个子程序。

导入时如何识别特定调优的父子程序?

那么我该如何解决这个问题。??

4

1 回答 1

0

我相信这是一个设计决策 - 它可能会根据您的业务需求而有所不同,但总的来说它应该如下所示:

  • 您应该有一个导入数据的中心点,以确保按顺序而不是并行进行重复检查,否则您将需要一个时间戳字段来根据创建顺序同步数据
  • 您应该检查导入数据中是否有任何重复记录、重复描述或重复 ID,并清除这些记录或返回验证异常
  • 如果您有所有级别(程序,子程序,Tunning)的规则(无重复描述),那么您应该首先检查程序是否重复(通过将描述与现有数据进行比较)如果是,则从数据库中获取 id 并将其放入在映射字典中

    var ProgramIdMapping = new Dictionary<int,int>();
    ProgramIdMapping.Add(ImportedDataId, DatabaseId);
    
  • 现在对子程序和调整记录重复此操作,当您开始将它们插入数据库时​​,您可以从映射字典中找到父数据库 ID

    var DbProgramId = ProgramIdMapping[subProgram.ProgramId];
    
于 2013-07-06T12:04:28.273 回答