В SQL-сервере существует уникальный идентификатор типа? Что это? Что оно делает? В чем разница между этим и использованием первичного ключаЧто такое уникальный идентификатор типа?
ответ
Это GUID column.
Это означает, что каждый раз, когда вы вставляете строку в эту таблицу, SQL Server будет генерировать новый
GUID и помещать его в этот столбец
. Это гарантирует уникальность значения и не только на этом компьютере, но и на всех компьютерах мира.
UPDATE:
Как отметил @tdammers в разделе комментариев новые идентификаторы GUID не автоматически генерируются при вставке строк, но этот эффект может быть достигнут путем определения newid()
в качестве значения по умолчанию для столбца.
A uniqueidentifier
- это имя SQL-сервера для GUID
(см. http://en.wikipedia.org/wiki/Globally_unique_identifier). Основная идея состоит в том, что GUID достаточно велик и имеет достаточно энтропии, чтобы сделать столкновения двух случайно генерируемых GUID крайне маловероятными. Чтобы еще больше уменьшить вероятность столкновений, большинство генераторов GUID включают некоторое значение, которое однозначно идентифицирует хост в процессе хеширования, такой как MAC-адрес первичного сетевого адаптера, и поддерживает машинный счетчик, чтобы избежать столкновений между идентификаторами GUID, сгенерированными на том же компьютере.
В SQL Server uniqueidentifier
- это еще один тип данных, например int
, varchar
и т. Д., Но его характеристики делают его подходящим в качестве первичного ключа. Это намного больше, чем типичное целое число с автоматическим добавлением, но облегчает репликацию и миграцию - данные из двух ранее не связанных баз данных не будут приводить к коллизиям на первичных ключах, если вы используете GUID, потому что каждый GUID (концептуально) глобально уникален. При использовании автоматических инкрементных первичных ключей вы наверняка получите перекрытия, так как обе таблицы однажды начинаются с 1, а изменение значений первичного ключа означает, что вам также необходимо изменить любые значения внешнего ключа, ссылающиеся на эту запись. Это можно сделать, но это намного сложнее, чем просто использовать GUID.
Как уже упоминалось, и другие также указали, что тип данных GUID/uniqueidentifier
на SQL Server, по-видимому, является отличным кандидатом на первичный ключ - позвольте мне предупредить вас о некоторых проблемах, которые у него есть, Возможно, вы позднее пожалеете:
Вам необходимо разделить первичный ключ , который является логической конструкцией - он однозначно идентифицирует ваши строки, он должен быть уникальным и стабильным, а NOT NULL. GUID хорошо работает и для первичного ключа, поскольку он гарантированно уникален. GUID в качестве основного ключа является хорошим выбором, если вы используете репликацию SQL Server, так как в этом случае вам нужен однозначно идентифицирующий столбец GUID.
Клавиатура в SQL Server - это физическая конструкция, используемая для физического упорядочения данных и намного сложнее получить право. Как правило, Королева индексирования на SQL Server, Кимберли Трип, также требует, чтобы хороший ключ кластеризации был uniqe, стабильным, как можно более узким и в идеале постоянно увеличивающимся (который представляет собой INT IDENTITY).
Смотрите свои статьи на индексацию здесь:
- GUIDs as PRIMARY KEYs and/or the clustering key
- The Clustered Index Debate Continues...
- Ever-increasing clustering key - the Clustered Index Debate..........again!
, а также увидеть Джимми Нильссон The Cost of GUIDs as Primary Key
GUID, является ужасно плохой выбор для ключа кластеризации, поскольку он широкий, абсолютно случайный и, таким образом, приводит к плохой фрагментации индекса и низкой производительности. Кроме того, строки (-и) кластеризации также хранятся в каждой записи каждого некластеризованного (дополнительного) индекса, поэтому вы действительно хотите сохранить его маленьким - GUID равен 16 байт против INT 4 байт и с несколькими некластеризованными индексами и несколькими миллионами строк, это делает ОГРОМНОЕ различие.
В SQL Server ваш первичный ключ по умолчанию является ключом кластеризации, но это необязательно. Вы можете легко использовать GUID как ваш первичный ключ NON-Clustered и INT IDENTITY как ваш ключ кластеризации - вам просто нужно знать об этом.
- 1. Что такое уникальный идентификатор BlueStacks?
- 2. Что такое уникальный идентификатор элемента/узла DOM
- 3. Что такое хороший уникальный идентификатор ПК?
- 4. Какой MAC-адрес? Что такое уникальный идентификатор для ПК?
- 5. Что такое уникальный идентификатор и как его использовать?
- 6. генерировать уникальный идентификатор последовательности каждого типа
- 7. Автоматически генерировать уникальный идентификатор типа и наоборот
- 8. Rails полиморфная ассоциация без типа (уникальный идентификатор)
- 9. Что такое идентификатор оборудования?
- 10. Что такое идентификатор продавца?
- 11. Что такое идентификатор ячейки?
- 12. Что такое идентификатор зоны?
- 13. Что такое "Неожиданный идентификатор"?
- 14. Уникальный идентификатор
- 15. Что такое контекст типа?
- 16. Что такое безопасность типа?
- 17. Что такое машинопись типа?
- 18. Что такое 1UI64 типа?
- 19. Что такое код типа?
- 20. Что такое кванторы типа?
- 21. Что такое идентификатор единого типа для файлов ePub?
- 22. Уникальный идентификатор процесса unix
- 23. Что такое идентификатор сообщения узла FileInput?
- 24. Узнайте, что такое мой идентификатор Bluetooth?
- 25. Как убедиться, что будет создан уникальный идентификатор?
- 26. получить уникальный идентификатор только что добавленной строки
- 27. Уникальный идентификатор пользователя IdentityServer
- 28. Что такое индекс - Обычный - FullText - Уникальный
- 29. Что такое идентификатор серийной версии?
- 30. Что такое идентификатор файла cookie?
Он автоматически не генерирует его, если вы не указали его. Вы можете установить по умолчанию для столбца GUID в 'newid()', чтобы автоматически генерировать новый GUID при вставке. – tdammers
@tdammers, да очень хорошее замечание. Я уточню свой ответ. Спасибо за указание на это. –