2009-09-28 2 views
2

Каков наилучший способ разработки схемы для следующих требований?Каков наилучший способ разработки схемы для следующего?

Необходимо сохранить страны, штаты, округа и округа можно разделить на регионы. Регионы могут затем иметь людей с различными точками данных для отчета.

Регионы также могут быть разделены на группы, которые похожи на группировку людей. Таким образом, регион 1 может иметь Отдел A, Отдел B с людьми в каждом из этих подразделений. Регионы и отделы, каждый из которых имеет различные метаданные, отличные от стран, штатов и округов.

Отчеты будут отображаться на данных, связанных с людьми и аналогичными , на google analytics, сверля из страны все путь вниз к регионам и подразделениям.

Примечание: Регионы могут иметь 10 человек и 1 подразделение с 4 людьми и 6 человек. не привязаны ни к одному подразделению.

+4

Вы можете получить более качественные ответы, если вы разместите свои мысли о наилучшем способе сделать это и попросите проверки/улучшения, а не попросите сообщество разработать схему для вас. –

+2

Могут ли регионы и подразделения меняться со временем? Вы должны учитывать такие вещи, как страны/регионы и т. Д. разрыв или слияние вместе? Может ли связать людей с различными подразделениями со временем? И если так, вам все равно? Возможно, вы захотите ознакомиться с шаблоном «Анализ» «Ответственность» от Мартина Фаулера, если применимо какое-либо из этих элементов. – SingleShot

ответ

1

Похоже, что каждый человек может иметь один и только один регион.

Если вы выполняете транзакционную обработку (в отличие от интеллектуального анализа данных/складирования), я бы связал человека с регионом с внешним ключом RegionID.

Что касается (по желанию) подразделений, вы можете связать человека к разделению с таблицей ссылок: PersonID, DivisionID или если вы не возражаете NULLDivisionID, вы можете иметь внешний ключ.

Что касается иерархии для географических регионов, я бы колебался, чтобы моделировать это, пока не узнаю больше об ограничениях между странами и о том, что представляют собой эти структуры. Хотя было бы неплохо думать, что все всегда поднимается до следующего уровня, я много разбираюсь в иерархиях, где уровни пропускаются, и они моделируются совсем по-другому. Кроме того, во многих странах, таких как Соединенное Королевство, обычно не было бы государств (если вы не собираетесь использовать Англию, Шотландию, Уэльс и Северную Ирландию). France is even more complex.

Для аспекта отчетности/свертывания (или если вы только выполняете интеллектуальный анализ данных/складирование), я бы преобразовал в отдельную размерную модель, которая «запирала» другие вещи в качестве атрибутов и делала бы это намного легче сделать свертки. Таким образом, звездная схема блокирует идентификаторы размеров для разных уровней.

1

Off верхней части моей головы:

  • страны, государства, округа, города все еще Fk в регионы.
  • государство имеет Fk в страны
  • округов имеют Fk государства
  • городов Fk в графства
  • регионов Fk к разделам
  • народа Fk к divisions_people
  • divisions_people имеет Fk для людей и подразделений
  • подразделения имеет Fk к divisions_people

    country <- state <- county <- city 
    ^  ^  ^ ^
        \   \  / /
           regions 
           ^
            | 
           divisions 
           ^
            | 
           \|/ 
          divisions_people (1 person in multiple divisions) 
           ^
            | 
           people 
    
+0

+1 для искусства ASCII! –

0

Стол для стран: COUNTRY_ID, COUNTRY_NAME, население

Стол для состояний: state_id, state_name, COUNTRY_ID, население

Стол для графств: county_id, county_name, state_id, население

стол для регионов: region_id, REGION_NAME, county_id, население

Стол для отделов: division_id, division_name, region_id, население

Validate в коде или через сработавшей ограничения (в зависимости от СУБД), которые не имеют разделения на 300 человек внутри региона только 50 люди. Чтобы иметь людей в регионе, не будучи в дивизионе, ваше население в регионе составит 500, а сумма его дивизий составит всего 450 (оставив вам 50 человек в регионе, но без разделения).