审核产品/选项/ Exras表的日志记录?

时间:2011-06-21 23:35:21

标签: mysql sql database database-design

我不知道我的表格设计需要什么类型的审核日志系统。

有时员工会用它更改产品,价格,选项或附加品的名称。但是我们不保留已更新或删除的历史记录。如何处理这种情况?

使用审核(历史记录表)或版本控制类型?请提供我的桌子设计示例。

产品包含一个或多个选项。一个选项可以有额外的或没有额外的。

表设计示例:

产品表:

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个附加功能。

我在选项和附加表中有超过300,000行。

我有Order和Order_Items表..在Order_Items表中它包含OptionID(FK)列表但我确实包含了Option Name ...所以如果我更改Option Name(options.Name)那么顺序将会生效。

2 个答案:

答案 0 :(得分:1)

我认为你没有给我们足够的信息来回答你的问题。在我工作的地方,员工每天都会更改数据库中的数据。我们保留一些表的历史记录,而不是其他表。我们为一些表保留审计跟踪,而不是其他表。对于某些表格,我们既不保留历史记录也不保留审计记录。

我可以想象更改产品名称以更正拼写错误。这种变化通常不需要对选项或附加内容进行任何更改。

我还可以想象以一种不同的产品方式更改产品的名称,这可能需要更改选项和附加功能。


由于大多数公司销售产品,我认为您应该重新考虑您的餐桌名称。您的“产品”表似乎更像是一类产品。您的“选项”表似乎更像产品。类别没有价格,但产品有价格。

您还询问了订单。表“product”,“options”和“extras”中值的更改不应对先前的订单产生任何影响。五年后,您可能需要上法庭并提供订单副本。如果您错过了文书工作,那么您的数据库就能够更准确地重现客户所支付的费用,即使它充满了拼写错误和错误的价格。

答案 1 :(得分:0)

来自您的评论。我建议做两件事。

为“产品”和“类别”表添加审核日志(历史记录)表。示例Audit logging for products data?

对于Options / Extra表,我会通过在每一行上设置开始和结束日期来进行版本控制,这样您就可以在任何给定的时间点看到该值。这里有一个很好的解释 versioning each field vs history date field?