php - 实现 "soft"保存或修改工作流的最佳方式是什么?

标签 php mysql database database-design design-patterns

我正在 LAMP 上开发一个基于 MVC 的网络应用程序,它需要一些记录只有在“高级”用户的批准下才能修改。 (普通用户可以提交更改,但只有在批准后才能应用)

只有一个表必须在其中发生,比如“事件”:

事件 - ID - 名称 VARCHAR - 开始日期 DATETIME - 访客整数

每次事件的属性之一被“普通”用户修改时,这些更改不会正式生效,直到该“ super ”用户进行修订(和可能的批准)。

起初我想到了以下选项:

  • 复制除 id 之外的每一列,对“名称”说 name_temp,以保存待批准的修改。
  • 创建一个具有重复结构的单独表,并在其中保存所有待批准的修改。

你以前实现过这个吗?你认为最好的/你的方法是什么?还有:这种问题有什么模式吗?

谢谢!!!

PD:我需要将“旧”记录保留在原处,直到新记录获得批准。

最佳答案

让我对“第二张表”方法投上我的一票——正如其他两位受访者所说,它远远高于将“提议的更改”硬塞进主表的尝试(这会使它的架构复杂化,对它的每个查询等等)。

将所有预期更改写入辅助表并处理它们(如果它们满足某些条件,则将它们应用于主表)稍后“分批”确实是一种常见模式,当您需要主表仅在以下时间更改时通常很有用某些时候,提议的更改可以随时出现,也可以在其他情况下出现,例如当写入主表的成本非常高(锁定争用或其他)但写入 N 个更改并不比编写一个更改成本高多少,或者验证提议的更改非常耗时(您可以将您的用例归类为后一类,因为在您的情况下,验证需要人工查看提议的更改——按照计算机标准,这确实非常慢;-)。

关于php - 实现 "soft"保存或修改工作流的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817906/

相关文章:

php - 在 Lumen 作业中发送邮件时出现 BindingResolutionException

php - 尝试将查询结果放在表格中?

php - 从 PHP 服务器连接到 Amazon AWS 上的 MySQL 服务器

sql - Oracle 表中的 Xml 批量插入

数据库 vs 数据集市 vs 数据仓库 vs 数据湖

javascript - 是否可以将访问者的IP和位置写在一个文件中?

php - 如何通过从另一个下拉列表中选择值来填充下拉列表?

mysql - 在 MYSQL 中从当月开始按日期排序

mysql - 在存储过程中更新和删除

sql - 用于将数据库更改从开发数据库同步到生产的工具?