Как мне правильно построить структуру данных для игры?

Добрый день. Мне нужна базы данных и возник вопрос по структуре. Можно все поместить в одну таблицу(сообщения, достижения, перки, бонусы и многое другое), тогда столбцов у меня выходит порядка 25-27, либо разделить на таблицы по тем все это дело. Но тогда это усложнит обращение к данным да и регистрация игрока(создавать эти 3-5 таблиц), плюс проблема с джоинами какая то, не удобно в общем. Но по таблицам вроде как говорят будет производительнее. Как поступить, какой вариант выбрать?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 2
@acwartz
Тут должна быть ваша реклама.
У вас проблема не с SQLite а целиком со знаниями баз данных и SQL в частности.

Можно все поместить в одну таблицу(сообщения, достижения, перки, бонусы и многое другое), тогда столбцов у меня выходит порядка 25-27

Нельзя так, это все разные сущности, которые вы захотите расширять новыми полями и что более важно - связывать их с новыми сущностями, например дать игрокам возможность групповых чатов, или например вложения в сообщения лепить или ещё бог весть что, и не сможете этого сделать после выхода вашего ПО в свет. Придется писать очень замудреные скрипты по миграции данных в т.ч. тех которые и не менялись даже.

Пользователи это таблица Users где есть поле ID котрое получает значение при вставке записи и это значение не меняется.
Есть сообщения это таблица Messages.
где есть Autokey получающее значение при вставке записи, есть поле-индекс DateCreate с датой и временем создания сообщения, есть поле Message - текст сообщения, так же поля От кого (ссылка на Users.ID) и кому (Users.ID)

Есть ачивки, таблица Achivements:
Поле UserID (Users.ID) связь с тем кто ачивку получил
Поле даты и времени получения,
поле идентификатора ачивки
поле описания ачивки
поле с картинкой ачивки

Бонусы, таблица Bunuses:
Поле UserID (Users.ID) связь с тем кто бонус получил
Поле даты и времени получения,
поле идентификатора бонуса
поле описания бонуса
поле с картинкой бонуса
поле обозначающее позитивный или негативный бонус
поле даты и времени завершения действия бонуса, если NULL то бонус вечный

Таблица с перками - Perks:
Поле UserID (Users.ID) связь с тем кто бонус получил
Поле даты и времени получения,
поле идентификатора перка (PerkID)

это все легко расширяется новыми полями и если надо обрастает новыми связями с новыми изменениями.
А если вы все в кучу кидаете, на кой вам вообще база данных?
загоняйте все в json/xml.
Ответ написан
@romicohen
Системный Архитектор
Можешь почитать например это: https://habr.com/ru/post/193756/

В любом случае, если ты хочешь стать программистом, тебе ПРИДЕТСЯ понять, что такое "нормализованная база данных", либо забить на программирование.

Ну, просто потому, что это такие же основы, как, циклы, массивы, условные операторы, и т.п.

Не хочешь учить SQL? Не вопрос: возьми какой-нибудь Laravel и используй ORM Eloquent - может это тебе попроще будет.

Но в любом случае основы хранения данных в базе лучше-таки понять.

А то будешь как мой нынешний тимлид говорить потом подчиненным: - Вы зачем столько лишних таблиц создаете? Они тормозят базу!

//а там по факту таблицы были для отношений многие-ко-многим )))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы