Database design 数据库记录的单独公共和编辑模式版本

Database design 数据库记录的单独公共和编辑模式版本,database-design,cakephp,primary-key,multiple-columns,Database Design,Cakephp,Primary Key,Multiple Columns,如何最好地实现数据库记录的编辑模式 当编辑模式版本正在编辑、预览、重新编辑等时,记录(例如博客文章)需要在网站上显示公共版本 到目前为止,我有两个解决方案: 使用具有ID和模式的多列主键 对每个模式使用单独的表,并在它们之间进行复制 我不是第一个需要这个功能的人 这通常是怎么做的?它有名字吗 我使用的CakePHP不明确支持多列键,但我认为这与我的情况无关,因为在用户完成编辑后,我实际上不会有多个具有相同ID的行。就数据库而言,您不需要编辑模式。尤其是在网络上——http是一种不可靠的传输协议

如何最好地实现数据库记录的编辑模式

当编辑模式版本正在编辑、预览、重新编辑等时,记录(例如博客文章)需要在网站上显示公共版本

到目前为止,我有两个解决方案:

  • 使用具有ID和模式的多列主键
  • 对每个模式使用单独的表,并在它们之间进行复制
  • 我不是第一个需要这个功能的人

    这通常是怎么做的?它有名字吗


    我使用的CakePHP不明确支持多列键,但我认为这与我的情况无关,因为在用户完成编辑后,我实际上不会有多个具有相同ID的行。

    就数据库而言,您不需要编辑模式。尤其是在网络上——http是一种不可靠的传输协议

    如果您的用户界面允许编辑,那么您只需编辑并(我猜)单击一个按钮,并在按钮后面编写代码,最终将更改的数据作为更新语句发送回数据库。如果UPDATE语句格式正确,并且编辑器和应用程序具有足够的权限,则更新将成功,并且数据将被更改


    在升级之前阅读该行的任何人都将看到旧版本;任何在更新后阅读它的人都将看到新版本。(忽略可能缓存的影响。)

    听起来你在寻找一个版本控制系统,或者是一种创建帖子的能力,在得到管理员批准之前不让帖子生效。我不认为这是cakePHP的固有特性,但您可以做的是

    复制控制器->复制->重命名中的编辑功能,然后对编辑视图执行相同操作,然后创建一个名为编辑的新db表。同时为“保存”或“发布”创建一个下拉框

    然后,当按下submit按钮时,您可以通过查看$this->data中的数据来决定post将填充哪个db表


    我认为这将是最简单的方法,因为复制编辑功能您将不必担心将帖子的id发送到该功能,cake将自动完成。因此,posts表和edits表的id应该匹配。

    最后,这似乎是最简单的解决方案。我只是通过在预览页面上生成隐藏表单,在页面之间来回发布数据。