MySQL, SQL, SEノウハウ

中間テーブル 関連実体 intermediate table

 

リレーション

AとBのテーブルがあった時に、AのレコードがBのレコードにいくつかリレーション(関係)を持つかを考える。

 

 

1対1の関係

将来も1対1のリレーションであるなら、そもそもテーブルを分割する必要がない

 

 

1対多の関係

通常のリレーション

playerテーブルのサトシくんはポケモンをたくさん所有しています。

 

更に詳しく説明

playerテーブルのレコードのサトシはたくさんポケモンと関係を持てるが、pokemoテーブルのポケモン達はご主人様を一人しか選べない。

  • playerのレコードはpokemonのレコードと関係を持てる(関係を持たないレコードがあっても良い)
  • pokemon側のレコードはかならずplayerのレコードと1つで繋がる(関係を持たないレコードがあっても良い)

 

  • ユーザ(1)と都道府県(多)
  • 顧客(1)と注文(多)
  • ブログ記事(1)とブログ投稿者(多)

 

 

多対多の表現

プレイヤーとポケモンが互いにシェアされて多夫多妻な村社会を形成。多対多の関係になっています。

誰が誰の主従なのか複雑になっています。このまま2つのテーブルで表現すると、重複し合って記述するしかなく、多対多を上手に表現できません。

 

  • カテゴリとブログ記事
  • 権限とユーザ

 

 

そこで、中間テーブル!combinationテーブルを作成

これで表現出来ます。

 

playerとcombinationで1対多、pokemonとcombinationで1対多として、
3つのテーブルをJOINすることで多対多をシンプルに表現出来ますね。

 

YouTube

【寿司打チャレンジ】天才プログラマーがタイピングに挑戦!

自責? おまえ嘘つくなよ

フリーターから正社員 インフラは2か月!

インフラにプログラミングは必要 SREのすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)