поле auto_increment и другой первичный ключ в таблице

#mysql #primary-key #yii #auto-increment

#mysql #первичный ключ #yii #автоматическое увеличение

Вопрос:

у меня есть таблица с определенным первичным ключом (post_id, category_id). его таблица реализует отношение Many_Many. как добавить поле автоинкремента в эту таблицу (я обычно использую поле автоинкремента, чтобы легко извлекать записи и использовать значение автоинкремента в форме). когда я пытаюсь добавить поле auto_increment, я получаю эту ошибку:

  Multiple primary key defined
  

есть ли необходимость в полях auto_increment, когда у меня составной первичный ключ? если да, то как это сделать?

Ответ №1:

Если в таблице есть поле автоинкремента, оно должно быть первичным ключом. Может быть только один первичный ключ.

Я бы не стал создавать автоматическое увеличение только ради этого, поскольку тогда это означает, что вам нужно добавить уникальный индекс к полям, которые являются естественным кандидатом на PK.

Единственный раз, когда я бы создал auto_increment в этом случае, — это если естественный PK будет состоять из неподходящих типов данных (varchar и т. Д.), Или PK будет большим (в байтах) или охватывать довольно много столбцов

Ответ №2:

post_id, category_id должны быть внешними ключами вашей таблицы соединений.

это должно выглядеть так:

 --------------
post_category
==============
pkId (pk) (auto increment)
post_id (fk -> post table)
category_id (fk-> category table)
--------------
  

Комментарии:

1. в таблице соединений tutorial есть составной первичный ключ и схема редактирования базы данных yiiframework.com/doc/guide/1.1/en/database.arr и пост №3 по этой ссылке yiiframework.com/forum/index.php?/topic /…

2. да. но вы хотите добавить автоматическое увеличение PK к этой таблице, не так ли?

3. это мой вопрос. автоинкрементный pk или составной pk? кажется, если я хочу использовать yii, я должен использовать composite pk

4. поля auto_increment нет. если поле автоматически увеличивается, оно должно быть pk. вы можете в своем программном коде поддерживать поле автоматического увеличения.

5. вы имеете в виду, что у меня есть составное поле PK и уникальное поле int, оцениваемое кодом вместо поля autoincrement? есть ли необходимость в этом уникальном поле, когда я использую yii или composite pk достаточно?