我不知道我的表设计需要什么类型的审计日志系统。
有时员工会用它更改产品的名称、价格、选项或附加内容。但我们不会保留已更新或删除的历史记录。如何处理这种情况?
使用审计(历史表)还是版本控制类型?请提供我的表格设计的例子。
产品包含一个或多个选项。选项可以有附加选项,也可以不附加附加选项。
表格设计示例:
产品表:
mysql> select * from products;
+-----------+------------+
| ProductID | Name |
+-----------+------------+
| 1 | Hard Drive |
+-----------+------------+选项表:( ProductID 1中有两个选项)
mysql> select * from options;
+----------+-----------+---------+-------+
| OptionID | ProductID | Name | Price |
+----------+-----------+---------+-------+
| 1 | 1 | Samsung | 55.00 |
| 2 | 1 | Hitachi | 20.00 |
+----------+-----------+---------+-------+额外表:(OptionID 2有两个额外表...OptionID 1(不含额外内容)
mysql> select * from extras;
+---------+----------+------------------+--------+
| ExtraID | OptionID | Name | Price |
+---------+----------+------------------+--------+
| 1 | 2 | 10 Year Warranty | 100.00 |
| 2 | 2 | 20 Year Warranty | 250.00 |
+---------+----------+------------------+--------+如果我更改产品的名称(products.name)...选项和附加数据(无论ProductID链接到什么)应该自动添加到历史表中,还是使用版本化方法?
有些产品有20个选项,每个选项有10个额外选项。
options和extras表中有超过300,000行。
我有Order和Order_Items表。在Order_Items表中,它包含了OptionID (FK)的列表,但我确实包含了选项名称...因此,如果我更改选项名称(options.Name),则顺序将生效。
发布于 2011-06-22 17:46:24
我认为你没有给我们足够的信息来回答你的问题。在我工作的地方,员工每天都会更改数据库中的数据。我们为某些表保留历史记录,而不为其他表保留历史记录。我们为某些表保留审计跟踪,而不为其他表保留审计跟踪。对于某些表,我们既不保留历史记录,也不保留审计跟踪。
我可以想象一下,为了纠正一个拼写错误而更改产品名称。这种更改通常不需要对选项或额外的选项进行任何更改。
我还可以想象更改产品名称的方式,使其成为不同的产品,这可能需要更改选项和额外的。
由于大多数公司销售产品,我认为您应该重新考虑表的名称。您的" products“表看起来更像是一个产品类别。你的“选项”表看起来更像是产品。类别没有价格,但产品有价格。
您还询问了有关订单的问题。对表"products“、"options”和"extras“中值的更改应该不会影响以前的订单。五年后,你可能不得不去法院提供一份命令的副本。如果你错过了书面工作,你的数据库最好能够准确地再现客户支付的东西,即使它充满了打字错误和错误的价格。
发布于 2011-06-22 20:45:17
从你的评论中。我建议做两件事。
为Product和Category表添加审核日志(历史)表。示例Audit logging for products data?
对于Options/Extra表,我将通过在每一行上有一个开始和结束日期来进行版本控制,这样您就可以在任何给定的时间点看到值。这里有一个很好的解释,versioning each field vs history date field?
https://stackoverflow.com/questions/6433239
复制相似问题