2016-12-11 2 views
1

У меня есть страна, регион, графство, данные города, и в настоящее время я решаю между двумя схемами (если есть лучший, расскажите).Самая лучшая схема базы данных для страны, региона, округа, города

Я сначала подумал

  • Страна

    • Id
    • Имя
  • Регион

    • Id
    • CountryId
    • программы Наименование
  • Каунти

    • Id
    • RegionId
    • Имя
  • город

    • Id
    • CountyId
    • Name

ли работа, однако, чтобы получить все города в стране, вы должны 3 внутренние соединения, чтобы сделать фильтрацию. Думаю, это может быть нормально, но потенциально дорого?

Другая конструкция была:

  • Страна

    • Id
    • Имя
  • Регион

    • Id
    • Имя
  • County

    • Id
    • Имя
  • Город

    • Id
    • CountryId
    • RegionId
    • CountyId
    • Имя

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

Как вы думаете, лучший дизайн схемы?

+0

Почему бы и нет: География {TownName, CountyName, RegionName, CountryName}? Все четыре атрибута являются ключевыми. – sqlvogel

ответ

2

Лучший дизайн базы данных зависит от того, как используются данные.

Если это довольно статические данные, которые будут обновляться за один раз, а внешние ссылки - все в городах, тогда я, вероятно, поеду на денормализованное измерение. То есть, хранить информацию в одном ряду:

  • Town Id
  • имя Город имя
  • Каунти название
  • Регион
  • Название страны

При описанном выше сценарии, идентификаторы для округа, региона и страны не нужны (по предположению).

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

Если идентификаторы для каждого уровня необходимы для вас, тогда у вас должна быть соответствующая структура таблицы для объявления ограничений внешнего ключа. Но это может усложниться. Будет ли внешний объект иметь атрибут «география», который может быть на любом уровне? Будет ли внешний всегда знать, на каком уровне он будет называться?

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

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