#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 достаточно?