1

好的,我有一个看起来像这样的表:

Post
 ˪ Id
 ˪ Version
 ˪ Title
 ˪ Content

这个想法是 Id 和 Version 一起将成为主键,因为您可以多次发布一个帖子,但版本不同。

我的问题是:我想让 Id 自动递增。在这样的设置中这可能吗?例如,当我插入帖子的第二个版本时,事情会变得一团糟吗?


看来我需要在这里清除一些东西。我想做的是做这样的事情:

INSERT INTO posts VALUES (NULL, 0, "A title", "Some content");

这将创建一个带有一些自动递增 id 的新帖子。假设它的 id 为 7。我现在想创建一个新版本:

INSERT INTO posts VALUES (7, 1, "A new title", "Some adjusted content");

那行得通吗?还是 id 仍然会获得自动递增的值?即使它确实有效,从数据库设计的角度来看,我是否在做一些我不应该做的事情,等等?

4

4 回答 4

1

我会这样做:

Post:  
- ID (your primary key with auto_increment)
- post_id (this is which post you mean)
- version
- title
- content

新 ID 仅指定此数据集的唯一 ID。post_id 然后指定该数据集属于哪个帖子,版本代表条目的修订。

于 2010-03-10T11:06:14.800 回答
1

考虑以下示例数据:

id  version  title  content   
1     1        t1     c1
2     1        t2     c2

现在用户更改帖子的标题和内容,创建一个具有自动递增 id 的新行:

3     2        t3     t3

这是某些帖子的第二版,但您看不到它是帖子一(id 为 1 的条目)还是帖子二(id 为 2 的条目)的新版本。

你需要一些东西来识别帖子。正如 Tobias 在他的回答中建议的那样,您可以在表中添加一个 post_id 列。

此外,可以完全删除自动递增的 id 并使用复合主键 (post_id,version) - 要点是要有一个不会自动递增的 post_id,这样您就可以拥有这样的数据:

post_id  version  title  content   
1           1        t1     c1
2           1        t2     c2 
1           2        t3     t3

在这里,很明显第三行代表post 1的新版本。

于 2010-03-10T11:53:38.073 回答
0

为什么不将其Id用作某种版本指示器,否则您将有两列用于相同目的,这被认为是数据库设计中的缺陷。

于 2010-03-10T09:48:45.517 回答
0

您将使用复合主键,其中 id 和 version 一起标识条目。然后,您可以 auto_increment id。当您添加新条目时,它将自动增加。当你修改一篇文章时,你明确定义了 id 并且 revision 和 id 不会增加。

于 2011-09-27T01:40:09.893 回答