问题描述
|
我不知道表设计需要哪种类型的Audit日志记录系统。
有时,工作人员会更改产品的名称,价格,选项或其他。但是我们不保留历史记录中已更新或删除的内容..如何处理这种情况?
使用审核(历史记录表)还是版本控制类型?请提供我的桌子设计示例。
产品包含一个或多个选项。期权可以有附加项也可以没有附加项。
表格设计示例:
产品表:
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 |
+----------+-----------+---------+-------+
Extras表:(OptionID 2有两个Extras ... OptionID 1而没有Extra)
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)的列表,但我确实包括了Option Name...。因此,如果我更改Option Name(options.Name
),则该订单将生效。
解决方法
我认为您没有给我们足够的信息来回答您的问题。在我工作的地方,员工每天都会更改数据库中的数据。我们保留某些表的历史记录,而不保留其他表的历史记录。我们保留一些表的审计跟踪,而不保留其他表的审计跟踪。对于某些表,我们既不保留历史记录也不保留审核记录。
我可以想象更改产品名称来纠正错字。此类更改通常不需要更改选项或其他功能。
我还可以想象以某种方式更改产品名称,使其与众不同,这可能需要更改选项和附加功能。
由于大多数公司都销售产品,所以我认为您应该重新考虑表的名称。您的“产品”表似乎更像是产品类别。您的“选项”表似乎更像是产品。类别没有价格,但是产品有。
您还询问了订单。对表\“ products \”,\“ options \”和\“ extras \”中的值所做的更改应该对先前的订单无效。从现在开始的五年后,您可能不得不上法庭并提供命令的副本。如果您缺少文书工作,即使数据库中充满了错别字和错误的价格,您的数据库也能更好地重现客户所支付的价格。
, 从您的评论。我建议做两件事。
为产品和类别表添加审核日志(历史记录)表。此处的示例审核产品数据的日志记录?
对于选项/附加表,我将通过在每行上都有开始和结束日期来进行版本控制,这样您就可以在任何给定的时间点看到该值。一个很好的解释在这里
版本化每个字段与历史记录日期字段?