2011-01-04 2 views
2

Я не знаю, лучше ли мне создать новый столбец в моей базе данных Mysql или нет.Должен ли я создать новый столбец базы данных или нет?

У меня есть таблица:

calculated_data (идентификатор, дата, the_value, статус)

статус является логическим.

мне нужно дополнительное значение с именем: the_filtered_value

я могу получить его легко, как это:

ВЫБРАТЬ IF (статус FALSE, 0, the_value) КАК the_filtered_value ОТ calculated_data

Таблица calculated_data имеет миллионы записей, и я отображаю the_value и the_filtered_value в таблицах и таблицах данных (используя php).


ли лучше создать новый столбец the_filtered_value в calculated_data таблице или просто использовать SELECT IF запрос?

В "лучшем" Я вижу:

  • лучше в исполнении
  • лучше DB дизайн
  • легче поддерживать
  • ...

Спасибо для вашей помощи!

+0

Трудно сказать.Если вы добавите новый столбец, вам придется заполнить его (медленный, но только один раз) и поддерживать его при обновлении (может замедлить другие рутинные процедуры). Если вы рассчитываете его на лету, это может замедлить ваши запросы. Я честно считаю, что ваш лучший выбор - сделать некоторые тесты времени без столбца, добавить столбец, а затем сделать больше тестов времени и производительности. – FrustratedWithFormsDesigner

ответ

3

Не добавляйте столбец. Вместо этого создайте VIEW на основе исходной таблицы данных и в представлении добавьте «виртуальный» вычисленный столбец с именем the_filtered_value на основе вашего выражения.

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

CREATE VIEW calculated_data_ex (id, date, the_value, status, the_filtered_value) 
    AS SELECT id, date, the_value, status, IF(status IS FALSE, 0, the_value) 
     FROM calculated_data 
+0

Если в будущем я хочу добавить дополнительный столбец в таблицу, мне придется заново создать представление? – benjisail

+0

Да, вы бы. – Dave

+0

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

0

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

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

0

Это работает в MS SQL, но я не знаю, поддержит ли MySQL синтаксис.

declare @deleteme table (value int, flag bit) 
insert @deleteme 
Values 
(1,'False') 
,(2,'true') 

Select *, (flag*value) AS the_filtered_value from @deleteme 
Смежные вопросы