Я пытаюсь смоделировать вложенные отношения и мне тяжело добраться туда, где я хочу быть.Я хочу представить пример, который, надеюсь, ответит на некоторые из моих вопросов;это основано на географии.
Я хотел бы иметь один объект 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.
Это похоже на иерархический сетевой график, поэтому я думаю, что должен быть хорошо понятый способ сделать это;Я просто этого не знаю ..