Říkáte, že vaši aplikaci používají oba zákazníci, takže předpokládám, že jde o nějaký druh softwaru „smršťovací fólie“, který používá více zákazníků než jen tito dva, že?
Pokud ano, přidání speciálních sloupců do tabulek nebo něco podobného pravděpodobně v budoucnu způsobí bolest, protože pro tyto dva zákazníky byste museli udržovat speciální verzi, která si poradí s dalšími sloupci. Nebo byste museli tyto sloupce zavést do své hlavní kódové základny, což znamená, že by je dostali i všichni vaši ostatní zákazníci.
Napadá mě jednodušší způsob, jak to udělat, aniž bych měnil jakoukoli z vašich tabulek nebo přidával sloupce.
Aby to fungovalo, musíte zjistit největší ID, které existuje v obou databázích dohromady ( bez ohledu na to, ve které tabulce nebo v jaké databázi se nachází) .
To může vyžadovat nějaké zkopírování a vložení, abyste získali mnoho dotazů, které vypadají takto:
select max(id) as maxlocationid from locations
select max(id) as maxpersonid from persons
-- and so on... (one query for each table)
Když po spuštění dotazu v obou databázích najdete největší ID, vezměte číslo, které je větší než toto ID, a přidejte ho ke všem ID ve všech tabulkách v druhé databázi.
Je velmi důležité, aby číslo musí být větší než největší ID, které již v obou databázích existuje!
Je to trochu obtížné vysvětlit, takže zde je příklad:
Řekněme, že největší ID v jakékoli tabulce v obou databázích je 8000
.
Pak spustíte nějaké SQL, které přidá 10000
ke každému ID v každé tabulce v druhé databázi :
update Locations set Id = Id + 10000
update Persons set Id = Id + 10000, LocationId = LocationId + 10000
-- and so on, for each table
Dotazy jsou relativně jednoduché, ale to je nejpracnější, protože takovýto dotaz musíte sestavit ručně pro každou tabulku v databázi se správnými názvy všech sloupců ID.
Po spuštění dotazu na druhou databázi budou ukázková data z vaší otázky vypadat takto:
Databáze 1: (přesně jako předtím)
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
Databáze 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
A to je vše! Nyní můžete importovat data z jedné databáze do druhé, aniž by došlo k jakémukoli porušení primárního klíče.