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

时间:2013-10-27 21:44:45

标签: database-design

我正在设计一个数据库,我有一个 Orders 表。 (显然这是一家在线商店)

订单表还包含 addressId ,它指向已保存的地址表(客户的已保存地址)。但是,客户可以编辑已保存的地址,这意味着如果他这样做,订单中的地址也会发生变化,这是错误的,因为订单< / strong>已发送到旧地址(编辑前)。

我想知道社区处理这类事情的常态是什么?

我难以记录吗? (不是指向一个地址,而是明确地将地址详细信息写入订单

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

这里的“最佳做法”是什么?

2 个答案:

答案 0 :(得分:1)

最好在交易完成后拍摄任何金融交易的快照,包括其相关的参考数据。审核员希望您的数据能够准确反映您的业务活动。

出于实际目的,这通常意味着有以下规则:“一旦确认,您不得更新或删除交易数据(例如销售)。”

更好的是,对金融交易数据使用复式风格会计。这使您可以保留值得信赖的金融交易记录,但仍允许您记录历史记录的更改(如发出信用票据或取消订单),而不会破坏数据库中的历史记录。

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

答案 1 :(得分:1)

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