2015-10-15 5 views
0

Я разрабатываю новую бэкэнд-систему MySQL, и я столкнулся с проблемой, и я не уверен в оптимальном способе настройки таблицы. Скажем, у меня есть таблица под названием города. Каждый город имеет отношение к столу weather, который содержит информацию о погоде за каждый месяц. Для того, чтобы быть просто скажем, что структура города таблицы:Оптимальный способ настройки структуры таблицы

--------------- 
| ID | Name | 
--------------- 
| 1 | City1 | 
| 2 | City2 | 
| 3 | City2 | 
--------------- 

Для погоды, у меня есть около 50 месторождений. Для каждого месяца года у меня есть высокая температура, низкая температура, средняя температура, средние осадки. Наличие таблицы с 50 столбцами кажется неэффективным, и кажется сложным добавить новые поля. Другой вариант можно рассмотреть, чтобы иметь таблицу со следующей установкой:

---------------------------------------------------- 
| ID | CityID | Type | Value | Unit | Month | 
---------------------------------------------------- 
| 1 | 1 | high_temp | 50 | F | 1 | 
| 2 | 1 | low_temp | 35 | F | 1 | 
| 3 | 1 | avg_temp | 45 | F | 1 | 
| 4 | 1 | avg_prec | 10 | IN | 1 | 
| 5 | 2 | high_temp | 60 | F | 1 | 
| 6 | 2 | low_temp | 50 | F | 1 | 
| 7 | 2 | avg_temp | 55 | F | 1 | 
| 8 | 2 | avg_prec | 2 | IN | 1 | 
---------------------------------------------------- 

Однако, у меня есть около 1000 городов в базе данных и будет расширять это до десятков тысяч. Наличие таблицы с примерно 5 миллионами строк кажется чрезмерным, и я беспокоюсь о времени запроса.

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

ответ

1

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

какие города с высокой температуры более чем на 30 и низкой температуре менее затем 15 в январе?

для города 1 при превышении максимальной температуры и минимальной температуры?

Запрос для этих вопросов будет сложным. И все вопросы, связанные с несколькими типами темп, дадут вам головную боль в будущем.

Оптимальный путь для перемещения значения временных в столбцы:

ID | CityID | HighTemp | LowTemp | AvgTemp | AvgPrec | Unit | Month | 

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

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

+0

В качестве продолжения, у меня есть аналогичная проблема с ценовой таблицей. Существует около 50 различных полей для оценки по сравнению с 8, но нет данных за месяц. В этом случае было бы оптимально иметь таблицу с ~ 50 полями? – user2694306

+0

В большинстве случаев он будет оптимальным. Но нормализация не является универсальной панацеей. У меня была подготовка в Microsoft, и преподаватель посоветовал просто сделать денормализацию в некоторых случаях.Но это большая тема для обсуждения в комментарии. Не забудьте задать вопросы о данных и ответах. –

0

Если ваши поля не исправлены, то структура, которую вы сейчас используете, является звуковой.

5 миллионов - это не такое большое количество, если мы говорим о базах данных, которые построены вертикально для обработки больших данных.

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

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