в SQL Server Management Studio (SSMS) 2008 R2 Dev на столе (потому что я не могу спросить без него)
--SET ANSI_NULL_DFLT_ON ON
create table B (Id int)
Я создаю уникальное ограничение
ALTER TABLE B
ADD CONSTRAINT IX_B
UNIQUE (ID)
WITH (IGNORE_DUP_KEY = ON)
SSMS показывает, что у меня нет никаких ограничений, но вместо этого есть ключ + индекс, в то время как контекстные опции (при щелчке правой кнопкой мыши) подсказывают мне создать (извините, скрипт) все еще ограничение.
ОСНОВНОЙ ВОПРОС:
Какой здесь ключ?
Зачем это нужно для этого ограничения?
Почему ограничение уникальности вызывается ключом (а ключ уникальностью)?
Извините, опять же, почему ключ вызывается индексом? Кажется, они имеют одно и то же имя (хотя, если бы я создал без явного имени, они бы назвали по-другому) ...
Извините, опять ...
ОБЗОРНЫЕ вопросы:
Какая функциональность отличается между «уникальным ограничением» и «уникальным индексом»? Я искал сегодня одну разницу (хотел найти 10) довольно долго и не смог ее найти.
Другими словами, для чего (почему) понятия (или конструкции) «уникальное ограничение» и «уникальный индекс» дублируются в SQL Server?
Бонусный вопрос (для тех, кому этот вопрос показался слишком простым):
Какой смысл в уникальном индексе (или в уникальном ограничении), разрешающем дублирование?
insert into B VALUES (1)
insert into B VALUES (1)
insert into B VALUES (1)
Обновление: Извините Спасибо, ребята и дамы (бонус снят)
Обновление 2: не было ли разницы между «уникальным индексом» и «уникальным ограничением» в предыдущем SQL Server (я смутно напоминаю, что один из них не разрешил NULL)?
Обновление 3: Действительно, меня всегда раздражало (смущало) «ограничение внешнего ключа», вызываемое «внешним ключом», хотя это не ключ, а ключ, внешний находится в другой таблице, внешний… и просто обнаружил, что это всеобщая путаница греметь на нем. По крайней мере, теперь я помню, что я должен помнить, напротив.
Update4:
@ Damien_The_Unbeliever , спасибо,
это, по крайней мере, некоторые уловки, чтобы запомнить замешательство.
Хотя, некоторые недоумения:
Почему эти кандидаты по умолчанию не равны NULL?
Изначально я действительно хотел вставить более короткий скрипт:
CREATE TABLE A(A INT UNIQUE);
который произвел:
WTF этот "кандидат" на ПЕРВИЧНЫЙ и КЛЮЧ имеет синдром множественных идентичностей , тогда?
Разве «UQ_» не означает «Уникальное ограничение» в практике именования?
Теперь сценарий этого индекса UQ__A__3214EC262AA05119 создает ограничение без имени ... не индекса ... (?!):
ALTER TABLE [dbo].[A] ADD UNIQUE NONCLUSTERED
(
[ID] ASC
)
WITH
( PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON
[PRIMARY]
WTheF - Как уникальный индекс определяется как ограничение? Где, чем
Сценарий ключа производит то же самое! опять же ограничение ...
Почему это безымянно? Почему невозможно написать сценарий как «изменить», а только как «создать»?!
Это не имеет смысла!
Теперь, если выполнить сгенерированный скрипт, есть 2 dupes,
исполнить еще раз - вуаля: 3 одураченных "кандидата"
Примечание: если создать уникальное ограничение с помощью отдельного оператора T-SQL с пользовательским / ручным именем, как я сделал вверху, то сценарии не создают анонимный DML и, соответственно, их выполнение не позволяет умножать «кандидатов» "
Странные кандидаты на первичные ключи, не так ли? нужно посетить психотерапию (с множественными симптомами идентичности)?