2017-01-26 5 views
1

Я работаю над плагином Wordpress, который предназначен для создания символа для пользователя Wordpress с использованием MYSQL. Я новичок в php и sql. В настоящее время я борется с двумя таблицами в моей БД. Таблица классов и таблица навыков.SQL-ролевая игра - таблица классов, ссылающаяся на таблицу навыков

Таблица классов состоит из различных классов, которыми может быть символ. Например; Воин, Паладин или Волшебник.

Таблица навыков состоит из различных навыков, которые может использовать персонаж. Например; молнии, убийства или исцеления.

Я хочу, чтобы эти таблицы имели отношение друг к другу. Только определенные навыки из полученных навыков могут использоваться классом из таблицы классов. Так, например, класс Паладина может выбирать только умение исцеления, а класс Воина может использовать навык убийства. Я просто не уверен, что использовать для успешной работы.

Я не уверен, есть ли условие, которое можно использовать в таблице навыков, которая позволяет определенному классу ссылаться на определенные навыки. Может ли кто-нибудь указать мне в правильном направлении? Спасибо за любую помощь заранее!

+1

Если только один класс может иметь навык, вы можете просто добавить class_id в качестве fk в таблице навыков. Если для нескольких классов может быть один и тот же навык, вам нужна таблица class_skill с class_id fk и skill_id fk, которые вы используете для определения того, какой класс может иметь какие навыки. – JimL

+1

Похоже, вы хотите использовать так называемое «много-ко-многим», отношения. Это предполагает создание промежуточной таблицы, которая связывает ваши две таблицы. Просто Google sql много для многих примеров, и много должно появиться. – mba12

ответ

1

Отношения «многие ко многим» сделают трюк здесь, вот что я сделаю. Я хотел бы создать 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) 
); 

Теперь вы будете хранить символы на столе героя и навыки на столе навыков, теперь вот трюк, чтобы назначить герою (персонажу) навык, который вы добавите в таблицу character_skill с идентификатором героя и идентификатором навыка. В этом примере я добавил ограничение, которое позволит вам добавлять символы и навыки, которые ранее были созданы в других таблицах.

Тогда запрос, я буду искать все навыки на столе character_skill, которые имеют один и тот же идентификатор charachter, 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 можно использовать по характеру с идентификатором 3

  • Я герой для имени таблицы символов, так как название «характера» зарезервировано
+0

Полагаю, я понимаю, поэтому таблица character_skill в основном представляет собой таблицу перекрестных ссылок, которая сдерживает определенные классы от выбора определенных навыков. –

+0

Таким образом, существует много-много отношений. –

+0

Неправильно, вы можете перекреститься с навыками с персонажем. Надеюсь, это сработает для вас ;-) –

Смежные вопросы