我正在设计一个数据库,其中有一个订单表。 (显然这是一家网上商店)
Orders 表还包含一个 addressId,它指向 Saved Addresses 表(客户的已保存地址)。但是,客户可以编辑他的保存的地址,这意味着如果他这样做,订单中的地址也会更改,这是错误的,因为订单 已运送到旧地址(编辑前)。
我想知道社区处理此类事情的规范是什么?
我要硬录吗? (不是指向地址,而是简单地将地址详细信息写入订单)
我是否禁止客户编辑/删除已保存的地址? (这看起来像是糟糕的用户体验,我感觉法律允许客户从我的数据库中删除个人信息)
这里的“最佳实践”是什么?
最佳答案
最好对任何金融交易进行快照,包括交易完成后的相关引用数据。审核员希望看到您的数据准确地反射(reflect)了您的业务事件。
出于实际目的,这通常意味着制定如下规则:“交易数据(例如销售)一旦确认,不得更新或删除。”
更好的是,对金融交易数据使用复式记账方式。这使您能够保留可靠的金融交易记录,同时允许您记录对历史记录的更改(例如发出贷项通知单或取消订单),而不会破坏数据库中的历史记录。
对于维度数据(例如地址),最好保留所有记录地址(而不仅仅是当前地址)的历史记录表,然后将您的订单与地址历史记录表中的相应地址版本相关联。
关于database-design - 创建订单时处理引用完整性规则的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623956/