2011-01-04 21 views
2

Mysqlデータベースに新しい列を作成するかどうかはわかりません。新しいDB列を作成する必要がありますか?

Iは、テーブルを持っている:

calculated_data (ID、日付、the_value、ステータス)

ステータスはブールです。

私は名前の余分な値を必要とする:the_filtered_value

私はこのように簡単にそれを得ることができます。

SELECT IF(ステータスがfalseで、0、the_value)the_filtered_value AS

calculated_data FROM

calculated_dataテーブルには何百万ものエントリがあり、チャートとデータテーブルにはthe_valuethe_filtered_valueが表示されます(phpを使用)。


それはcalculated_dataテーブルに新しい列the_filtered_valueを作成するか、単にSELECT IFクエリを使用する方が良いですか?

私が見る "より良い" では:


...

  • 性能に優れた
  • より良いDB設計
  • を維持しやすいおかげであなたの助けに!

+0

難しいと言えます。新しい列を追加する場合は、その列に値を設定して(遅くても1回だけ)、更新時に維持する必要があります(他のルーチンの手順が遅くなる可能性があります)。あなたがその場でそれを計算するなら、あなたの質問を遅くするかもしれません。私は正直なところ、あなたの最善の策は今や列なしでいくつかのタイミングテストを行い、列を追加し、さらにタイミングと性能テストを行うことだと思います。 – FrustratedWithFormsDesigner

答えて

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 
+0

将来、テーブルに余分な列を追加したい場合は、ビューを再作成する必要がありますか? – benjisail

+0

はい、そうです。 – Dave

+0

ビュー内のその列を表示したい場合(必ずしもそうであるとは限りません)、追加の列を含めるためにビュー定義を再作成する必要があります。 –

0

余分なフィールドを追加すると、アプリケーションが複雑になりますが、クエリが簡単になります(特に他のテーブルに結合した場合)。

私は個人的には常にデータをデータベースにできるだけ区切って保存しておきます。私はこのアプリケーションを自分のアプリケーションで処理します。 MVCパターンを使用すると、この作業が簡単になります。

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 
関連する問題