# Wie kann man 2 DBs verknüpfen



## fasi (1. Dez 2010)

Hallo,

ich stehe vor folgendem Problem:
Es liegen 2 Datenbanken vor: eine Projekt-DB(a) und eine externe DB(b), die auch extern bleiben muss/soll.
In (a) werden in einer Tabelle die ID's zu einer Tabelle aus (b) abgelegt, um über diesen "Key" zu verknüpfen.
Gibt es in Java nun die Möglichkeit bzw. eine Syntax, um mit "einer" Query datenbankübergreifend abzufragen, oder beibt hier nur der Weg verschachtelter SELECT Statements?

Bevor Fragen bezügl. Datenbankdesign aufkommen:
Dem User soll die Möglichkeit gegeben werden, bei Bedarf Daten einzubinden, die ihm als weitere DB vorliegen. Dabei sollen diese Daten eben nicht in die Projekt-DB importiert werden, sondern als externer Datenpool bestehen bleiben.

Wer hat eine Idee, dieses "elegant" zu lösen? 

Danke!


----------



## Michael... (1. Dez 2010)

Um was für eine Datenbank handelt es sich? In Oracle kann man Datenbanklinks zwischen verschiedenen Datenbanken erzeugen, um so DBübergreifend auf die Daten zuzugreifen.


----------



## LadyMilka (1. Dez 2010)

Ich glaub man kann nicht mit einer Abfrage auf unterschiedliche Datenbanken zugreifen.

Ich würde mir in einer ersten Abfrage die ID's holen und dann mit denen auf der anderen DB den Rest abfragen.


----------



## fasi (1. Dez 2010)

erstmal Danke!

@Michael...
die Projekt-DB ist MySQL, was extern drangehangen wird, weiß man ja nicht.
Wobei ich hier noch zwischen Vorgaben ( und entsprechenden Treibern ) oder generell ODBC schwanke..

@LadyMilka
ja..., und eben das wollte ich eben "elegant" mit nem JOIN über 2 DB's umgehen.

Kann man nicht irgendwie adressieren?
(Ich glaube eigentlich selber nicht dran, da ich bisher nirgends was derartiges gefunden habe, und die Resultset-Syntax ja nur auf EIN Statement greift...)


----------



## XHelp (1. Dez 2010)

Lies dir mal Linux.com :: Running MySQL queries on multiple servers durch, sieht auf den ersten Blick vielversprechend aus.
Edit: MySQL :: MySQL 5.0 Reference Manual :: 13.7 The FEDERATED Storage Engine könnte auch was für dich sein.


----------



## fasi (1. Dez 2010)

@XHelp
danke, das Thema "FEDERATED Storage Engine" an sich ist interessant.
Es bleibt aber hierbei der Haken, dass die Remote-DBs eben nicht zwingend MySQL-DBs sind.
Es sollte z.B auch möglich sein, auf eine externe ACCESS-DB als Datenquelle zuzugreifen.

Sinn der Sache ist z.B. bei einer Inventar-Verwaltung. Beispiel:
In der Projekt-DB (MySQL) ist aufgegliedert in Objekt >> Etage >> Raum.
In den Räumen: Bürostuhl Typ A, Bürostuhl Typ B, Tisch Typ A

In der externen DB, die vom Hersteller Typ A zur Verfügung steht:
Bürostuhl Typ A >> Attribute (Maße, Farbe Material, Wiederbeschaffungspreis etc.)
Tisch Typ A >> Attribute (Maße, Farbe Material, Wiederbeschaffungspreis etc.)

Und wie der Datenpool des Herstellers aussieht, ist nicht vordefiniert.
Kann ja auch EXCEL sein...


----------



## Michael... (1. Dez 2010)

Wenn's keine Möglichkeit die Datenquellen auf DB oder sonstiger Ebene zu verknüpfen, bleibt Dir nichts anderes übrig, als dies in Deiner Anwendung zu machen. Dabei ist es unabhängig ob die Datenquellen aus DBs, Datei, Streams... bestehen:
1. Datenquelle 1 anfragen, Ergebnis auswerten und aufbereiten
2. Datenquelle 2 mit den Informationen aus 1. anfragen


----------



## XHelp (1. Dez 2010)

Kann ja auch ein Haufen A0 Blätter sein, also musst du ein Programm schreiben, das automatisch zum Scanner (der a0 kann) geht, Blätter einlegt, scannt, OCR drüberlaufen lässt etc etc...
Worauf ich hinaus will: du kannst kein Programm schreiben, welches zu deiner MySQL Datenbank "alles mögliche" dranschraubt.

Aber es hört sich so an, als ob du die Daten in der 2. Datenbank nicht verändern willst. Also wird sich vermutlich lohnen einfach einmalig die Datenbank in die gewünschte Form zu convertieren (z.B. zu mysql und dann einfach nur lokal einbinden)


----------



## fasi (1. Dez 2010)

@Michael...
Jo, irgendwie hab ich das schon geahnt.
Mir lag hierbei auch das Thema "Performance" im Sinn.

@XHelp
Konvertieren - gute Idee. Sehe ich aber nicht ein 
Der sog. Auftraggeber hätte gern ein Verwaltungsprogramm als "dynamisches Baukastensystem".
Die Realisierung hats eh schon in sich. Man kanns auch übertreiben.

"...das automatisch zum Scanner (der a0 kann) geht, Blätter einlegt, scannt, OCR drüberlaufen lässt...", damit liegst Du gar nicht so fern!
Die Hauptdaten sollen nämlich aus CAD-Zeichnungen in die Projekt-DB überführt werden...
Die sind zum Glück nicht nur gedruckt!

Wer Zeit hat, kann mich ja bissl bedauern

===

Fazit: Also werde ich getrennte Queries nutzen.

Danke für eure Hilfe!


----------

