none
Уникальность uniqueidentifier RRS feed

  • Вопрос

  • Добрый день!

    Подскажите, пожалуйста, столбец типа uniqueidentifier, заполненный с помощью newid() потенциально содержит дубликаты, если нет ограничения unique или primary key, как указано тут https://technet.microsoft.com/ru-ru/library/ms190215(v=sql.105).aspx?

    Заранее благодарен.

    2 июля 2016 г. 14:40

Ответы

Все ответы

  • Нет не содержит, только он не лучший кандидат в роли первичного ключа или индекса.

    Сделаем содержимое сообщества лучше, вместе!

    Модератор
  • Рекомендую почитать блог Эрика Липперта.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа Энтомолог 3 июля 2016 г. 14:58
    Модератор
  • А где тогда граница его уникальности - таблица, схема, база данных? Проверил, что через достаточно долгое время Guid.newGuid() начинает возвращать повторы. А как с бд?
    3 июля 2016 г. 14:59
  • Вся вселенная :) Уж в пределах таблицы, он точно будет уникальной, можете не сомневаться. Как проверили?

    Сделаем содержимое сообщества лучше, вместе!

    3 июля 2016 г. 15:26
    Модератор
  • Генерил guid и сохранял предыдущие значения. А где можно убедиться, что уникален в пределах таблицы?
  • Нигде, но вот если он глобальный по меркам вселенной, то вероятность совпадения в пределах таблицы не должна быть.

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

    Но, конечно же, мы не собираемся этого делать. Количество GUID, генерируемых на нашей планете даже и близко не равняется 2<sup>50</sup>! Я очень удивлюсь, если в мире генерируется хотя бы 2<sup>20</sup> GUID в секунду, а это значит, что для возникновения коллизии нам потребуется 2<sup>41</sup> секунд, что составляет около семидесяти тысяч лет. А если мы рассматриваем коллизию конкретного GUID и учтем значительно меньшее количество генерируемых в мире GUID, то на это потребуется в миллиард раз больше времени, по сравнению с исходной оценкой." - из статьи по ссылке выше.

    А как вы его генерировали?


    Сделаем содержимое сообщества лучше, вместе!

    Модератор
  • Несколько десятков часов вызывал Guid.newGuid() в одном приложении без перезапуска.
  • А какие ещё блоги можете посоветовать по .NET, SQL, Web?
  • Несколько десятков часов вызывал Guid.newGuid() в одном приложении без перезапуска.

    Можете показать исходный код? Как нашли совпадение?
    5 июля 2016 г. 13:48