Проектирование структуры базы данных для игры. Помощь в таблице уровней и урона

Fratyr

Новичок
Проектирование структуры базы данных для игры. Помощь в таблице уровней и урона

Здравствуйте товарищи.

У меня есть вопрос по проектированию схемы базы данных.
Я учу Азы РНР и ко. последством написания 2-х проектов, один из них Онлайн игра (РПГ).

На данный момент создаю схему базы данных для первоначального заполнения.
Вопросы возникли и гугл не ответит, а только человеческий мозг может анализировать сопоставленный вопрос и дать правильный ответ. Надеюсь на подсказки.

Вопрос:
Допустим имеется таблица player_level, содержание будет примерно таким:
'id'
'nickname'
'level'

Увеличить то уровни игроку я смогу, но уровень просто так не увеличивается, должна быть схема опыта который нужно набрать для определенного уровня.
Как вы видите реализацию такой таблицы? Где мне хранить кол-во опыта для опр. уровня?
т.е я немного тут запутался. Игрок ведет бой, побеждает, получает 50 опыта, имеется на данный момент скажем 150, до уровня надо 201. После боя пишем в базу 50+150 = 200. это скажем грубо 99.9%
Сделал еще бой, получил 50, 50+200 = 250 - 201 = 49 опыта на новом уровне, уровень добавился +1 и теперь требуется не 201 опыта, а ... например 400.
Так вот я и думаю, куда все эти параметры записывать? где-то в базе держать? как база знает сколько опыта надо до такого-то уровня и.т.д?

Надеюсь на какую-нибудь помощь.
 

Fratyr

Новичок
Угу. А где хранить таблицу опыта например? в константах?
 

Baranov_Dron

Новичок
2 таблицы, первая таблица опыта talble_opyta
вторая player_level
ибо я думаю возможно изменение данных в талице опыта...
второй вариант это как ты сказал константы
третий если ООП программирование то как член класса, масссив с таблицей опыта и тд...
 

Dankr

Новичок
Во-первых, я думаю будет лучше, если таблица player_level будет выглядеть так:
'id'
'player_id'
'level'

А опыт лучше хранить так, как сказал Baranov_Dron, в отдельной таблице - player_experience:
'id'
'player_id'
'experience'
Когда значение перевалит какой-то рубеж(проверяй это после боя, когда обновляешь опыт), например 201 - обновляй уровень.
 

Fratyr

Новичок
Сделал 3 таблицы.

player_level
id
level
up - между уровнем имеется 5 апов. если апы уровня 2, то в базу заносится значение 21 22 23 24 25.

player_exp
id
exp
to_level - сколько осталось до уровня

exp_table
id
level
exptolvl
up
exptoup
___ таблица содержит уровень и кол-во экспы чтобы его достичь

Так будет нормально?
 

korchasa

LIMB infected
Зачем так все усложнять?

1. Схема опыт-уровень это статическая информация, и выносить ее в таблицу смысла не имеет, ибо мы будем иметь еще один запрос к базе непонятно ради чего.

2. Одно из основных правил нормального проектирования БД это объединять данные, которые запрашиваются вместе и относятся к одной сущности. Вынесение информации об опыте и уровне пользователя в отдельную таблицу смысла не имеет, ибо эта информация нам нужна всегда(ну или почти), когда мы выбираем пользователя. Проще хранить это в таблице player.

3. Я бы вообще пока не стал хранить информацию об уровне пользователя, ибо во-первых схема опыт-уровень на ранней стадии проекта может меняться, и придется писать какой-то скрипт, который будет пересчитывать уровни.

Я бы пока сделал так:

player
-- id
-- exp

а потом, когда схема устаканиться, добавил бы level и up
 

Fratyr

Новичок
korchasa
Cхема на то и сидит в ДБ, чтобы быть динамичной, это одна из задумок. Разве что можно будет эти три таблицы в две-одну соединить или засунуть таблицу в .XML

Beavis
Может вы знаете название? У меня есть сорс коды бэта игры Территория, но такое маньячество которое они там наделали мне не по душе.;)
 
Сверху