Что это за перевернутый значок серебряного ключа

11

Я унаследовал сторонний сервер и базу данных SQL Server 2005, чтобы можно было создавать отчеты и панели мониторинга.

На одном столе я нашел новую иконку: сине-серебряный перевернутый ключ рядом с другими первичными и внешними ключами.

Когда я щелкаю по нему правой кнопкой мыши, контекстное меню дает мне возможность «Ограничить сценарий как», но когда я пытаюсь «изменить» его, он открывает форму дизайна столбца (как первичные ключи), и все же он появляется в Раздел «Индексы», а не ограничения.

Кто-то знает, как он называется и для чего он используется?

Перевернутая клавиша

Philippe
источник

Ответы:

12

Это означает уникальное ограничение. В SQL Server уникальное ограничение фактически реализовано в виде индекса под прикрытием; Вот почему он также отображается под Indexesузлом (я не могу дать вам хорошего объяснения, почему он по крайней мере не указан под Constraintsузлом, или почему они выбрали перевернутую клавишу вместо другого цвета).

Вы должны увидеть здесь результат, чтобы убедиться, что он фактически реализован как индекс:

SELECT index_id, type_desc, is_unique_constraint
  FROM sys.indexes
  WHERE name = N'IX_tblCustIndex';

Вы сказали, что видите «Ограничение скрипта как ...» - если вы выполните это, он предоставит вам сценарий что-то вроде:

ALTER TABLE [dbo].[tblCustIndex] ADD UNIQUE NONCLUSTERED 
(
  [some_column] ASC
) WITH (...a bunch of default options...)

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

Вот очень простое воспроизведение и доказательство того, что я получаю перевернутый ключ даже с очень простым синтаксисом в 2014 году:

CREATE TABLE dbo.foo(id INT UNIQUE);

введите описание изображения здесь нажмите, чтобы увеличить

Теперь вы можете получить другой значок, если явно создадите уникальный индекс (и единственные различия, которые вы увидите sys.indexes, это имя и значение is_unique_constraint):

введите описание изображения здесь нажмите, чтобы увеличить

Для других различий см. Этот ответ переполнения стека .

Аарон Бертран
источник
1
Это специфично для SQL2005? Потому что, когда я пытаюсь добавить уникальный индекс, я получаю другую иконку (какое-то перевернутое дерево). И когда я добавляю ограничение, я получаю какую-то иконку в квадратных скобках. Я не могу воспроизвести этот значок.
Филипп
@Philippe Обновленный ответ.
Аарон Бертран
Спасибо. Это было подробное и быстрое объяснение! :-)
Филипп