我正在设置一个应用程序的新部分,其中包含mysql中事务表的历史数据要求。最初在旧版本中交易不是历史性的,具有如下结构:
"Show all transaction that had particular status Feb 2014"
以及其他字段,其ID在访问“交易详情”页面的链接中引用,以及在整个应用程序的其他表中用作外键,以便为各种目的引用特定交易。
现在要求回答报告问题,例如"What did a transaction look like in Feb 2014"
和id|buyerid|prodid|price|status|active|start_date|end_date
。
我正在测试的新设计如下:
active
其中start
用于表示最新记录,transaction_ids
是在创建时,没有要修改的记录而是填充结束日期,并且创建了具有相同详细信息和修改的新记录。
现在问题是 - 如何处理交易ID字段?因为在这个新设计中它更像是一个历史id,并且不能用于整个应用程序的外键,因为它会随着每次更新而改变。
我可以想到两个选择:
创建一个单独的表,tid
只有一列,主键自动增量tid
,以及buyerid
主事务表中的外键列 - 每次a创建全新的事务,插入ids表并使用该id作为tid来跟踪整个系统中的特定事务。
prodid
和{{1}}组合在我的应用中始终是唯一的,没有买家可以两次获得相同的产品。
第二种解决方案更好吗?有谁知道更好的方法来解决这个问题?
答案 0 :(得分:0)
考虑前面的两个答案,这是我将要使用的解决方案:我的应用程序中的所有数据更新都来自一个功能,已经设置为审核我选择的特定字段,因此我将标记交易status
将在其他人之间进行审计。审计表的表结构与此类似:
|id|table|table_id|column|old_val|new_val|who|when|
只有通过对象id而不是简单的表名才有更高级的对象映射。然后,我可以在加入主正常非历史交易表中使用此数据,以提供所需的报告。