前の演習では、キャラクター名を重複させないことで、名前が変わっても 1 行を直すだけで済むと説明しました。
ただ、あの例は少し不自然でした。番組名と俳優名のほうは重複していたからです。
どの名前も重複させないためには、テーブルをもっと増やし、結合を複数回使う必要があります。
ここにはキャラクター、番組、俳優のテーブルがあります。これらは「もの」(エンティティとも呼びます)を表すテーブルです。
それに加えて、character_tv_show と character_actor という関連テーブルがあり、2 つのエンティティの関係を表しています。
これは関係を柔軟に表せる方法です。複数の番組に登場するキャラクターもいれば、複数のキャラクターを演じたことで知られる俳優もいるからです。
各キャラクター名とその番組名を得るには、次のように書けます。
SELECT character.name, tv_show.name
FROM character
INNER JOIN character_tv_show
ON character.id = character_tv_show.character_id
INNER JOIN tv_show
ON character_tv_show.tv_show_id = tv_show.id;
2 回の結合を使って、各キャラクター名とそれを演じる俳優を対応づけられますか? 次の列を選択してください: character.name、actor.name