概要
以下のようなテーブルを想定する。
userテーブル
id | name | pet |
---|---|---|
user1 | 太郎 | |
user2 | 花子 |
dogテーブル
id | name |
---|---|
dog1 | ポチ |
catテーブル
id | name |
---|---|
cat1 | タマ |
userテーブルのpetカラムに外部キーをdogテーブルのidとcatテーブルのidと2つ設定したいが、
外部キーは1つだけしか設定できない。
解決法1:参照先の親テーブルを作成する
userテーブル
id | name | pet |
---|---|---|
user1 | 太郎 | pet1 |
user2 | 花子 | pet2 |
petテーブル
id |
---|
pet1 |
pet2 |
dogテーブル
id | name |
---|---|
pet1 | ポチ |
catテーブル
id | name |
---|---|
pet2 | タマ |
petテーブルという親テーブルを作成し
userテーブルのpetカラムの外部キーを1つにする。
解決法2:子テーブルを作成する
userテーブル
id | name |
---|---|
user1 | 太郎 |
user2 | 花子 |
user_dogテーブル
id | dog |
---|---|
user1 | dog1 |
user_catテーブル
1 | 2 |
---|---|
user2 | cat2 |
dogテーブル
id | name |
---|---|
dog1 | ポチ |
catテーブル
id | name |
---|---|
cat1 | タマ |
user_dogテーブルとuser_catテーブルをというように外部キーによって異なるテーブルを作成する。
ちなみにテーブル情報を取得する際はuser_dogとuser_catをUNIONで和集合を作成しuserテーブルにJOINする。