标题有点难以理解,所以解释如下:
我正在构建一个处理零售交易的系统。意义——购买。我有一个产品数据库,其中每个产品都有一个ID, POS系统也知道这个ID。当客户进行购买时,数据被发送到后端进行解析,并被保存。现在一切都很好,直到产品名称有变化,因为我的客户想看到产品的名称,因为它是当时购买的。
我如何保存这些数据,同时还保持一个良好的,格式正常的数据库?
我能想到的解决方案是:
- 去标准化,我们将传入数据与数据库中的信息相关联,然后仅保存最终文本值,而不是id。
- 版本管理,我们保留每个产品的多个版本,并保存交易与产品版本的id,当它进入。这个的问题是,随着我们零售连锁店的增长,产品的变化越来越多,整个产品的复杂性将大大增加。
对此有什么想法吗?
这就是所谓的慢变维。
你提到的任何一个解决方案都有效。我更喜欢第二种方法,即版本控制。我有一个产品表记录中有effdate
和enddate
。您可以很容易地找到当前记录(where enddate is null
)或任何时间点的记录。
第一种方法总是让我觉得更"快速和肮脏",但它也有效。当你有更多的字段和更多的对象要跟踪时,它会变得很麻烦。但总的来说,它确实在性能上更胜一筹。
如果名称必须保持原来的名称,那么最简单、最可靠的方法是将产品名称保存在发票行项目记录中。
当然,您仍然应该使用ProductID链接到产品。
如果你想保存名字变更的历史记录,如果你愿意,你可以在一个单独的表中完成:
ProductNameID
ProductID
Date
Description
并存储带有发票行项的ProductNameID。