前提
多対多のデータを作る設計について実現を悩んでいます。
何かご助言いただけますと幸いです。
実現したいこと
カードゲームのステータスと呼ばれる状態と、それぞれのステータスが発動している時の効果についてデータベースで持ちたいと思っています。
以下のようなステータステーブルと効果テーブルが定義されている場合に、
ステータスID | ステータス名 |
---|---|
1 | status1 |
2 | status2 |
3 | status3 |
4 | status4 |
効果ID | 効果名 |
---|---|
1 | 効果A |
2 | 効果B |
3 | 効果C |
4 | 効果D |
5 | 効果E |
以下のようなステータスの有効状態と効果のマッピング設定に従い、現在有効になっているステータスの組み合わせに適した効果を取得したいです。
キャラクターがステータスID=1のみの場合は、効果ID=1が有効化され、
キャラクターがステータスID=1, 2の場合は、効果ID=2が有効化され、
キャラクターがステータスID=1, 3の場合は、効果ID=3が有効化され、
キャラクターがステータスID=1, 3、4の場合は、効果ID=4, 5が有効化される、
ステータスは1つのみでも ある効果を有効化したりしますが、
他のステータスと組み合わさるとまた別の効果を有効化したりします。
このような、レコードを複数まとめて1つの意味を持たせるような形は、どのようにデータベース設計するのもでしょうか。
考えていること
ステータスとそれに紐づく効果が1対1の場合は、ステータスマスタから効果マスタを参照すればよいと思います。
ステータスID | ステータス名 | 効果ID |
---|---|---|
1 | status1 | 1 |
2 | status2 | 2 |
ステータスとそれに紐づく効果が1対nの場合は、以下のように中間テーブルで紐づければよいと思います。
ステータスID | 効果ID |
---|---|
1 | 1 |
2 | 2 |
今回のように、まずステータスの状態を組み合わせた上で、それに対して効果が決まる場合は、
以下のようにまずステータスのセットを定義して、
そのステータスセットに対して効果の参照を持たせることを考えました。
ステータスID | ステータスセットID |
---|---|
1 | 1 |
1 | 2 |
2 | 2 |
1 | 3 |
3 | 3 |
1 | 4 |
3 | 4 |
4 | 4 |
ステータスセットID | 効果ID |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
4 | 5 |
他に何か参考になるものがありましたらお教えください。
補足情報(FW/ツールのバージョンなど)
Oracle 12.1.0.1