0

标题有点难理解,所以解释一下:

我正在构建一个处理零售交易的系统。含义 - 购买。我有一个包含产品的数据库,其中每个产品都有一个 ID,这也是 POS 系统已知的。当客户进行购买时,数据会被发送到后端进行解析,并保存下来。现在一切都很好,花花公子,直到产品名称发生变化,因为我的客户想看到产品的名称,因为它是当时购买的。

如何保存这些数据,同时保持一个漂亮的、标准格式的数据库?

我能想到的解决方案是:

  • 反规范化,我们将传入的数据与我们在数据库中的信息相关联,然后只保存最终的文本值,而不是 id。
  • 版本控制,我们保留每个产品的多个版本,并在产品进入时使用产品版本的 id 保存交易。这个问题是,随着我们零售连锁店的发展,变化越来越多发生在产品上,整个产品的复杂性会大大增加。

对此有什么想法吗?

4

2 回答 2

1

这被称为缓慢变化的维度。

您提到的任何一种解决方案都有效。我的偏好是第二个,版本控制。我会有一个产品表,其中有一个effdateenddate记录。您可以轻松找到当前记录 ( where enddate is null) 或任何时间点的记录。

第一种方法总是让我觉得更“快速和肮脏”,但它也有效。当您有更多字段和更多要跟踪的对象时,它会变得很麻烦。但总的来说,它确实在性能上取胜。

于 2013-06-01T15:24:15.553 回答
0

如果名称必须是原来的名称,最简单、最简单和最可靠的方法是将产品名称保存在发票行项目记录中。

当然,您仍然应该使用 ProductID 链接到产品。

如果您想保留名称更改的历史记录,您可以根据需要在单独的表中执行此操作:

ProductNameID
ProductID
Date
Description

并将 ProductNameID 与发票行项目一起存储。

于 2013-06-01T15:23:37.593 回答