我有一个要求,我相信必须在世界各地频繁发生。我有两条链接在一起的记录,每当对它们进行更改时,都会创建一对新记录并保留相同的链接。如何轻松地将数据库中的记录链接在一起?
我正在处理的要求与保险行业有关,该保险业要求我停用当前的保险单并在新行中重新激活它们以显示保险单更改的历史记录。当他们重新创建时,他们仍然需要联系在一起。
的这个过程是如何打算从行视图在一个数据库中的示例:
保险证,保险类型,主保险ID,状态
1,汽车保险,空,活动
2,防风保险,1,活动
注意上面如何将这些政策之间的联系是通过第二排指向第一行的保险标识的主保险编号表示。
在我写我在同一时间处理每一个政策一个这样的第一步骤的代码,我有以下几点:
1,汽车保险,空,无效
2 ,防风保险,1,活动
3,汽车保险,空,活动
当我处理第二个政策,我得到了FOL降脂:
1,汽车保险,空,无效
2,防风保险,1,无效
3,汽车保险,空,活动
4,防风保险,,活动//需要是3而不是1
您会注意到当我创建新窗口保险时,由于我们复制了旧行,因此我们最终Master Id保险指向非活动行。
为了解决这个问题,我需要跟踪先前政策的主保险ID已处理这导致了如下代码:
int masterInsuranceId = -1;
foreach(Policy policy in policyList)
{
//copy the old policy so the new policy has
//the same details as the old one
Policy newPolicy = policyManager.Copy(policy);
//if the new policy is not the master insurance store
//the master its new master insuance
if(newPolicy.MasterInsuranceId.HasValue)
{
newPolicy.MasterInsuranceId = masterInsuranceId;
}
//save the details of the new policy
policyManager.SavePolicy(newPolicy);
//record the master id so we can update the master id
//reference on the next policy
if(newPolicy.MasterInsuranceId == null)
{
masterInsuranceId = newPolicy.Id;
}
else
{
masterInsuranceId = -1;
}
//inactivate the current policy
policy.Status = Inactive;
policyManager.UpdatePolicy(policy);
}
有谁知道这可能是简化?确保两条记录的最佳方式将保持相互关联,即使对记录的每次更改都记录了更改的历史记录。
不幸的是,我不知道太多的SQL或非常关于数据库模式......我不会允许即使我想改变它。我强烈地感觉这会更好地处理其他地方...我只是不知道在哪里... – mezoid 2009-09-11 06:36:56
恕我直言,这个问题是在实体关系的领域。你可以在代码方面做到这一点,但我想不出一个你已有的解决方案。这就是为什么对于一个数据密集型应用程序,得到正确的架构,并从那时起会更容易 –
Extrakun
2009-09-11 07:16:25