2012-01-17 5 views
2

複数のオプションを1つのフィールドに保存して、各オプションの列を作成する必要がなくなりました。選択可能なオプションは時間の経過とともに増加するので、列を使用することはおそらくこれを実行する最善の方法ではありません...一度に選択できるオプションが多すぎるため、データベースに保存できません。複数のオプションを1つのフィールドに保存

私は以下の解決策を考え出し、これを行うためのよりよい方法があるのか​​、それとも誰かが問題を見ることができるかどうか疑問に思っていました。私はテストをして、それは私が選んだバリエーションのためにうまくいくようです。

方法: すべてのオプションに一意の素数を割り当て、ユーザーが希望のオプションを選択し、選択したオプションの対応する素数を掛けて、結果の値をフィールドに保存させます。 オプションが選択されているかどうかをチェックするとき: 保存された番号が残っていない素数で割り切れる場合、その素数の対応するオプションがユーザーによって選択されました。 例:

  • 月曜日2火曜日3、水曜日5、木曜日7、11日金曜日、 土曜日13、日曜日17

選択: 月曜日、金曜日、日曜日 2 * 11 * 17 = 374

**Monday** = 374/2=187, (Or 374 % 2 = 0) 
Tuesday = 374/3=124.6666666666667, 
Wednesday = 374/5=74.8, 
Thursday = 374/7=53.42857142857143, 
**Friday** = 374/11=34, 
Saturday = 374/13=28.76923076923077, 
**Sunday** = 374/17=22 
+0

あなたは現在、あなたが現在持っていて将来どのくらいのオプションを(タイトルに書かれているように)? – shahkalpesh

+0

現在、7つのオプションがあります。私はデータベースのメンテナンスルーチンにこれを使用していますので、問題の数が増えるにつれて何が増えるかを今は分かりにくいです。そのために、この方法に問題があることが分かりました大規模な土地アップ。ちょうどチェックされ、これは29でオーバーフローします。したがって、これは少数のオプションでのみ機能します。 – MarcoF

答えて

2

私はあなたがデビット単位のアクセス権のパターンを使用することができると思います。基本的には、各オプションを2の累乗として格納します。この方法では、すべての可能な組み合わせを1つの整数フィールドに含めることができます。ちょうどgoogleソリューションを実装するビット単位の猶予

0

あなたのアプローチは特にわかりにくいようです。 複数のデータを1つの列に格納する必要がある場合は、XMLの使用を検討してください。 XML型のフィールドでは、構造化されたデータを比較的クリーンな形式で格納し、XQueryを使用して、少なくとも他のSQLクエリと互換性のある方法でクエリを実行して使用することができます。

3

行を使用します。これは標準的な多対多関係のようです。

オプションを保持するテーブルを作成し、元のテーブルのオプションとオプションを関連付ける別のテーブルを作成します。

さらに読書:http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php

+2

これはあなたの要件を満たしている場合、これが最良の方法です。私のXML答えは機能しますが、適切なリレーショナルデザインは確かに優れています。 – mwigdahl

+0

私は同意します。私たちは、私たちのサーバー全体にこの種のもののためのテーブルを使用しています。問題は現在、私たちのデータベースは、テーブル、プロシージャ、関数、さらには使用していないことがわかっているテーブルの列を結合することで謎に包まれています。私は今開発するときに物事を最小限に保ち、これが必要なオブジェクトのいくつかを減らしたと感じました。 – MarcoF

関連する問題