sql - 我是否应该创建一个新的数据库列?

标签 sql mysql database database-design

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

我有一张 table :

calculated_data (id, date, the_value, status)

状态是一个 bool 值。

我需要一个名为:the_filtered_value 的额外值

我可以像这样轻松获得它:

SELECT IF(status IS FALSE, 0, the_value) AS the_filtered_value FROM calculated_data

calculated_data表有数百万个条目,我显示 the_valuethe_filtered_value在图表和数据表中(使用 php)。


创建一个新列是否更好 the_filtered_valuecalculated_data表或仅使用 SELECT IF查询?

在“更好”中我看到:

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

感谢您的帮助!

最佳答案

不要添加列。相反,根据原始数据表创建一个 View ,并在 View 中根据您的表达式添加一个名为 the_filtered_value 的“虚拟”计算列。

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

 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

关于sql - 我是否应该创建一个新的数据库列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4596182/

相关文章:

mysql - 计算累积和并将其存储在另一列中

php - 如果最大时间戳大于其他最大时间戳

php - 从数据库中选择位置和喜欢

mysql - 从 SQL 表中查找唯一行,同时忽略重复行

mysql - 加入 mysql 中的所有月份不起作用

MySQL - 在存在 GROUP BY 的情况下删除 JSON_ARRAYAGG 中的重复结果

mysql - 如何从使用用户变量作为计数器的查询中获得正确的结果?

mysql - 根据近似值选择行

database - 如何防止覆盖共享约会簿中的记录?

mysql - 如何在mysql中存储变量列表