我不知道我的表格设计需要什么类型的审核日志系统。
有时员工会用它更改产品,价格,选项或附加品的名称。但是我们不保留已更新或删除的历史记录。如何处理这种情况?
使用审核(历史记录表)或版本控制类型?请提供我的桌子设计示例。
产品包含一个或多个选项。一个选项可以有额外的或没有额外的。
表设计示例:
产品表:
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
)那么顺序将会生效。
答案 0 :(得分:1)
我认为你没有给我们足够的信息来回答你的问题。在我工作的地方,员工每天都会更改数据库中的数据。我们保留一些表的历史记录,而不是其他表。我们为一些表保留审计跟踪,而不是其他表。对于某些表格,我们既不保留历史记录也不保留审计记录。
我可以想象更改产品名称以更正拼写错误。这种变化通常不需要对选项或附加内容进行任何更改。
我还可以想象以一种不同的产品方式更改产品的名称,这可能需要更改选项和附加功能。
由于大多数公司销售产品,我认为您应该重新考虑您的餐桌名称。您的“产品”表似乎更像是一类产品。您的“选项”表似乎更像产品。类别没有价格,但产品有价格。
您还询问了订单。表“product”,“options”和“extras”中值的更改不应对先前的订单产生任何影响。五年后,您可能需要上法庭并提供订单副本。如果您错过了文书工作,那么您的数据库就能够更准确地重现客户所支付的费用,即使它充满了拼写错误和错误的价格。
答案 1 :(得分:0)
来自您的评论。我建议做两件事。
为“产品”和“类别”表添加审核日志(历史记录)表。示例Audit logging for products data?
对于Options / Extra表,我会通过在每一行上设置开始和结束日期来进行版本控制,这样您就可以在任何给定的时间点看到该值。这里有一个很好的解释 versioning each field vs history date field?