2010-12-14 6 views
2

중첩 된 관계를 모델링하고 싶고 내가 원하는 위치에 도달하는 데 어려움을 겪고 있습니다. 희망적으로 내 질문 중 일부에 답변 할 수있는 예를 제시하고자합니다. 그것의 지리학에 근거를 둔.데이터베이스 디자인

단일 Region 엔터티를 갖고 싶습니다. 이 지역 엔티티는 행성, 대륙 및 국가를 허용합니다.

기본적으로 지구라는 단일 지역이 있습니다. 이것은 계층 구조의 첫 번째 레벨이됩니다. 그러면 지구 대륙 내에 중첩 될 7 대륙이 생길 것입니다. 그렇다면 나는 세계의 모든 국가를 추가하고 각각을 외부 대륙과 연관시킬 것입니다. 국가가 하나 이상의 대륙에 속하는 가장자리 사례가있을 수 있습니다 (이 예가 있을지 모르겠지만 거기에 있기를 원합니다).

이 대륙의 모든 국가를 선택

은 내가 본질적에 도착 싶은 말을 할 수있는 능력이다. 무기한으로 둥지를 틀 수있는 능력을 원합니다. 그래서 다음 층은 주/지방이 될 것입니다. 그래서 나는 북아메리카의 모든 주를 원한다고 말할 수 있습니다.

나는 종류의는 SQL이 어떻게 보일지 상상할 수 있지만, 나는 멀티 티어 중첩하는 방법을 모르겠어요

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

그때 단순한 지역 단체와 함께 왔어요을 자체 참조 학부모 - 자녀 개체 :

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

나는 이것이 어떻게 달성되어야 하는지를 배우는 데 가장 흥미가 있습니다. 부정확하거나 잘못된 디자인 결정을 내릴 경우/가정은 자유롭게 의견을 말하십시오. 나는 또한 지리적 인 것들에 명시 적으로 관심이 없다. 나는 그것이 성취하려는 것을 보여준 좋은 예라고 생각했다.

SQL 2008 R2에서 C# 및 Linq를 사용하여이 작업을 수행하려고합니다.

이것은 계층 적 네트워크 그래프처럼 느껴 지므로이 방법을 잘 이해해야합니다. 나는 단지 그것을 모른다. ..

+1

SQL Server 2008 Spatial Types를 살펴 보았습니까? FK가 ID에 매핑되는 대신에 공간 정보를 사용하여 "어느 나라가 대륙 안에 있는지"알아낼 수 있습니다. – RPM1984

+0

러시아와 터키는 유럽과 아시아의 두 대륙에 걸쳐 있습니다. –

답변

0

물건을 복잡하게하는 이유?

테이블에 "country", "continent", "state", "county", "city"및 "district"열이 있습니다.

"국가"와 "대륙"은 중복되는 것처럼 보일 수 있지만 "모스크바"는 유럽에 있으며 블라디보스토크는 아시아에 있지만 러시아 연방에 있습니다.

비슷한 상황이 터키, 덴마크 및 이집트에 있습니다.

+0

덴마크? 왜? 유럽에만 있지 않니? – Spredzy

+0

현재 2 년 내에 있지는 않지만, 그린란드는 덴마크의 일부입니다. –

0

영역 매핑은 복잡한 문제 일 수 있습니다. 가장 중요한 문제는 매핑을 처리 할 때 영역이 대륙 등에 깔끔하게 맞지 않는다는 것입니다. 예를 들어 미국을 지역으로 간주하면 북미의 두 부분을 다루며 태평양에 섬이 포함됩니다. 많은 다른 예는보다 밀교 적 영역 매핑에서 나온다. 누군가 나에게 언급 한 한 예가 북미와 캐나다를 잇는 록키 산맥 이었기 때문에 누가 그것을 속한 것입니까? 다른 영역 유형은 중첩이 아닌 서로 겹칠 수 있습니다. 예를 들어 와인 지역은 겹칠 수 있지만 시정촌을 완전히 포함하지는 않습니다. 심지어 여러 비트를 포함 할 수도 있습니다.

그런 의미에서 영역을 다루려면 기본적으로 맵에서 모양과 위치가 다른 모양과 관계가있는 여러 모양을 허용해야합니다.

게임용 인 경우 기본적으로 모델을 해킹하여 기본적으로 제품군에 적용 할 수 있습니다. 주어진 영역이 다른 영역과 겹칠 수없는 선을 따라 몇 가지 기본 제한 사항을 추가하는 것이 좋습니다. 단,이를 완전히 포함해야하는 부모를 제외하면됩니다.

의 경우 실제 인 경우 위의 복잡한 문제가 발생합니다.