Frage

Ich entwerfe ein Kontaktverwaltungssystem und bin auf ein interessantes Problem bei der konsistenten Modellierung geografischer Standorte gestoßen.Ich möchte in der Lage sein, Orte aufzuzeichnen, die einer bestimmten Person zugeordnet sind (Postanschrift(en) für Arbeit, Schule, Zuhause usw.). Mein Gedanke ist, eine Tabelle mit Orten wie die folgende zu erstellen:

Locales (ID, LocationName, ParentID) wo autonome Orte (wie Länder, z.B.USA) sind Eltern ihrer selbst.Auf diese Weise kann ich eine beliebig tiefe Verschachtelung von „politischen Einheiten“ erstellen (LAND > STAAT > STADT oder LAND > STAAT > STADT > UNIVERSITÄT).Einige Abfragen erfordern zwangsläufig eine Rekursion.

Ich würde mich über weitere Empfehlungen oder Ratschläge zu vorhersehbaren Problemen freuen, auf die ich bei einem solchen System wahrscheinlich stoßen werde.

War es hilfreich?

Lösung

Vielleicht möchten Sie sich Freebase.com als eine Website ansehen, auf der offen darüber diskutiert wird, was ein „Standort“ bedeutet und was es bedeutet, wenn ein Standort in einem anderen enthalten ist.Solche Fragen können eine Menge Diskussionen auslösen.

Beispielsweise gibt es die offensichtliche „geografische Verschachtelung“, aber es gibt weniger offensichtliche logische Verschachtelungen.Im streng geografischen Sinne liegt die Vatikanstadt beispielsweise in Italien.Aber es ist nicht politisch verschachtelt.Wenn sich Ihr Benutzer in einem Forschungszentrum befindet, das zu einer Universität gehört, sich aber nicht auf dem Gelände der Universität befindet, modellieren Sie dann diese Beziehung oder nicht?

Andere Tipps

Klingt für mich nach einem guten Ansatz.Das Einzige, worüber ich beim Lesen Ihres Beitrags nicht im Klaren bin, ist, was „sich selbst übergeordnet“ bedeutet. Wenn dies darauf hinweisen soll, dass das Gebietsschema kein übergeordnetes Element hat, ist es besser, null als die ID von sich selbst zu verwenden.

Ich denke, Sie denken vielleicht zu viel darüber nach.Es gibt einen Grund, warum die meisten Systeme nur Adressen und möglicherweise eine Ländertabelle speichern.Hier sind einige Dinge, auf die Sie achten sollten:

  1. Würde eine Adresse in der Bronx den Bezirk als Hierarchieebene einbeziehen?Würde eine Adresse in einem nicht eingemeindeten Gebiet die „Stadt“-Ebene der Hierarchie aufheben?Wie modelliert man eine Adresse innerhalb einer Universität im Vergleich zu einer Adresse, die nicht innerhalb einer Universität liegt?Am Ende erhalten Sie eine unregelmäßige Hierarchie, die Sie dazu zwingt, den Baum jedes Mal zu durchlaufen, wenn Sie eine Adresse in Ihrer Anwendung anzeigen müssen.Wenn Sie über eine „Adressbuch“-Seite verfügen, kann der Leistungseinbruch erheblich sein.

  2. Ich bin mir nicht sicher, ob Sie überhaupt nur eine Hierarchie haben.Die Brown University verfügt über Einrichtungen in Providence, Rhode Island und Bristol, Rhode Island.Die einzig saubere Lösung wäre eine doppelte Hierarchie mit zwei Campussen, die in einer Hierarchie jeweils zu ihren jeweiligen Städten gehören, in der anderen Hierarchie jedoch beide zur Brown University gehören.(Eine Universität ist grundsätzlich anders als eine politische Region.Man sollte sie nicht wirklich mischen.)

  3. Was ist mit Postleitzahlen?Einige Postleitzahlen umfassen mehrere Städte, manchmal ist eine Stadt in mehrere Postleitzahlen unterteilt.Und (selten) überschreiten einige Postleitzahlen sogar Staatsgrenzen.(Laut Wikipedia zumindest...)

  4. Wie geben Sie die Daten ein?Der Aufbau der Datenbank durch das Parsen herkömmlich formatierter Adressen kann schwierig sein, wenn Sie Vanity-Adressen, alternative Namen für bestimmte Straßen, unterschiedliche internationale Formate usw. berücksichtigen.Und ich denke, dass die hierarchische Eingabe jeder Adresse eine PITA wäre.

  5. Es hört sich so an, als würden Sie versuchen, die ganze Welt in Ihrer Anwendung zu modellieren.Möchten oder müssen Sie wirklich eine Tabelle führen, die alle denkbaren Städte, Bundesstaaten, Provinzen, Postleitzahlen und Länder der Welt enthalten könnte?(Oder zumindest jeder, bei dem Sie jemanden kennen?) Das Einzige, was ich mir vorstellen kann, ist die Nähe, die Ihnen dieses System verschaffen würde, aber wenn Sie das wollen, würde ich Bundesstaat und Land einfach separat speichern (und vielleicht auch die Postleitzahl). und fügen Sie Breiten- und Längengraddaten von Google hinzu.

Entschuldigen Sie den extremen Pessimismus, aber ich bin selbst diesen Weg gegangen.Es ist logischerweise schön und elegant, aber in der Praxis funktioniert es nicht so gut.

Hier ist ein Vorschlag für ein ziemlich flexibles Schema.Eine sofortige Warnung:Es könnte zu flexibel/komplex für das sein, was Sie tatsächlich benötigen

Standort (StandortId, Standortname) - Basisbaublock

StandortGroup (Standortgroupid, Standortgroupname, ParentLocationGroupID) - Dies kann einige Hierarchien effektiv einkapseln.Sie haben einen Wurzelknoten und können dann mehrere unabhängige Zweige erstellen.Z.B.Sie können zunächst nach Bundesstaat aufteilen und dann mehrere Unterhierarchien erstellen, z. B.PLZ/Stadt/xxxx

LocationGrouplocation (locationID, locationGroupId) - Hier erfahren Sie, wie Sie den Standort mit einer oder mehreren Hierarchien verknüpfen.Z.B.Sie können Ihr Haus sowohl mit einer Postleitzahl als auch mit einer Stadt verknüpfen ...Was Sie implementieren müssen, ist eine Einschränkung, dass Sie einen Standort nicht mit zwei beliebigen Hierarchien verknüpfen können sollten, von denen eine der anderen übergeordnet ist (da die Beziehung bereits implizit ist).

Ich würde darüber sorgfältig nachdenken, da es sich möglicherweise nicht um eine notwendige Funktion handelt.Warum nicht einfach ein Textfeld verwenden und die Benutzer eine Adresse eingeben lassen?

Denken Sie daran KISS-Prinzip (Halten Sie es einfach blöd).

Ich stimme den anderen Beiträgen zu, dass Sie hier sehr vorsichtig mit Ihren Anforderungen sein müssen.Der Standort kann zu einem heiklen Thema werden, weshalb GIS-Systeme so kompliziert sind.

Wenn Sie sicher sind, dass Sie nur eine grundlegende Hierarchiestruktur benötigen, habe ich die folgenden Vorschläge:

  • Ich unterstütze den vorherigen Kommentar, dass Elemente auf Stammebene nicht sich selbst als übergeordnete Elemente haben sollten.Elemente auf Stammebene sollten einen Nullwert für das übergeordnete Element haben.Seien Sie immer vorsichtig, wenn Sie Daten in ein Feld eingeben, das keine Bedeutung hat (z. B.„spezieller“ Wert, um keine Daten darzustellen).Diese Praxis ist selten notwendig und Weg Wird in der Entwickler-Community überstrapaziert.
  • Betrachten Sie XPath/XML.Dies ist bei der Aufzeichnung der Hierarchiestruktur und bei der Verarbeitung/Analyse der Daten beim Abruf zu berücksichtigen.Wenn Sie MSSQL Server verwenden, eignen sich die XPath-Ausdrücke in Select-Anweisungen perfekt für Aufgaben wie die Rückgabe des vollständigen Speicherorts/Hierarchiepfads eines Datensatzes, da der Code einfach ist und die Ergebnisse schnell sind.

Für geografische Standorte möchten Sie möglicherweise eine Adresse in ein Breiten- und Längengrad-Array auflösen (vielleicht mithilfe von Google Maps usw.), um Nähe usw. zu berechnen.Für geopolitische Verschachtelung ...Ich würde mich für die KISS-Antwort entscheiden.

Wenn Sie es wirklich modellieren möchten, müssen die Typen möglicherweise allgemeiner sein ...Land -> Bundesland -> Landkreis -> Bezirk -> Ort -> Stadt -> Vorort -> Straße oder Postfach -> Nummer -> -> Wohnung usw.-> Institution (Universität oder Arbeitgeber) -> Abteilung -> Unterabteilung-1 -> Unterabteilung-n ...Bist du sicher, dass du KISS nicht machen kannst?

Ich modelliere Apps für globale Benutzer und habe die gleichen Probleme, aber ich denke, dass dieser Ansatz bereits in vielen Unternehmen verwendet werden könnte.Aber warum gibt es für dieses Problem keine universelle Lösung?Oder gibt es für dieses Problem eine beste Lösung, die als Ausgangspunkt dienen kann, oder muss irgendjemand auf der Welt von Anfang an über eine Lösung dafür nachdenken?In der IT machen wir leider immer und an vielen Orten die gleichen Dinge.Wer hat beispielsweise nicht mehr als eine Benutzer-, Kunden- oder Produktdatenbank erstellt?Und das Schlimmste: Alle Unternehmen der Welt haben es geschafft.Ich denke, dass es universelle Lösungen für universelle Probleme geben könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top