好的,我有一个看起来像这样的表:
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仍会获得自动递增的值?即使它确实有效,我是否应该从数据库设计的角度做一些我不应该做的事情,等等?
答案 0 :(得分:1)
我会这样做:
Post:
- ID (your primary key with auto_increment)
- post_id (this is which post you mean)
- version
- title
- content
新ID仅指定此数据集的唯一ID。 post_id然后指定该数据集所属的帖子,该版本代表条目的修订。
答案 1 :(得分:1)
考虑以下示例数据:
id version title content
1 1 t1 c1
2 1 t2 c2
现在,用户更改帖子的标题和内容,创建一个具有自动递增ID的新行:
3 2 t3 t3
这是一些帖子的第二版,但你看不出它是post one的新版本(id为1的条目)还是post 2(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
在这里,很明显第三行代表了帖子1的新版本。
答案 2 :(得分:0)
为什么不使用Id
作为某种版本指标,否则你会有两列服务于同一目的,这被认为是数据库设计中的一个缺陷。
答案 3 :(得分:0)
您将使用复合主键,其中id和version一起标识该条目。然后你可以auto_increment id。添加新条目时,它将自动递增。当您修改帖子时,您明确定义了id和修订版,并且id不会增加。