MySQL: автоматическое увеличение комбинированных ключей - PullRequest
1 голос
/ 10 марта 2010

Хорошо, у меня есть таблица, которая будет выглядеть примерно так:

Post
 ˪ Id
 ˪ Version
 ˪ Title
 ˪ Content

Идея состоит в том, что Id и Version вместе будут первичным ключом, поскольку вы можете иметь один пост несколько раз, но разных версий.

У меня такой вопрос: я бы хотел, чтобы Id был автоматически увеличен. Возможно ли это в такой настройке? Например, когда я вставлю вторую версию сообщения, все будет испорчено?


Похоже, мне нужно кое-что прояснить здесь. Я хотел бы сделать что-то вроде этого:

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

Это создаст новую запись с некоторым автоматически увеличенным идентификатором. Допустим, он получил идентификатор 7. Теперь я хочу создать новую версию:

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

Будет ли это работать? или идентификатор все равно получит автоматически увеличенное значение? И даже если это сработало, я делаю что-то, чего не должен делать с точки зрения проектирования баз данных, и так далее?

Ответы [ 4 ]

1 голос
/ 10 марта 2010

Я бы сделал это так:

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

Новый идентификатор указывает только уникальный идентификатор для этого набора данных. Затем post_id указывает, к какому сообщению относится этот набор данных, а версия обозначает исправление записи.

1 голос
/ 10 марта 2010

Рассмотрим следующие примеры данных:

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

Теперь пользователь меняет заголовок и содержание сообщения, создавая новую строку с автоматически увеличенным идентификатором:

3     2        t3     t3

Это вторая версия поста, но вы не можете увидеть, является ли это новой версией поста 1 (запись с идентификатором 1) или постом 2 (запись с идентификатором 2).

Вам нужно что-то, чтобы идентифицировать пост. Вы можете добавить столбец post_id к своей таблице, как предлагает Тобиас в своем ответе.

Кроме того, можно полностью удалить автоинкрементный идентификатор и использовать составной первичный ключ (post_id, version) - главное, чтобы post_id не увеличивался автоматически, чтобы вы могли иметь такие данные:

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

Здесь ясно, что третья строка представляет новую версию поста 1.

0 голосов
/ 27 сентября 2011

Вы бы использовали составной первичный ключ, где id и версия вместе идентифицируют запись. Затем вы можете auto_increment id. Когда вы добавляете новую запись, она будет автоматически увеличиваться. Когда вы редактируете сообщение, вы явно определяете id и revision, и id не будет увеличиваться.

0 голосов
/ 10 марта 2010

Почему бы вам не использовать Id в качестве какого-либо индикатора версии, иначе у вас будет два столбца, служащих одной цели, что считается недостатком в дизайне БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...