小编Kon*_*rad的帖子

将个人数据存储在发票上以保持数据完整性

我想存储发票数据,如人员地址。但问题是地址会随着时间的推移而改变——例如,有人会搬出去改变他的地址。存储此类数据的问题出现了,因为我们无法更改某些发票上引用的数据。

我有 3 个表:(AddressInfo包含 StreetAddress 等),Person它们与AddressInfo, 和Invoice表具有一对多关系。

我有两个解决方案,但我不确定哪个方向是正确的方法:

  • 创建AddressInfo并使其可软删除,添加一些类似的列IsActiveIsDeleted以便我的Invoice表可以通过其 ID 引用此地址信息,并且保证保持不变,除非有人在不使用我的应用程序的情况下直接更改此数据。

    因此,当有人更改他的地址时,我会软删除(也许应该称为软更新?)当前地址并添加新地址,而根本不会触及旧记录。最好先检查一下发票上是否引用了它以防止污染。

    我的Invoice桌子看起来有点像:

    | InvoiceId | AddressInfoId |

  • 将所需的列添加AddressInfo到我的Invoice表中。每次创建新发票时,我都必须复制数据,地址不会经常更改,重复记录会稍微污染我的数据库。

    我的Invoice表看起来有点像(大大简化):

    | InvoiceId | StreetAddress |

您是否有使用解决此特定问题的数据库(可能是某些 ERP 软件)的经验?


有趣的朗读:

https://martinfowler.com/eaaDev/timeNarrative.html

schema database-design denormalization

7
推荐指数
1
解决办法
2159
查看次数

标签 统计

database-design ×1

denormalization ×1

schema ×1