3

多対多の関係を理解し​​ようとしているのですが、私の趣味のプロジェクトで頭が混乱し続けています。

ゲームのデータベースには、現在、すべての列と値を保持する単一のテーブルがあります。

GAMES
id   name   alt_name1   alt_name2   type                length    group_size
----------------------------------------------------------------------------
1    foo    foozoo      NULL        ice, team, silly    s, m      s, l, xl

ただし、検索を実装するときに、小グループ向けの中程度の長さのばかげたゲームを特に探しているときに問題に遭遇しました。

私が理解している限り、正規化するために、name(1 つの ID から最大 3 つの名前) の新しいテーブルを作成します。typelengthおよびgroup_sizeは多対多の関係であるため、それらの値のテーブルと、ゲームとの関係を保持するテーブルを作成する必要があります。

type
games_type
length
games_length
group_size
games_group_size

これらすべてのテーブルを作成するよりも良い方法はありますか?

ご感想ありがとうございます!

4

2 に答える 2

3

多対多のリレーションシップがある場合は常に、異なる値を含む 2 つのテーブルが必要です。次に、2 つを関連付ける別のテーブル (ジャンクション テーブル) が必要です。

非関連レコードを含むテーブルでは、他のすべての列は主キーに固有のプロパティを記述する必要があります。説明的な値が 1 つのテーブルに複数回出現する可能性がある場合は、おそらく独自のテーブル (ルックアップ テーブル) が必要です。

例えば:

Items_A
id,name

Items_B
id,name

A_with_B
item_a_id,item_b_id

これの一般的な使用法は、次のようなユーザーとグループです。

Users
id,name

Groups
id,name

Group_Users
user_id,group_id

この例を拡張してルックアップ テーブルを含めると、次のようになります (ユーザーは 1 つの場所にしか存在できませんが、複数のグループに属することができます)

Users
id,name,location_id

Locations
id,name

Groups
id,name

Group_Users
user_id,group_id
于 2013-01-23T18:20:43.210 に答える
1

その通りです。 、 、およびテーブルを使用して多対多の関係を効果的に分解しているため、ゲームに複数のタイプ、長さ、およびグループ サイズを持たせることができます。games_typegames_lengthgames_group_size

于 2013-01-23T18:20:36.833 に答える