2014-11-28 8 views
0

У меня есть общий вопрос о дизайне таблицы базы данных MySQL. У меня есть таблица, которая содержит ~ 650 тысяч записей, с примерно 100 тысячами добавленных в год. Данные запрашиваются довольно часто, в среднем 1,6 раза в секунду.Совет по проектированию таблиц Mysql

Он имеет следующую структуру прямо сейчас

id port_id   date  product1_price product2_price product3_price 
1   1 2012-01-01    100.00   200.00   155.00 
2   2 2012-01-01     NULL   150.00   255.00 
3   3 2012-01-01    300.00    NULL   355.00 
4   1 2012-01-02    200.00   250.00   355.00 
5   2 2012-01-02    400.00   230.00   255.00 

wouln't это лучше хранить данные таким образом?

id  port_id   date product price 
1   1 2012-01-01   1  100 
1   2 2012-01-01   1  200 
1   3 2012-01-01   1  300 
1   1 2012-01-02   1  240 

Преимущества альтернативного дизайна:

  • со второй конструкции мы не должны хранить пустые значения (если нет такого продукта в порту)
  • мы можем добавить новый продукты легко - по сравнению с первым дизайном, где каждый новый продукт требует нового столбца

недостатки альтернативной конструкции:

  • Число записей будет увеличиваться с 650 000 до 650 000 * число_продукты за вычетом всех записей NULL; что составит около 2,1 миллиона записей.

В обоих случаях мы имеем id столбец как primary_key и уникальный ключ на комбинации port_id и date.

Итак, вопрос в том, куда идти? Дисковое пространство не имеет значения, скорость запросов является наиболее важным аспектом.

Благодарим за внимание.

ответ

0

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

Хотя текущий дизайн плохо пахнет, но это будет анализ, зависящий от бизнеса.
Замена BTW должна быть сделана с осторожностью по побочным эффектам с таблицей продуктов и ее использованием.

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