2010-12-14 11 views
2

Ich versuche geschachtelte Beziehungen zu modellieren und habe es schwer, dorthin zu kommen, wo ich sein möchte. Ich möchte ein Beispiel vorstellen, das hoffentlich einige meiner Fragen beantworten wird; es basiert auf Geographie.Datenbank Design

Ich hätte gerne eine einzige Region entity. Diese Regionsentität erlaubt Planeten, Kontinente und Länder.

Ich hätte im Grunde eine einzige Region namens Erde. Dies wäre die erste Ebene der Hierarchie. Dann hätte ich die 7 Kontinente, die in der Region Erde verschachtelt wären. Dann würde ich alle Länder der Welt hinzufügen und jeden mit ihrem äußeren Kontinent verbinden. Es kann Kantenfälle geben (ich weiß nicht, ob es in diesem Beispiel gibt, aber ich will, dass es dort ist), wo ein Land mehr als einem Kontinent gehört.

Was ich will, im Wesentlichen zu erhalten, ist die Fähigkeit, zu sagen:

Wählen Sie Alle Länder in einem Kontinent. Ich möchte die Fähigkeit, auch unbegrenzt zu nisten; also wäre die nächste Schicht Staaten/Provinzen. Ich könnte also sagen, ich möchte alle Provinzen in Nordamerika.

Ich kann Art vorstellen, wie die SQL aussehen würde, aber ich weiß nicht, wie die Multi-Tier-Verschachtelung zu tun:

Select * 
From Region Outer, Region Inner 
Where Outer.Name = "North America" 
AND Inner.Type = "State" 

ich mit nur einem einfachen Region Einheit habe kommen und dann eine selbstbezüglicher Eltern-Kind-Einheit:

Region {RegionID, Name, Type} 
SubRegion {ParentID, ChildID} 

ich bin sehr daran interessiert, wie dies erreicht werden soll. Wenn ich falsche oder schlechte Designentscheidungen/-annahmen mache, kann ich mir einen eigenen Vorschlag machen. Ich bin auch nicht explizit an den geografischen Sachen interessiert, ich dachte nur, dass es ein gutes Beispiel ist, das illustriert, was ich zu erreichen versuche.

Ich versuche dies in SQL 2008 R2 mit C# und Linq zu tun.

Das fühlt sich an wie ein hierarchischer Netzwerkgraph, also denke ich, dass es einen gut verstandenen Weg geben sollte; Ich weiß es einfach nicht ..

+1

haben Sie SQL Server 2008 Spatial Types untersucht? Anstatt FKs mit IDs zu verknüpfen, könnten Sie räumliche Informationen verwenden, um herauszufinden, "welche Länder sich in einem Kontinent befinden". – RPM1984

+0

Russland und die Türkei erstrecken sich über zwei Kontinente, nämlich Europa und Asien. –

Antwort

0

Warum Dinge komplizieren?

Haben Sie einfach "Land", "Kontinent", "Staat", "Landkreis", "Stadt" und "Bezirk" Spalten in Ihrer Tabelle.

Das "Land" und "Kontinent" mag überflüssig erscheinen, aber "Moskau" ist in Europa und Wladiwostock ist in Asien, aber beide sind in der Russischen Föderation.

Ähnliche Situationen gibt es für die Türkei, Dänemark und Ägypten.

+0

Dänemark? Warum? Ist das nicht nur Europa? – Spredzy

+0

Momentan, vielleicht nicht in ein paar Jahren, ist Grönland Teil Dänemarks. –

0

Region Mapping kann ein komplexes Problem sein. Das Hauptproblem ist, dass Regionen, die mit Karten arbeiten, nicht sauber in Kontinente passen. Wenn Sie beispielsweise die USA als eine Region betrachten, deckt sie zwei Teile Nordamerikas ab und umfasst Inseln im Pazifik. viele andere Beispiele stammen aus eher esoterischen Regionen. Ein Beispiel, das mir jemand erwähnte, waren die Rocky Mountains, die sowohl Nordamerika als auch Kanada umfassen. Wem gehört es also? Andere Regionstypen können sich gegenseitig überlappen und nicht verschachteln. Zum Beispiel kann eine Weinregion sich überlappen, aber nicht vollständig ein Gemeindegebiet umfassen. Es kann sogar Bits von mehreren enthalten.

Wenn Sie also mit Regionen in diesem Sinne zu tun haben, dann müssen Sie grundsätzlich mehrere Formen auf einer Karte jeder Form und Lage zulassen, die irgendeine Beziehung zu anderen Formen haben können.

Wenn dies für ein Spiel ist, dann können Sie das Modell im Grunde hacken, um sich anzupassen. Ich würde vorschlagen, einige grundlegende Einschränkungen in dem Sinne hinzuzufügen, dass eine bestimmte Region sich nicht mit einer anderen überschneiden kann, mit Ausnahme der Eltern, die sie vollständig enthalten müssen.

Wenn dies für Real ist, dann haben Sie die oben genannten komplexen Probleme zu behandeln.