您能否分享您的想法,如何在PostgreSQL中实现数据版本。 (我问过有关的类似问题 卡桑德拉mongodb. 。如果您有任何想法更好的DB,请分享)

假设我需要在简单的通讯簿中版本记录。地址簿记录存储在一张表中,而无需为简单起见。我希望历史:

  • 很少使用
  • 将立即使用以“时间机”方式展示它
  • 单个记录的版本不会超过几百个版本。
  • 历史不会到期。

我正在考虑采用以下方法:

  • 创建一个新的对象表,以存储带有地址簿表格副本的记录历史表,并添加时间戳和外键以地址表表。

  • 创建一种较少的架构表来存储更改以进行通讯记录。该表将包含:adveradeBookID,时间戳,字段名称,值。这样,我只能存储记录的更改,而不必将历史记录表和地址为书籍表保持在同步中。

  • 创建一个表格存储静脉调查(JSON)地址簿记录或更改地址书籍记录。这样的表格如下:adveloseBookID,时间戳,对象(VARCHAR)。同样,这是模式少的,因此我不必将历史记录表保留在同步中。 ((这是通过使用Couchdb的简单文档版本来建模的)

有帮助吗?

解决方案

我做类似于您的第二种方法:具有实际工作集和具有更改的历史记录(Timestamp,record_id,property_id,property_value)。这包括创建记录。第三个表描述了属性(id,property_name,property_type),该属性有助于应用程序中的数据转换更高。因此,您还可以很容易地跟踪单个属性的更改。

而不是时间戳,您也可以像int一样,每个record_id的每次更改都会增加,因此您有一个实际 版本.

其他提示

你可以有 start_dateend_date.

什么时候 end_date 是无效的,它是实际记录。

我正在版本上掌握词汇表数据,我的方法非常成功地满足了我的需求。基本上,对于您需要版本控制的记录,您将字段集将其分为持续的字段和与版本有关的字段,从而创建两个表。第一组中的某些也应该是第一张表的唯一键。

地址
ID [PK
fullname [英国
生日[英国

版本
ID [PK
地址_ID[英国
时间戳[英国
地址

以这种方式,您会得到一个由全名和生日确定的地址主题(不应通过版本操作进行更改)和包含地址的版本记录。 address_id应该与地址:通过外键ID相关。在版本表中的每个条目中,您将获得主题地址的新版本:id = address_id带有特定时间戳,在哪种方式可以具有历史记录参考。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top