もくじ
リレーション
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することで多対多をシンプルに表現出来ますね。