多対多の関係がここでトリックを行いますが、これは私がやることです。 私は3つのテーブル、1)文字2)スキル3)character_skillを作成し、ここに非常に単純な例です:
CREATE TABLE hero
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
);
CREATE TABLE skill
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
)
CREATE TABLE character_skill
(
id INT PRIMARY KEY AUTO_INCREMENT,
charachter_id INT,
skill_id INT,
CONSTRAINT character_skill_character_id_fk FOREIGN KEY (charachter_id) REFERENCES hero (id),
CONSTRAINT character_skill_skill_id_fk FOREIGN KEY (skill_id) REFERENCES skill (id)
);
今、あなたは、skillテーブルの上の英雄テーブル上の文字、およびスキルを格納します、主人公のIDとスキルのIDでcharacter_skillテーブルにレコードを追加するスキルを主人公(Character)に割り当てるにはここでトリックです。この例では、以前に他のテーブルで作成された文字やスキルだけを追加できるようにする制約を追加しました。
そして、それを照会し、私は同じcharachter IDを持っているcharacter_skillテーブル上のすべてのスキルを探します、liksので:
select
skill.name
from skill
INNER JOIN character_skill
on character_skill.skill_id = skill.id
where character_skill.charachter_id = 3
これは非常に単純な例です。
「文字」名前が予約されているので、これは、character_skillテーブルに接続されている唯一のスキルは、ID 3
- 私は文字テーブルの名前のために英雄を使用して文字が使用することができる基本的な考え方であります
スキルを持つことができるクラスが1つだけの場合は、class_idをスキルテーブルのfkとして追加することができます。複数のクラスが同じスキルを持つことができる場合、class_id fkとskill_id fkを持つclass_skillテーブルが必要です。どのスキルがどのスキルを持つことができるかを設定するのに使用します。 – JimL
"多対多"関係。これには、2つのテーブルをリンクする中間テーブルを作成する必要があります。ちょうどGoogleのSQLは、多くの例と多くの多くに来る必要があります。 – mba12