В чем разница между первичным ключом и уникальным ограничением? - PullRequest
36 голосов
/ 21 августа 2009

Кто-то задал мне этот вопрос на собеседовании ...

Ответы [ 16 ]

0 голосов
/ 12 мая 2016
create table a1 (id int,name varchar(20),city varchar(20),state varchar(20),country varchar(28) constraint pk_a1 primary key(id));
insert into a1 values(101,'sohan','gkp','up','india');


create table a1 (id int primary key,name varchar(20),city varchar(20),state varchar(20),country varchar(28));
insert into a1 values(101,'sohan','gkp','up','india');

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

0 голосов
/ 21 августа 2009

Большое количество ответов здесь обсуждало свойства PK против уникальных ограничений. Но важнее понять разницу в концепции.

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

Уникальное ограничение - это просто способ применения специфичных для домена бизнес-правил в схеме базы данных.

Поскольку PK - это идентификатор записи, вы никогда не сможете изменить значение первичного ключа.

0 голосов
/ 21 августа 2009

Оба гарантируют уникальность всех строк в таблице, за исключением нулей, как упоминалось в некоторых других ответах.

Кроме того, первичный ключ «поставляется» с индексом, который может быть кластеризованным или некластеризованным.

0 голосов
/ 21 августа 2009

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

Я пользователь SQL Server, поэтому первичный ключ имеет для меня более конкретное значение. В SQL Server по умолчанию первичные ключи также являются частью так называемого «кластеризованного индекса». Кластерный индекс определяет фактическое упорядочение страниц данных для этой конкретной таблицы, что означает, что упорядочение первичного ключа соответствует физическому порядку строк на диске.

Я знаю, что один, возможно, больше форматов таблиц MySql также поддерживает кластерную индексацию, что означает то же самое, что и в SQL Server ... он определяет физический порядок строк на диске.

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

Я не очень знаком с DB2, однако я думаю, что кластерный индекс означает, что строки на диске хранятся в том же порядке, что и отдельный индекс. Я не знаю, должен ли кластеризованный индекс соответствовать первичному ключу, или это может быть отдельный индекс.

0 голосов
/ 21 августа 2009

Первичные ключи по сути являются комбинацией (уникальных + не нулевых). также при обращении к внешнему ключу rdbms требует Первичный ключ.

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

0 голосов
/ 21 августа 2009

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

...