私はusers
次の形式のテーブルを持っています:
users(id,name.....,settings)
settings
フィールドはタイプnumber
であり、設定のビットマスクが含まれています。
私は(とりわけ)次のようなクエリをサポートする必要があります:
- settings1、setting23、setting125を持つすべてのユーザーを検索します
今日、そのようなクエリは次のようになります。
select * from users where bit_and(settings,2^1+2^23+2^125) = 2^1+2^23+2^125
もちろん、これは完全な実装ではありませんが、すでに多くの時間このように機能しています。
問題は、今日、126の異なる設定があり、それがoracle 11g
ビット単位の演算の限界であるということです。つまり、新しい設定を追加することはできなくなります。
私はこの問題の代替解決策を見つけようとしています。明らかな方法は、フィールドを設定する代わりに、次のようにマッピングのテーブルを作成することです(ユーザー->設定)。
user_id | setting
128 | 1
128 | 23
128 | 125
しかし、上記のようなクエリは次のようになります:
select *
from users u1 join settings s1 on u1.id = s1.user_id and s1.setting = 1
join settings s2 on u1.id = s2.user_id and s2.setting = 23
join settings s3 on u1.id = s3.user_id and s3.setting = 125
見栄えが悪い...
したがって、誰かがこの問題の解決策/アプローチをアドバイスできる場合、それは非常に役立ちます...