我有两个存储产品定价的表格 -
`product`
- id
- name
- added_date
- is_removed (BOOL)
`price`
- id
- product_id
- price
- price_type
- added_date
- is_removed (BOOL)
这些表格始终反映产品在商店上的当前状态。
但是,出于审计目的,我需要跟踪以下五个事件:
跟踪此事的最佳方法是什么?在应用程序级别执行此操作非常困难,因为这两个表有大约30种方式可以更改。我正在考虑使用像触发器这样的人来将日志添加到另一个表中,尽管我担心这些表格会非常活跃(每天大约10M写入)。
最佳解决方案是什么?请注意,这些表是InnoDB。
答案 0 :(得分:1)
您可以创建2个表格。一个用于保存delta(已更改)记录,另一个用于保存Core表中前一天的快照。在给定的示例中,我仅使用Product表,但您也可以扩展Price的示例。
S
并从中同步数据
产品(P
)。 从第二天起,比较P
和S
并找到
更改/新记录。您可以通过左外连接来完成。
select p.id,p.name,p.added_date,p.is_removed,
case when S.id is null then 'Insert'
else when S.name <> P.name or S.added_date <> P.added_date or S.is_removed <> P.is_removed
then 'Update'
else 'No Change' end as RecordStatus
from Product P
left outer join S
on P.id=S.id
现在您可以使用此结果在另一个表中输入记录,例如Audit。您可以使用代理键和日期列来每天在审计中跟踪这些记录
最后与S
同步P
。 (从第二天起重复步骤2)