В реляционной модели любой столбец или набор столбцов, которые гарантированно присутствуют и являются уникальными в таблице, можно назвать ключом-кандидатом в таблицу. «Настоящий» означает «НЕ НУЛЬ». При проектировании базы данных принято назначать один из ключей-кандидатов в качестве первичного ключа и использовать ссылки на первичный ключ для ссылки на всю строку или на предмет предмета, который описывает строка.
В SQL ограничение PRIMARY KEY равняется ограничению NOT NULL для каждого столбца первичного ключа и ограничению UNIQUE для всех столбцов первичного ключа, взятых вместе. На практике многие первичные ключи оказываются одиночными столбцами.
Для большинства продуктов СУБД ограничение PRIMARY KEY также приведет к автоматическому построению индекса по столбцам первичного ключа. Это ускоряет проверку системы при создании новых записей для первичного ключа, чтобы убедиться, что новое значение не дублирует существующее значение. Это также ускоряет поиск на основе значения первичного ключа и объединяет первичный ключ с внешним ключом, который на него ссылается. Степень ускорения зависит от того, как работает оптимизатор запросов.
Первоначально разработчики реляционных баз данных искали естественные ключи в данных как дано. В последние годы существует тенденция всегда создавать столбец с именем ID, целое число в качестве первого столбца и первичный ключ каждой таблицы. Функция автоматического создания СУБД используется для обеспечения уникальности этого ключа. Эта тенденция задокументирована в «Стандартах дизайна Осло». Это не обязательно реляционный дизайн, но он удовлетворяет некоторые насущные потребности людей, которые им следуют. Я не рекомендую эту практику, но я признаю, что это распространенная практика.
Индекс - это структура данных, которая обеспечивает быстрый доступ к нескольким строкам в таблице на основе описания столбцов таблицы, которые проиндексированы. Индекс состоит из копий определенных столбцов таблицы, называемых индексными ключами, с вкраплениями указателей на строки таблицы. Указатели обычно скрыты от пользователей СУБД. Индексы работают в тандеме с оптимизатором запросов. Пользователь указывает в SQL, какие данные запрашиваются, а оптимизатор предлагает стратегии индексирования и другие стратегии для преобразования искомого в состояние поиска. Существует некоторый организационный принцип, такой как сортировка или хеширование, который позволяет использовать индекс для быстрого поиска и некоторых других применений. Все это является внутренним для СУБД, когда создатель базы данных создал индекс или объявил первичный ключ.
Могут быть созданы индексы, которые не имеют ничего общего с первичным ключом. Первичный ключ может существовать без индекса, хотя это, как правило, очень плохая идея.