2016-12-20 30 views
0

在Microsoft Access中,我有三个表:订单表,客户表和产品表。我的订单表中包含客户联系人和产品信息。我不时需要更新客户地址。这样做时,我只希望新的地址出现在未来的订单上。我不希望Access使用最初不属于该订单的地址更新以前的订单。我还想维护客户列表中的活动地址和过去地址列表。请提供建立客户表的最佳方法以及如何在订单表上保留客户联系信息。在访问更新联系人信息时保留旧数据库中的记录

回答

3

为此,您需要将客户地址从客户表中取出并保存在单独的CustomerAddress表中。这个新表有一个主键(当然),一个返回到客户表的外键,所有你想保持历史的地址字段和一个当前标志(是/否)。您的订单表然后直接指向CustomerAddress表格而不是Customer表格(由于CustomerAddress到Customer中的FK链接,您可以从Order到Customer)。现在你的乐趣开始了!您必须以这样的方式维护您的CustomerAddress表:对于每个客户ID,您应该只有一个地址记录,其中Current为True。

另一种选择是在CustomerAddress表中没有Current标志,而是在Customer表中有一个CurrentAddress字段 - 这可以确保只有一个Address可以成为Customer的当前标志。但是,您无法强制执行CurrentAddress完整性和CustomerAddress外键 - 在添加Address记录之前,您无法设置CurrentAddress的值,因此Customer记录必须能够以NULL CurrentAddress存在(尽管我想你可以有一个虚拟的“未设置”CustomerAddress记录)。

1

简单的方法是将当前客户信息与订单一起存储。

扩展方法是将客户表(一个或多个)存储为表,或者使用自定义的方法或天然的 - 例如 - 通过SQL服务器的最新版本提供。查找术语时间数据库了解更多信息。

+0

我会选择@Skippy提出的第一个建议。只需进行一次更改,请勿使用当前标志(是/否),而是使用日期范围(有效日期和有效日期字段)。原因可能是客户提前向您发送地址更改。 – Rene

相关问题