Простой способ избежать таких дубликатов - использовать:
- естественный ключ
- PK, предоставляющий услугу (вам понадобится какой-либо поставщик номеров)
- не рекомендуется: случайно сгенерированный PK (вместо обычного +1) (гид работает иногда, но очень сложно)
Естественный ключ отличается от автоматическогосгенерированное число: это часто внутреннее свойство «вещи», которую вы пытаетесь сохранить.Подумайте о чем-то вроде номерного знака на автомобиле.
Используя это свойство, вы можете гарантировать, что при наличии этого ключа у вас будет та же запись.
Имейте в виду, что естьвсегда некоторые исключения, даже с номерными знаками.
На данный момент: Возможно, вы сможете сбросить insert identity
и переназначить некоторые числа.Но это нарушит связь между сервером и клиентом PK (ваш сервер будет иметь совершенно другое PK, чем клиенты).Со временем это может вызвать сильную головную боль.
Другой способ - использовать составной ключ: Используйте PK
, но добавьте столбец, например ClientID
или ClientLocation
.создайте составной ПК из обоих (не уверен, что автоматическая нумерация примет это).Это может быть самый простой вариант.
Для последнего в этом примере вы видите, что комбинированный ключ уникален:
//Client 1)
|---composite PK---|
| ID | ClientID |
|------|-----------|
1 cust1
2 cust1
3 cust1
//etc
//Client 2)
|---composite PK---|
| ID | ClientID |
|------|-----------|
1 cust2
2 cust2
3 cust2
//etc
//Server)
|---composite PK---|
| ID | ClientID |
|------|-----------|
1 cust1
1 cust2
2 cust1
2 cust2
3 cust1
//etc