Моя ситуация:
- У меня есть несколько клиентских приложений, в которых используется локальная БД (MS SQL, MS Access - извините, это система Enterprise, я должен поддерживать устаревшее...)
 - Я не знаю ничего о тренде среди клиентов - теперь он ~ 10, но он может быть ~ 100 в год.
 - Данные из этих таблиц поступают на мой центральный сервер и помещаются в одну общую таблицу.
 - Иногда существующие (клиентские) данные изменяются - мне приходится выполнять операции обновления/удаления
 -  Я не хочу использовать GUID (.NET type 
System.Guid). Трудно просто реализовать и поддерживать в MS Access. Кроме того, не подходит для производительности -  Мне нужен быстрый поиск в этой общей таблице, поэтому было бы неплохо использовать 
intилиlong intкак PK 
Итак, я хочу:
- Что-то уникальное, чтобы избежать столкновений (он будет использоваться как ПК)
 -  Должно быть, должно быть 
intилиlong int - Должна быть назначаемой клиентской стороной перед вставкой
 
Мое текущее решение - взять CRC из конкатенации:
- ProcessodID
 - Дата биографии
 - Имя пользователя (строки, оборудование\связанные с пользователем данные)
 - DateTime.Now(UNC)
 
В настоящее время это работает для меня, но, может быть, есть лучший подход для достижения моих целей? Любые комментарии, предложения, примеры или собственный опыт?
UPDATE: синхронизация между клиентом и сервером - это периодическое действие, поэтому оно может происходить 2-3 раза в день (это переменная конфигурации)