Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我是否应该创建一个新的DB列?_Sql_Mysql_Database_Database Design - Fatal编程技术网

Sql 我是否应该创建一个新的DB列?

Sql 我是否应该创建一个新的DB列?,sql,mysql,database,database-design,Sql,Mysql,Database,Database Design,我不知道在Mysql数据库中创建一个新列是否更好 我有一张桌子: 计算数据 (id、日期、_值、状态) 状态是一个布尔值 我需要一个名为:the_filtered_value 我可以像这样很容易地得到它: 选择IF(状态为FALSE,0,_值)作为从计算的_数据中筛选出的_值 computed_data表中有数百万个条目,我在图表和数据表中显示The_值和The_filtered_值(使用php) 最好在计算的\u数据表中创建一个新列过滤的\u值,还是只使用选择IF查询? 在“更好”中,我看到

我不知道在Mysql数据库中创建一个新列是否更好

我有一张桌子:

计算数据 (id、日期、_值、状态)

状态是一个布尔值

我需要一个名为:
the_filtered_value

我可以像这样很容易地得到它:

选择IF(状态为FALSE,0,_值)作为从计算的_数据中筛选出的_值

computed_data
表中有数百万个条目,我在图表和数据表中显示
The_值
The_filtered_值
(使用php)


最好在
计算的\u数据
表中创建一个新列
过滤的\u值
,还是只使用
选择IF
查询?

在“更好”中,我看到:

  • 性能更好
  • 更好的数据库设计
  • 易于维护


谢谢你的帮助

不要添加列。相反,基于原始数据表创建一个视图,并在视图中添加一个“虚拟”计算列,称为基于表达式的_filtered_值

通过这种方式,您可以轻松访问过滤后的值,而无需将该表达式的“逻辑”复制到代码中的不同位置,同时不存储任何派生数据。此外,在大多数情况下,您将能够直接对视图进行操作,就像它是一个表一样

 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

添加额外字段会增加应用程序的复杂性,但会使查询更容易(特别是在其他表上加入时)


我个人总是试图在数据库中尽可能地分离数据,并在我的应用程序中处理这种情况。使用MVC模式使这项任务更容易。

这在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

很难说。如果添加一个新列,则必须填充它(速度慢,但只执行一次)并在更新时维护它(可能会减慢其他例行程序的速度)。如果你在运行中计算它,它可能会减慢你的查询速度。老实说,我认为您最好的选择是现在在不使用列的情况下进行一些计时测试,添加列,然后进行更多计时和性能测试。如果将来我想在表中添加额外的列,我是否需要重新创建视图?如果您想在视图中看到该列(情况并非总是如此),然后必须重新创建视图定义以包含附加列。