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

发布于 2024-10-10 15:23:47 字数 704 浏览 2 评论 0原文

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

我有一张桌子:

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

status 是一个布尔值。

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

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

从计算数据中选择 IF(status IS FALSE, 0, the_value) AS the_filtered_value

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


创建新列 the_filtered_value 更好,还是仅使用 SELECT IF 查询更好?

calculated_data 表中 我看到“更好”:

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

感谢您的帮助!

I don't know if it is better for me to create a new column in my Mysql database or not.

I have a table :

calculated_data
(id, date, the_value, status)

status is a boolean.

I need an extra value named : the_filtered_value

I can get it easily like this :

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

The calculated_data table has millions of entries and I display the_value and the_filtered_value in charts and data tables (using php).


Is it better to create a new column the_filtered_value in the calculated_data table or just use the SELECT IF query?

In "better" I see :

  • better in performance
  • better in DB design
  • easier to maintain
  • ...

Thanks for your help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

荒芜了季节 2024-10-17 15:23:48

不要添加列。相反,根据原始数据表创建一个视图,并在视图中根据表达式添加一个名为 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

Do not add a column. Instead, create a VIEW based on the original data table and in the view add a "virtual" calculated column called the the_filtered_value based on your expression.

In this way you will have easy access to the filtered value without having to copy the "logic" of that expression to different places in your code, while at the same time not storing any derived data. In addition, you will be able to operate directly on the view as if it were a table in most circumstances.

 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
作业与我同在 2024-10-17 15:23:48

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

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

Adding the extra field adds complexity to your app but make queries easier (specially when joined on other tables).

I personally always try to keep the data as separated as possible on the database and I handle this cases on my application. Using a MVC pattern makes this task easier.

丑疤怪 2024-10-17 15:23:48

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

This works in MS SQL but I do not know if MySQL will support the syntax.

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

Select *, (flag*value) AS the_filtered_value from @deleteme
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文