У меня есть база данных, которая использует уникальные текстовые ключи для связи между объектами. Например, когда вставляются пользователи, они вставляются с текстовым ключом «{date} - {system} - {user}», где каждый элемент ключа является буквенно-цифровым. Затем это проверяется с помощью таблицы поиска, чтобы увидеть, существует ли она, если нет, она вставляется в таблицу и создается целочисленный ключ с автоинкрементом. В противном случае используется тот же самый целочисленный ключ.
Затем, если вставлен уникальный атрибут этого пользователя, он сопоставляется и назначается цифровому ключу пользователя в качестве внешнего ключа. Например, документ, уникальный для этого пользователя, вставляется с ключом пользователя "{date} - {system} - {user}" и уникальным текстовым ключом для документа "{date} - {system} - {user- {document } "из которого генерируется целочисленный ключ.
Таким образом, существует числовой ключ, связывающий эти две записи, и документ имеет уникальный ключ для прикрепления к нему атрибутов. Они используются в различных запросах.
Проблема в том, что ключи, конечно, не одинаковы в разных системах в зависимости от того, как и когда были вставлены элементы. Итак, моей первоначальной мыслью было использование хэша в качестве сгенерированного ключа, но я думаю, что int и bigint довольно ограничены.
Я не уверен, как SQL-сервер будет обрабатывать длинные строки хэшей для внешних ключей, я читал, что это не очень хорошо с точки зрения производительности. В противном случае я мог бы просто использовать текст, который создает сам ключ.
Как бы вы убедились, что ключи int, bigint или string (если это возможно) уникальны для всех систем, если предположить, что текстовый ключ уникален? Хэш? GUID? Как можно обрабатывать коллизии хэшей, если используется битовый ключ bigint (63 бита?), Если вообще используется?
Спасибо!