Должен ли я создать новый столбец БД или нет? - PullRequest
2 голосов
/ 04 января 2011

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

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

computing_data (id,date, the_value, status)

status является логическим значением.

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

Я могу легко получить его следующим образом:

ВЫБРАТЬ ЕСЛИ (статус ЛОЖЬ, 0, the_value) AS the_filtered_value FROM Расчетные_данные

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


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

В "лучше" я вижу:

  • лучше в производительности
  • лучше в дизайне БД
  • проще в обслуживании
  • ...

Спасибо за помощь!

Ответы [ 3 ]

3 голосов
/ 04 января 2011

Не добавлять столбец.Вместо этого создайте 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 голосов
/ 05 января 2011

Это работает в 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
0 голосов
/ 04 января 2011

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

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

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