Первичная ключевая практика - PullRequest
0 голосов
/ 10 января 2012
DROP TABLE IF EXISTS `media_publications`;
CREATE TABLE `media_publications` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `media_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `description` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY (`id`,`user_id`)
) ENGINE=INNODB;

Было бы бессмысленно иметь здесь id в качестве первичного ключа? Должен ли я просто иметь id + user_id в качестве первичного ключа, учитывая, что он мне нужен как внешний ключ для другой таблицы?

Ответы [ 4 ]

2 голосов
/ 10 января 2012

Вы должны иметь id в качестве первичного ключа, потому что это AUTO_INCREMENT и вы используете InnoDB.Вы можете создать уникальный индекс для 2 столбцов (я бы поставил user_id первым) для использования в внешних ключах дочерней таблицы

0 голосов
/ 22 января 2012

Бессмысленно иметь ключ для идентификатора, user_id, поскольку первичный ключ всегда является последним ключом во вторичных индексах в InnoDB (хотя оптимизатор не всегда использует это преимущество), и поскольку ключ может использоваться, только еслибольшая часть указана.Так что либо создайте ключ только для user_id, либо, если он должен быть уникальным по user_id / id, для user_id, id.Таким образом, вы можете использовать индекс в обоих запросах WHERE id = и WHERE user_id =

0 голосов
/ 10 января 2012

Рекомендуется явно пометить первичный ключ как первичный ключ.

Таким образом, вам не нужно добавлять другой индекс, который будет частично дублировать ваш первичный ключ или внешний ключ для пользователей.Таблица (хотя последняя в настоящее время не существует).

PS Многие люди путают поля идентичности с первичными ключами.Поле идентификатора может легко быть частью первичного ключа (но должно быть префиксом, если таблица InnoDB и поле является автоинкрементным целым числом).

0 голосов
/ 10 января 2012

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

...