Казвате, че и двамата клиенти използват вашето приложение, така че предполагам, че това е някакъв вид софтуер за „свиване“, който се използва от повече клиенти, отколкото само от тези двама, нали?
Ако да, добавянето на специални колони към таблиците или нещо подобно вероятно ще причини болка в бъдеще, защото ще трябва да поддържате специална версия за тези два клиента, която може да се справи с допълнителните колони. Или ще трябва да въведете тези колони в основната си кодова база, което означава, че всичките ви други клиенти също ще ги получат.
Мога да измисля по-лесен начин да направите това, без да променяте нито една от таблиците си или да добавяте колони.
За да работи това, трябва да откриете най-големия идентификатор, който съществува в двете бази данни заедно ( без значение в коя таблица или в коя база данни е) .
Това може да изисква копиране и поставяне, за да получите много заявки, които изглеждат така:
select max(id) as maxlocationid from locations
select max(id) as maxpersonid from persons
-- and so on... (one query for each table)
Когато намерите най-големия идентификатор след изпълнение на заявката в двете бази данни, вземете число, което е по-голямо от този идентификатор, и го добавете към всички идентификатори във всички таблици във втората база данни.
Много е важно числото трябва да е по-голям от най-големия идентификатор, който вече съществува в двете бази данни!
Малко е трудно за обяснение, така че ето един пример:
Да кажем, че най-големият идентификатор във всяка таблица в двете бази данни е 8000
.
След това изпълнявате някакъв SQL, който добавя 10000
към всеки идентификатор във всяка таблица във втората база данни :
update Locations set Id = Id + 10000
update Persons set Id = Id + 10000, LocationId = LocationId + 10000
-- and so on, for each table
Заявките са сравнително прости, но това е най-голямата работа, защото трябва да създадете заявка като тази ръчно за всяка таблица в базата данни, с правилните имена на всички колони с ИД.
След като стартирате заявката във втората база данни, примерните данни от вашия въпрос ще изглеждат така:
База данни 1: (точно както преди)
Locations
:
Id Name Adress etc....
1 Location 1
2 Location 2
Persons
:
Id LocationId Name etc...
1 1 Alex
2 1 Peter
3 2 Lisa
База данни 2:
Locations
:
Id Name Adress etc....
10001 Location A
10002 Location B
Persons
:
Id LocationId Name etc...
10001 10001 Mark
10002 10002 Ashley
10003 10001 Ben
И това е! Сега можете да импортирате данните от една база данни в друга, без изобщо да получавате нарушения на първичния ключ.