mysql历史数据和记录ID

时间:2015-09-22 20:52:26

标签: php mysql database transactions

我正在设置一个应用程序的新部分,其中包含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,并且不能用于整个应用程序的外键,因为它会随着每次更新而改变。

我可以想到两个选择:

  1. 创建一个单独的表,tid只有一列,主键自动增量tid,以及buyerid主事务表中的外键列 - 每次a创建全新的事务,插入ids表并使用该id作为tid来跟踪整个系统中的特定事务。

  2. prodid和{{1}}组合在我的应用中始终是唯一的,没有买家可以两次获得相同的产品。

  3. 第二种解决方案更好吗?有谁知道更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

考虑前面的两个答案,这是我将要使用的解决方案:我的应用程序中的所有数据更新都来自一个功能,已经设置为审核我选择的特定字段,因此我将标记交易status将在其他人之间进行审计。审计表的表结构与此类似:

|id|table|table_id|column|old_val|new_val|who|when|

只有通过对象id而不是简单的表名才有更高级的对象映射。然后,我可以在加入主正常非历史交易表中使用此数据,以提供所需的报告。