Дизайн базы данных - PullRequest
       0

Дизайн базы данных

2 голосов
/ 14 декабря 2010

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

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

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

То, к чему я по сути хочу добраться, этоспособность сказать:

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

Я могу себе представить, как будет выглядеть SQL, но я не знаю, как сделать многоуровневое вложение:

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

Я придумал просто простую сущность Region, а затем самореферентную сущность Parent-Child:

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

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

Я пытаюсь сделать это в SQL 2008 R2 с C # и Linq.

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

Ответы [ 2 ]

0 голосов
/ 14 декабря 2010

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

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

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

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

0 голосов
/ 14 декабря 2010

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

Просто добавьте в таблицу столбцы "страна", "континент", "штат", "округ", "город" и "район".

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

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

...