質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

受付中

レコードを複数まとめて意味を持たせるようなデータベース設計について

mjnk_ct
mjnk_ct

総合スコア5

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

1回答

0グッド

2クリップ

276閲覧

投稿2022/11/27 05:20

編集2022/12/02 21:25

前提

多対多のデータを作る設計について実現を悩んでいます。
何かご助言いただけますと幸いです。

実現したいこと

カードゲームのステータスと呼ばれる状態と、それぞれのステータスが発動している時の効果についてデータベースで持ちたいと思っています。

以下のようなステータステーブルと効果テーブルが定義されている場合に、

ステータスIDステータス名
1status1
2status2
3status3
4status4
効果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
1status11
2status22

ステータスとそれに紐づく効果が1対nの場合は、以下のように中間テーブルで紐づければよいと思います。

ステータスID効果ID
11
22

今回のように、まずステータスの状態を組み合わせた上で、それに対して効果が決まる場合は、
以下のようにまずステータスのセットを定義して、
そのステータスセットに対して効果の参照を持たせることを考えました。

ステータスIDステータスセットID
11
12
22
13
33
14
34
44
ステータスセットID効果ID
11
22
33
44
45

他に何か参考になるものがありましたらお教えください。

補足情報(FW/ツールのバージョンなど)

Oracle 12.1.0.1

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Orlofsky

2022/11/27 06:13

質問が抽象的過ぎて想像するのが難しいです。 質問は修正できます。 ステータスや効果をもっと具体的な内容で提示できたほうが適切なコメントが付くのでは?
dameo

2022/11/27 09:31 編集

status1, status2, status3を持つ場合は、効果Aと効果Bが同数満たしていますが、何を付与すればいいのでしょうか?
mjnk_ct

2022/12/02 21:35

Orlofskyさま 申し訳ありません。質問を修正しましたが、伝わる内容になっているでしょうか。 dameoさま その場合は、効果Aも効果Bも付与したいと考えています。
dameo

2022/12/02 23:35

すみませんが、この一例を聞いたわけではなく、その説明ができるように質問に書かれているルール(実現したいこと)を変更してほしいのです。一言で言えば仕様が不明確で実装不可能という状態です。

回答1

0

こんな感じでどうでしょう?

行動テーブル(仮称)
列は、行動ID(プライマリキー), 優先順位, 行動名

行動-ステータス 中間テーブル
行動ID, ステータスID の複合複合プライマリキーのみ

行動-効果 中間テーブル
行動ID, 効果IDの複合複合プライマリキーのみ

投稿2022/11/28 03:32

hihijiji

総合スコア4150

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

mjnk_ct

2022/12/02 21:28

回答ありがとうございます。 やはり、ステータスー行動、効果ー行動、というように間に一つ別の定義(ここでは「行動」)をはさむ必要がありますでしょうか。 質問追記前のつたない状態で回答いただきありがとうございます。参考に致します。
hihijiji

2022/12/03 05:59

ステータスの組み合わせに対して、効果の組み合わせが必要なのだから当然それを保持するテーブルが必要です。 その保持するテーブルに優先順位を持たせれば組み合わせセットの優先順位を付けられます。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。