Bạn nói rằng cả hai khách hàng đều đang sử dụng ứng dụng của bạn, vì vậy tôi giả định rằng đó là một loại phần mềm "thu nhỏ" được nhiều khách hàng sử dụng hơn chỉ hai loại này, đúng không?
Nếu có, việc thêm các cột đặc biệt vào bảng hoặc bất cứ thứ gì tương tự có thể sẽ gây khó khăn trong tương lai, bởi vì bạn sẽ phải duy trì một phiên bản đặc biệt cho hai khách hàng này có thể xử lý các cột bổ sung. Hoặc bạn sẽ phải giới thiệu các cột này với cơ sở mã chính của mình, điều đó có nghĩa là tất cả các khách hàng khác của bạn cũng sẽ nhận được chúng.
Tôi có thể nghĩ ra một cách dễ dàng hơn để thực hiện việc này mà không cần thay đổi bất kỳ bảng nào của bạn hoặc thêm bất kỳ cột nào.
Để điều này hoạt động, bạn cần tìm ra ID lớn nhất tồn tại trong cả hai cơ sở dữ liệu cùng nhau ( không có vấn đề trong bảng nào hoặc trong cơ sở dữ liệu nào) .
Điều này có thể yêu cầu một số bản sao và dán để nhận được nhiều truy vấn giống như sau:
select max(id) as maxlocationid from locations
select max(id) as maxpersonid from persons
-- and so on... (one query for each table)
Khi bạn tìm thấy ID lớn nhất sau khi chạy truy vấn trong cả hai cơ sở dữ liệu, hãy lấy một số lớn hơn ID đó và thêm nó vào tất cả các ID trong tất cả các bảng trong cơ sở dữ liệu thứ hai.
Điều rất quan trọng là số cần lớn hơn ID lớn nhất đã tồn tại trong cả hai cơ sở dữ liệu!
Có một chút khó khăn để giải thích, vì vậy đây là một ví dụ:
Giả sử rằng ID lớn nhất trong bất kỳ bảng nào trong cả hai cơ sở dữ liệu là 8000
.
Sau đó, bạn chạy một số SQL có thêm 10000
đến mọi ID trong mọi bảng trong cơ sở dữ liệu thứ hai :
update Locations set Id = Id + 10000
update Persons set Id = Id + 10000, LocationId = LocationId + 10000
-- and so on, for each table
Các truy vấn tương đối đơn giản, nhưng đây là công việc khó nhất vì bạn phải tạo một truy vấn như thế này theo cách thủ công cho mỗi bảng trong cơ sở dữ liệu, với tên chính xác của tất cả các cột ID.
Sau khi chạy truy vấn trên cơ sở dữ liệu thứ hai, dữ liệu mẫu từ câu hỏi của bạn sẽ giống như sau:
Cơ sở dữ liệu 1: (giống hệt như trước đây)
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
Cơ sở dữ liệu 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
Và đó là nó! Giờ đây, bạn có thể nhập dữ liệu từ cơ sở dữ liệu này vào cơ sở dữ liệu khác mà không gặp phải bất kỳ vi phạm khóa chính nào.