我不知道在我的Mysql数据库中创建新列是否更好。
我有一张桌子:
calculated_data (id,date,the_value,status)
status是一个布尔值。
我需要一个名为the_filtered_value
我可以很容易地得到它:
SELECT IF(status IS FALSE,0,the_value)AS the_filtered_value FROM calculated_data
calculated_data
表有数百万个条目,我在图表和数据表中显示the_value
和the_filtered_value
(使用php)。
在the_filtered_value
表格中创建新列calculated_data
或仅使用SELECT IF
查询是否更好?
在“更好”中,我看到:
感谢您的帮助!
答案 0 :(得分: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
答案 1 :(得分:0)
添加额外字段会增加应用程序的复杂性,但会使查询更容易(特别是在其他表上加入时)。
我个人总是试图将数据尽可能地分开保存在数据库中,并在我的应用程序中处理这种情况。使用MVC模式可以使这项任务更容易。
答案 2 :(得分: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