Zum Inhalt springen

Datenbankmodellierung von Orten


tmb

Empfohlene Beiträge

Hallo,

ich habe eine Frage zu einer, wie ich finde, komplexen Problemkonstellation. Sicher ist dieses Thema bereits mehrfach im Internet zu finden, jedoch würde ich gerne Eure persönliche Meinung zu diesem Thema wissen:

Es gibt ca. 30 MySQL Tabellen in meinem Projekt, die Ortsangaben enthalten. Ich habe zuerst den Namen als varchar in den einzelnen Tabellen hinzugefügt. Nun soll jedoch eine Umkreissuche verwendet werden, welches ein Problem bei mehrfach Ortsnamen aufwirft.

Also habe ich mir gedacht, die Zeilen der Ortsangabe als Tabelle mit Postleitzahl und Längen und Breitengrad als eigene Tabelle auszulagern und den Ort dann als ForeignKey zu setzen.

Nach der Recherche zu googleMaps und OpenGeoDb ist mir dann aufgefallen, dass ich viele Daten bereich als dumP erhalte, und somit doppelanfragne zu googlemaps verhindern kann, wenn diese bereits in meiner DB liegen.

In Hinblick auf internationale Orte, stellt dieses aber ein großes Problem dar - die Tabelle wird riesig und Wartung und Aktualisierung werden sehr komplex.

Was wäre eure Intention zu diesem Problem? Wir machen dieses andere Großprojekte?

Vielen Dank für Eure Tipps und Anregungen!!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um die Anzahl der Abfragen auf dauer zu minimieren. google setzt bei großer Abfrage ein limit und danach wird die Nutzung sehr teuer. Die Daten von OpenGeoDb sind ja relativ gut aufbereitet!

Zumal wenn ich nur auf googleMaps aufbaue, muss ich die Daten ja auch irgendwie speichern. Was schlägst du dort vor? Also der User gibt praktisch den Namen seiner Stadt ein, ggf. mit PLZ. Dann gibt mir googleMaps API die Längen- und Breitengrade zurück - diese speicher ich dann?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Vorgehen funktioniert auf Dauer nicht, denn wenn Du eine Suche zu dem Ort X durchführst, dann kannst Du nur cachen, was Du für diese Suche gefunden hast. Selbst wenn eine zweite Anfrage zu dem Ort X statt findet und sich nur ein Suchparameter ändert, musst Du eine neue Abfrage an den Service senden. Entweder besorgst Du Dir die Geodaten und implementierst alles selbst oder Du musst eben den Webservice abfragen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Alles klar.

@Pixie: Fast. Ich dachte halt, wenn ich nach "Berlin" suche, frage ich einmalig googeMaps nach den Koordinaten ab, speicher Sie dann in einer Tablelle z.B. locations, mit allen googlemaps Daten. Jetzt kann ich ja mit folgender Formel:

var x = 2 * $Erdradius * arcsin(

sqrt(

pow($x1 - $x2, 2) // Hinweis: pow($Basis, $Exponent) berechnet

+ pow($y1 - $y2, 2) // "$Basis hoch $Exponent".

+ pow($z1 - $z2, 2) // Hier also "($z1 - $z2)^2"

) / (2 * $Erdradius)

);

In meinen anderen Tabellen suchen. Sucht nun eine weitere Person nach "Berlin", entnehme ich die Daten aus meiner Datenbank.

Klingt für mich nun auch sehr kompliziert - die Frage ist halt, obs sinnvoll und performant läuft, ich habe gut 1.2 mio Ortsangaben mit PLZ in verschiedenen Tabellen, deshalb die Umstrukturierung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Diese Methode berücksichtigt kein Änderungen der Daten, d.h. wurde einmal nach Berlin gefragt, dann hast Du ggf irgendwann INformationen in Deiner Datenbank, die nicht mehr aktuell sind, weil Du sie nicht abgleichst. Zusätzlich bekommst Du Duplikate, die sich nicht eindeutig zuordnen lassen. Wenn Du nach Berlin suchst und das Ergebnis speicherst, dann einen Ort in der Nähe von Berlin als Suche nimmst, dann erhältst eine überlappende Ergebnismenge

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja, Aktualität ist das Problem. Ich weiß nicht, ob ich mich richtig ausgedrückt habe @flashpixx. Ich wollte nicht das Ergebnis speichern, sondern nur die geolocations, die ich von googe bekomme. Geolocation API - Gears API - Google Code

Somit habe ich irgendwann eine Basis von Städten und Adressen, die immer wieder auftreten und den Umkreis kann ich ja mit der oberen Formel berechnen, somit dachte ich, erhalte ich eine schnelle Lösung, die auch mit wenigen WebService abfragen funktioniert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich wollte nicht das Ergebnis speichern, sondern nur die geolocations, die ich von googe bekomme

Selbst diese ändern sich, wenn Du z.B. alle Hotels im Umkreis von 50km von einem Ort suchst, dann kann es passieren, dass Hotels nicht mehr existieren oder anders heißen usw. D.h. bei Deiner Umkreissuche wäre eben der Datenstand nicht immer aktuell.

Rein technisch würde man die Geokoordinaten der Orte und der Hotels speichern und dann entsprechend aus der Datenbank lesen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...