У меня есть общий вопрос о дизайне таблицы базы данных 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
.
Итак, вопрос в том, куда идти? Дисковое пространство не имеет значения, скорость запросов является наиболее важным аспектом.
Благодарим за внимание.