在访问更新联系人信息的同时保留数据库中的旧记录

In access update contact information while retaining record of old in database

在 Microsoft Access 中,我有三个 table:订单 table、客户 table 和产品 table。我的订单 table 包含客户联系信息和产品信息。我时不时需要更新客户地址。这样做时,我只希望新地址出现在以后的订单上。我不希望 Access 使用最初不属于该订单的地址更新以前的订单。我还想在客户列表中维护一个活动地址和过去地址的列表。请建议设置客户 table 的最佳方式以及如何在订单 table 上保留客户联系信息。

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

扩展方法是将客户 table(s) 存储为 temporal tables,使用自定义方法或本地方法 -例如 - 由 SQL Server 的最新版本提供。查找术语 时态数据库 了解更多信息。

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

另一种选择是在 CustomerAddress table 上没有 Current 标志,而是在您的 Customer table 中有一个 CurrentAddress 字段 - 这确保只有一个地址可以是当前地址一个给客户。但是,您不能同时执行 CurrentAddress 完整性和 CustomerAddress 外键 - 在添加地址记录之前不能设置 CurrentAddress 的值,因此 Customer 记录必须能够与 NULL CurrentAddress 一起存在(尽管我想你可以有一个虚拟的 'Not set' CustomerAddress 记录)。