0

単純化された状況:私はテーブルを持っています。たとえば、主キーheader_IDと他のいくつかの属性を持つヘッダーと呼びましょう。

これらの行に異なるフィルターでフラグを立てる必要があります。事前にいくつあるかはわかりませんが、ほとんどの行で0〜10になります。

そこで、属性h_IDとfilter_IDを使用して別のテーブル(フィルターと呼びましょう)を作成することを考えました。したがって、このテーブルに次のようなものがある場合は、header_ID = 2がフィルター1および3でフラグが立てられ、header_ID=3がフィルター1でフラグが立てられたことを意味します。

2 1 2 3 3 1

次に、filter_IDを持つ別のテーブルと、フィルターを説明するテキストを持つ属性。

私がよく行う基本的なクエリは、たとえば、「フィルターのないヘッダーから特定の行を取得する」です。これは、これらのタイプのクエリを効率的にする設計ですか?もしそうなら、どのように?

filter_ID列をヘッダーに追加し、header_ID列をfilter_ID主キーに置き換えることを考えていました。フィルターが割り当てられていない場合、ヘッダーの値はNULLになります。それはより良い考えですか?

ご意見ありがとうございます

4

1 に答える 1

1

左結合を実行してからフィルタリングして、左側のテーブルにnull値を持つ行のみを取得できます。

SELECT [cols]
FROM header
LEFT JOIN filters 
ON header_id=h_id
WHERE [filter col] IS NULL

テーブルの説明からすると、ヘッダーテーブルにフィルター列を含めるのはかなり悪い考えです。それはいくつかのかなり非効率的なクエリにつながるでしょう。

于 2012-08-29T18:50:41.980 に答える