2010-12-14 4 views
2

Я пытаюсь смоделировать вложенные отношения, и мне трудно добраться до того места, где я хочу быть. Я хочу привести пример, который, надеюсь, ответит на некоторые из моих вопросов; его основано на географии.Дизайн базы данных

Хотелось бы иметь единый объект Region. Этот субъект региона позволяет планетам, континентам и странам.

У меня в основном был бы один регион под названием Земля. Это будет первый уровень иерархии. Тогда у меня были бы 7 континентов, которые были бы вложены в Region Earth. Тогда я бы добавил все страны мира и связал каждого со своим внешним континентом. Там могут быть случаи краев (я не знаю, есть ли в этом примере, но я хочу, чтобы они были), где Страна принадлежит более чем одному континенту.

То, что я в основном хочу, чтобы добраться до является возможность сказать:

Выберите Все страны на континенте. Мне также хотелось бы, чтобы на неопределенное время тоже было гнездо; поэтому следующим слоем будут штаты/провинции. Поэтому я мог бы сказать, что хочу всех провинций Северной Америки.

Я могу представить себе вид, как 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? Вместо того, чтобы FK отображался на идентификаторы, вы могли бы использовать пространственную информацию для определения того, «какие страны находятся на континенте». – RPM1984

+0

Россия и Турция охватывают два континента, а именно Европу и Азию. –

ответ

0

Зачем усложнять вещи?

Просто у вас на столе столбы «страна», «континент», «штат», «графство», «город» и «район».

«Страна» и «континент» могут показаться излишними, но «Москва» находится в Европе, а Владивосток - в Азии, но оба находятся в Российской Федерации.

Аналогичные ситуации существуют для Турции, Дании и Египта.

+0

Дания? Зачем? Разве просто Европа? – Spredzy

+0

В настоящее время, хотя, возможно, не через пару лет, Гренландия является частью Дании. –

0

Картографирование региона может быть сложной проблемой. Основная проблема заключается в том, что при работе с картографированием регионы не аккуратно вписываются в континенты и т. Д. Например, если вы рассматриваете США как регион, то он охватывает две части Северной Америки и включает острова в Тихом океане. многие другие примеры происходят из более эзотерических отображений областей. Один из примеров, о котором я упоминал, был Скалистые горы, которые охватывают как Северную Америку, так и Канаду, так кто же это принадлежит? Другие типы регионов могут перекрывать друг друга, а не гнездо. Например, винная область может перекрываться, но не полностью охватывать муниципальную область. Он может даже включать биты из нескольких.

Итак, если вы собираетесь иметь дело с регионами в этом смысле, тогда вам придется в принципе разрешить несколько фигур на карте любой формы и местоположения, которые могут иметь какие-либо отношения с другими фигурами.

Если это для игры, вы можете взломать модель самостоятельно. Я бы предложил добавить некоторые основные ограничения по строкам, что любой данный регион не может пересекать другой, кроме его родителя, который должен полностью его содержать.

Если это для Real, то у вас есть вышеуказанные сложные проблемы, с которыми нужно иметь дело.

Смежные вопросы