创建订单时处理参照完整性规则的正确方法



我正在设计一个数据库,其中有一个订单表。(显然这是一个网上商店)

"订单"表还包含一个 addressId,该 ID 指向"已保存的地址"表(客户的已保存地址)。但是,客户可以编辑他的保存地址,这意味着如果他这样做,订单中的地址也会改变,这是错误的,因为订单被运送到旧地址(编辑之前)。

我想知道社区处理这些事情的规范是什么?

我硬记录吗?(不是指向地址,而是将地址详细信息清楚地写到订单中)

我是否禁止客户编辑/删除已保存的地址?(这看起来像糟糕的用户体验,我觉得法律允许客户从我的数据库中删除个人信息)

这里的"最佳实践"是什么?

最好在

交易完成后对任何金融交易(包括其相关参考数据)进行快照。 审计员希望看到您的数据代表了您的业务活动的准确情况。

出于实际目的,这通常意味着制定这样的规则:"一旦交易数据(例如销售)得到确认,您不得更新或删除它们。

更好的是,对金融交易数据使用复式记账。 这使您可以保留可信赖的金融交易记录,但允许您记录历史记录的更改(例如发出贷方通知单或取消订单),而不会破坏数据库中的历史记录。

对于维度数据(如地址),最好保留所有记录地址的历史记录表,而不仅仅是当前地址,然后将订单与地址历史记录表中的相应地址版本相关联。

我通过更改客户编辑地址时发生的情况来解决类似的问题。不要更新"保存的地址"表中的现有记录,而是使用新地址创建新记录并将其链接到"客户"记录。旧地址保留在链接到订单的数据库中,但不再链接到客户。

最新更新