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

Kon*_*rad 7 schema database-design denormalization

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

我有 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

Wal*_*tty 9

我看到的解决方案是将地址数据复制到InvoiceHeader表中。这是冗余,但无害*。不会发生更新异常,因为发票上的地址以后不应更改。

关于将产品价格数据复制到InvoiceDetail表格中,可以提出类似的观点。

* 更新异常仅在有害冗余时发生。尽管如此,如果客户地址在稍后时间点在客户表中发生变化,但在InvoiceHeader表中保持不变,那么它们将不再是多余的。


归档时间:

查看次数:

2159 次

最近记录:

7 年,1 月 前