ユーザー向けのテーブルを作成し、その目的を追跡したいと考えています。目標自体は、1000ではないにしても、100のオーダーであり、独自のテーブルに保持されますが、誰がそれらを完了したかはわかりません。使用可能な目標を定義するだけです。
Objective:
ID | Name | Notes |
----+---------+---------+
| | |
これで、Java環境では、ユーザーは目的のためにjava.util.BitSetを使用できるようになります。だから私は行くことができます
/* in class User */
boolean hasCompletedObjective(int objectiveNum) {
if(objectiveNum < 0 || objectivenum > objectives.length())
throw new IllegalArgumentException("Objective " + objectiveNum + " is invalid. Use a constant from class Objective.");
return objectives.get(objectivenum);
}
内部的には、BitSetはlong[]を使用してストレージを実行します。私のダービーデータベースでこれを表す最良の方法は何でしょうか?それらは実際にはユーザーの要素であるため、可能な限りAppUserテーブルの列に保持することをお勧めします。
Derbyは(私の知る限り)配列をサポートしていません。列の制限はわかりませんが、特にデータベースに次のようなクエリを実行しないことがわかっているため、1000列の場合は問題があるようです。
SELECT *
FROM AppUser
WHERE AppUser.ObjectiveXYZ
保存とビットセットへのマーシャリングの両方のオプションは何ですか?java.util.BitSetの実行可能な代替手段はありますか?一般的なアプローチに欠陥はありますか?私はアイデアを受け入れています!
ありがとう!
*編集:可能であれば、テーブルの変更ではなく、データの変更のみで目標を追加できるようにしたいと思います。しかし、繰り返しになりますが、私はアイデアを受け入れています!