数据库中的两阶段数据编辑

时间:2011-02-11 12:46:25

标签: django database-design versioning relational-database

出于问题的目的,让我们假设我有一个博客应用程序,其中包含与博客相关的博客和博客子条目。我的数据存储在两个独立的表中的数据库中:Blog和BlobSubEntries,我在Blog上的BlogSubEntries中有一个外键。这两个表都包含可以编辑的数据。

现在我的网站查询此数据库以显示博客。我也有一个cms来编辑博客条目。我不想在cms中放置一个保存按钮,所以我想将每个编辑内容发送到服务器,但是在博客实际决定发布作品之前,不希望这些数据可用于网站。

以下是需要考虑的事项:

  • 我不想在数据库上有数百万的查询。
  • 我希望在编辑过程中可以使用旧数据。
  • 我正在使用django和关系数据库

在这个冗长的介绍之后,这是我的问题:

  • 您如何处理这两步数据的分期(考虑到两个模型相互关联的事实)?
  • 如果我想将此暂存过程演变为版本控制怎么办?
  • 我最近在CouchDB上阅读了一些文档数据库会简化这类问题吗?如果是这样的话?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

快速回答是建立一个类似的模型:

[Blog]<-----[BlogSubEntries]<----[SubEntryDraft]
   ^        (current content)    |-------------|
   |                             |draft_content|
   |                             |-------------|
[BlogDraft]
(draft content)

如果你想进行版本控制,那么你会有类似的东西:

[entry]-(1)-------(N)-[entry_version]
                      |-------------|
                      | version_num |
                      | content     |
                      |-------------|

我认为文档存储引擎不会产生太大影响。您仍然需要跟踪哪个版本的内容属于给定条目(或博客,或其他)。当然,除非您使用的系统已经提供了版本控制。

现在我考虑一下,你也可以在一张桌子里做到这一点:

[  BlogSubEntry  ]
|----------------|
| content        |
| entry_id       | <--| composite alternate key:
| version_num    |    | UNIQUE(entry_id, version_num) NOT NULL
| surrogate_key  | <-- PRIMARY KEY
|----------------|