2015-04-07 2 views
0

У меня есть таблица в MYSQL с name, level и xp колонками, а другая с level, requiredxp. Я хочу сделать это, если пользователь достигнет requiredxp с их значением xp, они меняют свой уровень.Нужно ли использовать внешние ключи в этом случае?

Необходимо использовать первичные ключи и внешние ключи, чтобы сделать это автоматически, не отправляя информацию на сервер, проверьте наличие xp и установите функцию с множеством операторов if для проверки на requiredxp в другой стол, а затем, если он больше, чем пользователь xp, измените level?

Я относительно новым для MySQL так, пожалуйста, поправьте меня, если я ошибаюсь в чем-то :)

+0

В вашем прецеденте нет внешних ключей. В вашем случае использования у вас будет просто дополнительный запрос или соединение, чтобы определить уровень пользователя на основе требуемого xp и текущего xp пользователя. Вы не хотели бы хранить уровень пользователя отдельно в пользовательской таблице, потому что это может вызвать проблемы синхронизации, если вы когда-либо захотите изменить требуемый xp для уровня. – hofan41

+0

Это не дает строгого ответа на ваш вопрос, но, на мой взгляд, не полагайтесь на ограничения базы данных, чтобы обеспечить необходимую логику вашего приложения. У вас гораздо больше возможностей для обработки изменений и странных случаев (в вашем домене, возможно, вы добавляете магический элемент, который автоматически предоставляет дополнительный уровень) в коде, чем через ограничения базы данных. –

+0

Так оставьте его без каких-либо иностранных и первичных ключей, и ..? – pedritoalfonso

ответ

0

Вы могли бы иметь таблицу уровней с двумя колонками: уровень и requiredExp. Затем вторая таблица называется PLAYER со столбцами: имя, опыт, уровень.

Первичный ключ на первой таблице является уровнем. Первичным ключом во второй таблице является player_id или что-то в этом роде. Уровень столбца в таблице PLAYER является внешним ключом, ссылающимся на таблицу LEVEL. Таким образом, на вашем коде вы сможете спросить: если PLAYER x имеет EXPERIENCE y, то вы можете сделать обновление до уровня игрока в таблице PLAYER.

Надеюсь, это поможет!

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