Что означает ограничение UNIQUE KEY для первичного ключа? - PullRequest
1 голос
/ 25 мая 2011

В документе Symfony2 'Как использовать PdoSessionStorage для хранения сеансов в базе данных', в котором таблица сеансов отображается следующим образом:

CREATE TABLE `session` (
    `session_id` varchar(255) NOT NULL,
    `session_value` text NOT NULL,
    `session_time` int(11) NOT NULL,
    PRIMARY KEY (`session_id`),
    UNIQUE KEY `session_id_idx` (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Почему для первичного ключа требуется ограничение уникального ключа?

Ответы [ 2 ]

6 голосов
/ 25 мая 2011

Первичный ключ по определению является уникальным ключом. В этом примере это просто дублированный ненужный ключ.

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

Например:

create table X {
    a char,
    b char,
    primary key (a,b)
}

, когда вы делаете запрос с WHERE b=something, не будет использовать индекс первичного ключа, так как записи индекса B привязаны к «a», и вы не используете «a» в запросе. Добавление вторичного отдельного индекса, предназначенного только для B, позволяет использовать индекс для предложения where.

2 голосов
/ 25 мая 2011

Первичные ключи должны быть уникальными по определению.(независимо от РСУБД)

Первичный ключ - это комбинация столбцов, которые однозначно определяют строку.

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