Temat: jak porównać bazy
Przychodzą mi do głowy różne rzeczy. Ale tym więcej mało trafnych i ogólnych pomysłów im mniej informacji na temat problemu. Poniżej moje spostrzeżenia, mniej lub bardziej trafne.
1. Musiałbyś znać nazwę kolumny w bazie A i B, która pełniłaby rolę identyfikatora, w oparciu o który mogłoby następować porównanie (np. z wykorzystaniem języka SQL).
Przykładowe zapytanie:
SELECT $id, kolumna1, kolumna2 , ...
FROM tabela A, tabela B
WHERE A.$id = B.$id
;
2. Najprościej by było gdyby istniała jedna baza, w której byłyby umieszczone dwie tabele (A i B), a trzecia (np. C), zawierałaby dane wspólne dla A i B, wtedy wystarczy proste zapytanie select * from C i wyrzuca te same dane. Ale wcześniej, musiałoby być wykonywane dodatkowe zapytanie INSERT, zapełniające tabele C. I tutaj wracamy do punktu 1). I tym samym zdaje się wkraczamy w zagadnienia integracji, synchronizacji oraz normalizacji baz danych :). Ksiązki o tym popisali...
3. Jeżeli to są "bazy" zapisane w różnych systemach baz danych, to sytuacja się trochę komplikuje. Pytanie czy to są w ogóle relacyjne bazy danych, pracujące o architekturę klient/serwer? Bo jeżeli to są na przykład bazy pracujące na lokalnym jakimś "silniczku" np. access czy firebird, to przydałoby się dokonanie konwersji danych do wspólnego formatu (XML? TXT? CSV?). A potem ewentualnie wykorzystanie języków skryptowych (np. awk czy jakiś perl) do ich przetworzenia.
4. Zakładając najbardziej oczywisty wariant (sic!), że to są dwie instancje tej samej bazy danych, na różnych serwerach bądź występujące pod innymi nazwami na tym samym serwerze, to -- nie wdając się w techniczne tego aspekty -- wydaje mi się, że to musiałoby wyglądać mniej więcej tak:
1.1) następuje połączenie z bazą A
1.2) wykonuje się zapytanie:
SELECT $id, kolumna1, kolumna2, ... , kolumnaN
FROM tabela1, tabela2, ... , tabelaN
[w tym miejscu klauzula WHERE lub JOIN, w zależności od konstrukcji tabel, kluczy, oraz tego które i jakie dane potrzebujemy]
1.3) wrzucenie wyniku zapytań do tablicy i ewentualne posortowanie danych.
2.1, 2.2, 2.3) analogicznie to samo co w podpunktach 1.1, 1.2, 1.3 tylko dla bazy B.
3. Porównujemy dwie tablice ze sobą [tutaj się kłaniają algorytmy porównań, np. wspomniane grafy] i listujemy dane które występują w obu tablicach, a które są iloczynem logicznym (ponieważ chcemy te dane, które się powtarzają, które są częścią wspólną).
Do wykonanie powyższego mnie się naturalnie nasuwa PHP i MySQL, ale równie dobrze to może być coś zupełnie innego.
Taka uwaga końcowa: w przypadku utworzenia trzeciaj bazy/tabeli, w celach bezpieczeństwa można nadać użytkownikom uprawnienia tylko do odczytu. No i rozwiązanie z trzecią bazą danych, skutkuje tym, że użytkownik będzie miał wgląd tylko do tych danych (założenie: "chciałbym mieć dostęp jedynie do wartości które się powtórzą" zostanie tym samym spełnione).