В реляционной модели, любой столбец или набор столбцов, которые гарантированы как присутствующие, так и уникальные в таблице, можно назвать ключом-кандидатом к таблице. «Present» означает «NOT NULL». В дизайне базы данных обычно используется назначение одного из ключей-кандидатов в качестве первичного ключа и использование ссылок на первичный ключ для ссылки на всю строку или на предмет предмета, который описывает строка.
В SQL ограничение PRIMARY KEY составляет ограничение NOT NULL для каждого столбца первичного ключа и ограничение UNIQUE для всех столбцов первичного ключа, взятых вместе. На практике многие первичные ключи оказываются одиночными столбцами.
Для большинства продуктов СУБД ограничение PRIMARY KEY также приведет к автоматическому построению индекса на столбцах первичного ключа. Это ускоряет работу системной проверки при создании новых записей для первичного ключа, чтобы убедиться, что новое значение не дублирует существующее значение. Он также ускоряет поиск на основе значения первичного ключа и соединяется между первичным ключом и внешним ключом, который ссылается на него. Сколько происходит ускорение, зависит от того, как работает оптимизатор запросов.
Первоначально разработчики реляционных баз данных искали естественные ключи в данных, как указано. В последние годы тенденция заключалась в том, чтобы всегда создавать столбец с именем ID, целое число как первый столбец и первичный ключ каждой таблицы. Функция автогенерации СУБД используется для обеспечения уникальности этого ключа. Эта тенденция зафиксирована в «Стандартах проектирования Осло».Это не обязательно реляционный дизайн, но он служит некоторым непосредственным потребностям людей, которые следуют за ним. Я не рекомендую эту практику, но я признаю, что это распространенная практика.
Индекс - это структура данных, которая обеспечивает быстрый доступ к нескольким строкам в таблице на основе описания столбцов индексируемой таблицы. Индекс состоит из копий определенных столбцов таблицы, называемых индексными ключами, вкрапленных указателями на строки таблицы. Указатели обычно скрыты от пользователей СУБД. Индексы работают в тандеме с оптимизатором запросов. Пользователь указывает в SQL, какие данные запрашиваются, а оптимизатор разрабатывает стратегии индексирования и другие стратегии для перевода того, что ищут в стратегию для его поиска. Существует какой-то организационный принцип, такой как сортировка или хеширование, который позволяет использовать индекс для быстрого поиска и некоторых других применений. Все это внутренне относится к СУБД, как только создатель базы данных создал индекс или объявил первичный ключ.
Индексы могут быть построены, которые не имеют ничего общего с первичным ключом. Первичный ключ может существовать без индекса, хотя это, как правило, очень плохая идея.
спасибо, вы были очень полезны! Мне было интересно, устанавливает ли столбец как ПК любое отличие от установки столбца как уникального Integer, который автоматически указывает на себя? Делает ли что-нибудь еще под капотом? – Mala
Я отредактировал, чтобы ответить на ваш вопрос о недостатках индексов. Первичные ключи также функционируют как индексы, поэтому, когда у вас есть PK в столбце, все запросы для SELECT или ORDER BY на основе этого идентификатора будут быстрее. Кроме того, было бы гарантировано, что каждый «идентификатор» уникален, поэтому у вас не будет повторяющихся идентификаторов, например, у вас есть только столбец INT, который вы обновляете. –
Первичный ключ не обязательно должен быть числовым или одним полем. и колонка IDENTITY лучше подходят для этого описания. Вместо этого первичный ключ служит для указания СУБД, что указанные поля могут однозначно идентифицировать одну строку в таблице. По сути, УНИКАЛЬНЫЙ ИНДЕКС. Нормальным (но не обязательным) для Первичных ключей также является контрольный фактор в том, какие данные хранятся (Clustered Primary Key в SQLServer) и поэтому значительно улучшают время, необходимое для поиска строк данных (для чтения, записи и т. Д.), – MatBailie