複数のテーブルにわたる多対多の関係

マティアス・ランチュ

データベースの設計に問題があります。私は、ウェブサイトとデータベース設計の全体的な理解を深めるのに役立つ小さなプロジェクトとしてブラウザゲームを作成しています。
もちろん、自分で解決策を見つけようとしなかった場合は、ここに投稿しません(質問を検索すると、「多くの2つのテーブルを作成する方法」などの他の質問が見つかるものの1つです)

状況:
すべてデータベース上で実現されている建物/研究があります(多くのハードコーディングを防ぐため)

CREATE TABLE IF NOT EXISTS `structType` (
 `idStructType` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `idRace` int(11) NOT NULL,
  UNIQUE (name),
  FOREIGN KEY (idRace) REFERENCES race(idRace),
  PRIMARY KEY (idStructType)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

もちろん、それらの建物や研究のいくつかには技術ツリーがあります。
ここから私の問題が始まります。構造には、複数の調査だけでなく、要件として複数の構造を含めることができます。それはまた逆になります:
研究はまた必要条件として建物/他の研究を持つことができます。
そこで私は、次のような「多対多」の解決グループを作成し始めました。

CREATE TABLE IF NOT EXISTS `structtypeReqStructtype` (
`idStructType` int(11) NOT NULL,
`idStructType_required` int(11) NOT NULL,
`level` int(11) NOT NULL,
UNIQUE (idStructType, idStructType_required, level),
FOREIGN KEY (idStructType) REFERENCES structType(idStructType),
FOREIGN KEY (idStructType_required) REFERENCES structType(idStructType)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

結局、これは私に構造と研究の間の技術ツリーのためだけに4つのテーブルを残します、船と防御は言うまでもなく、それは私にとって悪いデザインのように感じます。
これを行うには、ほとんどもっと良い方法が必要です。私が思考プロセスをどの方向に進めるべきかについて少し助けを得ることができればとてもうれしいです。

ジャッケル

これはかなり自由形式の質問ですが、ここにいくつかの考えがあります。

  • 研究アイテム、建物、ユニットがあります。これらはすべて、私が想定する「調査/構築」する能力を共有しています(コスト、時間)。
  • 前提条件の概念があります。ユニットZを構築する前に、Xの調査/ Yの構築を行っている必要があります。

最もクリーンなデザインは、研究項目を含むすべての「ビルド可能」を含むテーブルになると思います。これは、コスト、ビルダー(buildablesテーブルへのリンク)、名前、およびIDである可能性があります。

この上にエクステンダーテーブルを追加できます。1つの「ビルド可能」を参照する「構造」テーブルを作成し、「構造」に必要なフィールドを追加します。

最後に、「前提条件」テーブルを作成できます。これには2つのビルド可能IDがあります。1つは問題のビルド可能ID用で、もう1つは必要なアイテム用です。これで、structToResearch、structToStruct、researchToStruct、researchToResearchに必要な個別のテーブルがなくなりました。

TL:DR; 多対多の関係が有意義に適用されるベーステーブルを作成します。ベーステーブルへの外部キーを保持するタイプごとの特定のテーブルを作成します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

多対多の関係テーブルにわたる一意の制約

分類Dev

EFコア-4つのテーブルにわたる多対多の関係

分類Dev

多対多の関係-複数のテーブルに行を表示する

分類Dev

複数のテーブルにまたがる多対多の関係を設計する方法

分類Dev

SQL多対多の関係、複数のテーブル

分類Dev

多対多の関係を持つ複数のテーブルからのSELECT

分類Dev

多対多のLaravel複数の中間テーブルとのEloquent関係

分類Dev

EF6多対多の関係、テーブルを結合する複数のテーブル

分類Dev

1対多の関係で複数のテーブルを結合する

分類Dev

1つのテーブルに対する2つの多対多の関係

分類Dev

EFを使用して1つのテーブルに複数の1対多の関係を追加する

分類Dev

Djangoの同じモデルに対する複数の多対多の関係

分類Dev

1対多のテーブル関係

分類Dev

複数のテーブルから選択-1対多の関係

分類Dev

多対多の関係で結合テーブルに挿入する

分類Dev

多対多の関係でテーブルに名前を付けるlaravel

分類Dev

多対多の関係にあるMySQLクエリテーブル

分類Dev

knex.jsの1つ(または複数)から多対多の関係で結合テーブルからデータをネストする方法は?

分類Dev

多対多の関係に基づいて複数のテーブルから選択するにはどうすればよいですか?

分類Dev

複数のフィルターを使用した1対多の関係に対するSQLクエリ

分類Dev

返された ID を使用して多対多の関係テーブルに挿入する

分類Dev

多対多の関係のためのEF7結合テーブルの重複エントリ

分類Dev

mysqlの多対多の関係テーブルの複数のテーブルにデータを入力/結合します

分類Dev

MS SQLServer-複数のテーブル間の多対多の関係を格納します

分類Dev

単一のテーブルに関連して複数の多対多を選択する方法

分類Dev

SQL:一般的な多対多の関係を持つ複数のテーブルを比較します

分類Dev

コアデータ:多対多の関係にある複数のアイテムの組み合わせのマッチング

分類Dev

2つの多対多テーブルを介したSQLAlchemyの関係

分類Dev

ピボットテーブルを使用したLaravelの多対多の関係

Related 関連記事

  1. 1

    多対多の関係テーブルにわたる一意の制約

  2. 2

    EFコア-4つのテーブルにわたる多対多の関係

  3. 3

    多対多の関係-複数のテーブルに行を表示する

  4. 4

    複数のテーブルにまたがる多対多の関係を設計する方法

  5. 5

    SQL多対多の関係、複数のテーブル

  6. 6

    多対多の関係を持つ複数のテーブルからのSELECT

  7. 7

    多対多のLaravel複数の中間テーブルとのEloquent関係

  8. 8

    EF6多対多の関係、テーブルを結合する複数のテーブル

  9. 9

    1対多の関係で複数のテーブルを結合する

  10. 10

    1つのテーブルに対する2つの多対多の関係

  11. 11

    EFを使用して1つのテーブルに複数の1対多の関係を追加する

  12. 12

    Djangoの同じモデルに対する複数の多対多の関係

  13. 13

    1対多のテーブル関係

  14. 14

    複数のテーブルから選択-1対多の関係

  15. 15

    多対多の関係で結合テーブルに挿入する

  16. 16

    多対多の関係でテーブルに名前を付けるlaravel

  17. 17

    多対多の関係にあるMySQLクエリテーブル

  18. 18

    knex.jsの1つ(または複数)から多対多の関係で結合テーブルからデータをネストする方法は?

  19. 19

    多対多の関係に基づいて複数のテーブルから選択するにはどうすればよいですか?

  20. 20

    複数のフィルターを使用した1対多の関係に対するSQLクエリ

  21. 21

    返された ID を使用して多対多の関係テーブルに挿入する

  22. 22

    多対多の関係のためのEF7結合テーブルの重複エントリ

  23. 23

    mysqlの多対多の関係テーブルの複数のテーブルにデータを入力/結合します

  24. 24

    MS SQLServer-複数のテーブル間の多対多の関係を格納します

  25. 25

    単一のテーブルに関連して複数の多対多を選択する方法

  26. 26

    SQL:一般的な多対多の関係を持つ複数のテーブルを比較します

  27. 27

    コアデータ:多対多の関係にある複数のアイテムの組み合わせのマッチング

  28. 28

    2つの多対多テーブルを介したSQLAlchemyの関係

  29. 29

    ピボットテーブルを使用したLaravelの多対多の関係

ホットタグ

アーカイブ