#c# #database #unique
#c# #База данных #уникальный
Вопрос:
Я храню список имен в базе данных. В списке нет никакого первичного ключа для каждой записи. Эти имена затем используются другой программой и поэтому требуют, чтобы первичный ключ использовался в качестве внешнего ключа.
Список принадлежит третьей стороне, которая находится вне нашего влияния, поэтому мы не можем заставить их предоставить первичный ключ.
Я использовал инкрементное число для получения PK, но недавно было замечено, что новые записи могут быть вставлены в любое место списка, и поэтому инкрементный подход потерпел бы неудачу. Хэш-коды нельзя использовать, поскольку их стабильность не гарантируется.
Есть ли какой-либо способ, которым я могу сгенерировать стабильный первичный ключ для этих записей, который затем можно отследить с помощью имени или любого другого подхода для обратной ссылки на имя в списке?
Например
В день 1 список выглядит следующим образом
- Оливер
- Джек
- Гарри
- Джейкоб
- Чарли
Предположим, что 963 является ключом (в виде хэш-кода) для Oliver, и этот код был сохранен программой XYZ в ее хранилище для обратной ссылки на Oliver.
На днях в середине было добавлено новое имя Oscar
- Оливер
- Джек
- Оскар
- Гарри
- Джейкоб
- Чарли
Теперь ключом для Oliver является 852, потому что стабильность хэш-кода не гарантируется, и последовательность тоже была нарушена, следовательно, программа XYZ не может вернуться к Oliver, используя ключ 963.
Комментарии:
1. Обновляется ли список имен ежедневно, как санкции? Если он нестабилен, то вам либо не следует использовать ключевое отношение, либо, в качестве альтернативы, вам придется выполнить хэширование и использовать его в качестве ключа. Однако при получении новых данных вам придется обновить всю базу данных, поскольку изменение имени пользователя не приведет к удалению или обновлению старой записи, поскольку хэш будет другим.
2. @NibblyPig Да, список является списком HMT.
3. Хах, я так и знал. Да, у меня была именно такая проблема в прошлом, единственный способ, которым мы это сделали, — создать контрольную сумму каждого столбца, и каждый раз, когда загружался новый файл, мы удаляли все записи и создавали их заново. Из-за этого мы не могли использовать связь с внешним ключом, поэтому нам приходилось сохранять копию всех данных всякий раз, когда мы их использовали.
4. Я не понимаю. Как изменится хэш -код для «Oliver», потому что была добавлена совершенно не связанная запись? Это не хэш-код, если он не сгенерирован только из исходного значения. Используйте реальный хэш-код, и все должно быть в порядке.
5. @NibblyPig Вы бы знали, что одна запись в HMT будет содержать от 500 до 1000 символов, не приведет ли сохранение каждой записи для каждого просмотра имени к созданию множества записей!!!