Я создаю приложение с помощью android studio-java, firestore и firebase auth. Мне нужна помощь в том, как сохранить данные.
В приложении 3 игры, цель - спасти пользователей. счет+дата (ДД/ММ/ГГ для каждого счета) и высокий балл для каждой игры. мне нужно сохранить последние 5 баллов для каждой игры. Моя первая попытка - сделать это с 1 коллекцией под названием «пользователи».
класс пользователя:
private String name;
private String email;
private HashMap<Integer, Date> game1_Scores;
private HashMap<Integer, Date> game2_Scores;
private HashMap<Integer, Date> game3_Scores;
private int game1_HighScore;
private int game2_HighScore;
private int game3_HighScore;
мой вопрос:
Любая помощь будет оценена.
Обновлено: мой скриншот БД
p.s. Как управлять порядком полей при добавлении нового документа пользователя.
Я рекомендую вам моделировать его следующим образом:
private String name;
private String email;
// If the number of games grows too much, new modeling will be necessary.
private List<GameScore> game1Scores;
private List<GameScore> game2Scores;
private List<GameScore> game3Scores;
private int game1HighScore;
private int game2HighScore;
private int game3HighScore;
GameScore будет классом с полем GameName или GameId, счетом и, возможно, createdAt для установки времени игры.
После этого рекомендую сохранить все совпадения в коллекцию. Может так:
Коллекция: спички
В этой коллекции вы будете сохранять GameScore и идентификатор игрока для каждого матча.
Всякий раз, когда документ вставляется в коллекцию матчей, вы запускаете облачную функцию для обновления рейтинга игрока и глобального рейтинга.
Глобальный рейтинг можно обновлять каждые несколько минут, чтобы не писать много в одном и том же документе.
Не забывайте правильно запрашивать, чтобы избежать большого количества чтений.
- каков наилучший способ переопределить старую оценку новой оценкой?
В текущей структуре данных на вашем снимке экрана вы можете просто сравнить оценку выходов в клиенте и посмотреть, нужно ли обновлять оценки.
- я хочу иметь возможность показать в приложении список рекордов, от большего к меньшему от всех пользователей. как мне это сделать ?
- я должен сделать "счетов" коллекции. как подключить счет к пользователю?
Вы можете поместить оценку и идентификатор пользователя в один и тот же документ, а затем поместить все документы в одну и ту же коллекцию «оценок», как вы сказали. Если конкретному пользователю нужно получить три лучших результата, просто запустите запрос в этих двух полях. Вы также можете использовать группу сбора для достижения этого в зависимости от вашего случая.
Вам нужна схема базы данных или структура класса? Если это последний, отредактируйте свой вопрос и добавьте структуру своей базы данных в виде снимка экрана.