在PostgreSQL数据库中使用PHP对实体关系进行版本控制

在PostgreSQL数据库中使用PHP对实体关系进行版本控制,php,postgresql,doctrine-orm,Php,Postgresql,Doctrine Orm,我正在设计一个系统来存储实体及其随时间变化的关系 每个实体都有属性,每个属性都应该进行版本控制,所以当实体的属性更改时,会添加一个新的历史状态。复杂性来自于这样一个事实,即我还需要对独立实体之间的关系进行版本化。例如:当实体A从父级X移动到父级Y时,两个实体的关系也会获得一个新的历史状态 我正在寻找关于如何在较低层次上进行设计的建议-是否有任何设计模式可用于此类事情,或任何其他最佳实践/经验证的方法 我正在用PHP和PostgreSQL数据库构建这个数据库,可以选择使用Doctrine作为ORM

我正在设计一个系统来存储实体及其随时间变化的关系

每个实体都有属性,每个属性都应该进行版本控制,所以当实体的属性更改时,会添加一个新的历史状态。复杂性来自于这样一个事实,即我还需要对独立实体之间的关系进行版本化。例如:当实体
A
从父级
X
移动到父级
Y
时,两个实体的关系也会获得一个新的历史状态

我正在寻找关于如何在较低层次上进行设计的建议-是否有任何设计模式可用于此类事情,或任何其他最佳实践/经验证的方法


我正在用PHP和PostgreSQL数据库构建这个数据库,可以选择使用Doctrine作为ORM/DBAL。

我建议查看
表\u log
扩展()。它确实需要编译,但它的优点是允许您将表恢复到以前的状态、审核更改等


这里的一个重要细节是,历史更改存储在其他表中,而不是主表中,因此您可以将其视为当前数据加上外部审计跟踪。如果您需要为查询合并它们,您可以创建一个视图。

我一直使用触发器构建类似的东西。您需要非常认真地考虑并发性问题,但无论您在哪个级别工作,都需要这样做。通常,您所需要的只是奇数
SELECT。。获取有关父对象和子对象的信息之前,请在父对象上共享