Как сгенерировать стабильный первичный ключ

#c# #database #unique

#c# #База данных #уникальный

Вопрос:

Я храню список имен в базе данных. В списке нет никакого первичного ключа для каждой записи. Эти имена затем используются другой программой и поэтому требуют, чтобы первичный ключ использовался в качестве внешнего ключа.

Список принадлежит третьей стороне, которая находится вне нашего влияния, поэтому мы не можем заставить их предоставить первичный ключ.

Я использовал инкрементное число для получения PK, но недавно было замечено, что новые записи могут быть вставлены в любое место списка, и поэтому инкрементный подход потерпел бы неудачу. Хэш-коды нельзя использовать, поскольку их стабильность не гарантируется.

Есть ли какой-либо способ, которым я могу сгенерировать стабильный первичный ключ для этих записей, который затем можно отследить с помощью имени или любого другого подхода для обратной ссылки на имя в списке?

Например

В день 1 список выглядит следующим образом

  1. Оливер
  2. Джек
  3. Гарри
  4. Джейкоб
  5. Чарли

Предположим, что 963 является ключом (в виде хэш-кода) для Oliver, и этот код был сохранен программой XYZ в ее хранилище для обратной ссылки на Oliver.

На днях в середине было добавлено новое имя Oscar

  1. Оливер
  2. Джек
  3. Оскар
  4. Гарри
  5. Джейкоб
  6. Чарли

Теперь ключом для Oliver является 852, потому что стабильность хэш-кода не гарантируется, и последовательность тоже была нарушена, следовательно, программа XYZ не может вернуться к Oliver, используя ключ 963.

Комментарии:

1. Обновляется ли список имен ежедневно, как санкции? Если он нестабилен, то вам либо не следует использовать ключевое отношение, либо, в качестве альтернативы, вам придется выполнить хэширование и использовать его в качестве ключа. Однако при получении новых данных вам придется обновить всю базу данных, поскольку изменение имени пользователя не приведет к удалению или обновлению старой записи, поскольку хэш будет другим.

2. @NibblyPig Да, список является списком HMT.

3. Хах, я так и знал. Да, у меня была именно такая проблема в прошлом, единственный способ, которым мы это сделали, — создать контрольную сумму каждого столбца, и каждый раз, когда загружался новый файл, мы удаляли все записи и создавали их заново. Из-за этого мы не могли использовать связь с внешним ключом, поэтому нам приходилось сохранять копию всех данных всякий раз, когда мы их использовали.

4. Я не понимаю. Как изменится хэш -код для «Oliver», потому что была добавлена совершенно не связанная запись? Это не хэш-код, если он не сгенерирован только из исходного значения. Используйте реальный хэш-код, и все должно быть в порядке.

5. @NibblyPig Вы бы знали, что одна запись в HMT будет содержать от 500 до 1000 символов, не приведет ли сохранение каждой записи для каждого просмотра имени к созданию множества записей!!!