设计 SQL Postgres 关系表以编辑输入的文档和撤消功能

问题描述 投票:0回答:1

我目前正在开发一个系统,用户可以在 PostgreSQL 数据库中编辑输入的文档。该功能允许用户单击文档进行编辑,从而有效地创建一个可以修改其行的副本。这些编辑可以包括进行批量预订等操作。编辑完成后,用户可以保存更改,更新原始文档,或取消编辑,恢复到原始状态。

以下是数据库架构的一些关键注意事项:

编辑文档:用户应该能够选择要编辑的文档,这将创建一个副本,他们可以在其中进行修改,例如添加或删除行、调整数量或应用批量预订。

撤消功能:开始编辑后,用户应该可以选择保存更改,使用编辑后的版本更新原始文档,或取消编辑,将文档恢复到原始状态。

鉴于这些要求,我正在寻求有关 PostgreSQL 中关系表的优化设计的建议。具体来说,我不确定如何构建架构以有效管理编辑过程并促进撤消功能。

我看到两种可能性:

// one table for both
Table document
  id
  status (DRAFT | ENTERED)
  edited_by_id int (FK to document)


// one table for each
Table document
  id
  status (DRAFT | ENTERED)

Table document_edit
  id
  editing_document_id int (FK to document)

我应该创建单独的表来存储文档和行的原始版本和编辑版本,还是有更简化的方法?

任何可以帮助我在 PostgreSQL 中有效实现此功能的见解、建议或数据库模式设计示例将不胜感激。谢谢!

sql database postgresql database-design
1个回答
0
投票

您可以创建一个带有额外值的 SCD 表,添加 start 和 end_date、iscurrent 来捕获值,还可以给出一个标记值来区分数据。 https://setumo.medium.com/slowly-changing-dimensions-scd-in-azure-synapse-analytics-5e7aefa31564 https://medium.com/analytics-vidhya/scd-type2-implementation-in-python-95bb08878ce2

© www.soinside.com 2019 - 2024. All rights reserved.