Какой правильный дизайн данных для записи результатов общей игры для двух игроков? - PullRequest
2 голосов
/ 22 января 2011

Предположим, в игре два игрока.Каждый игрок имеет счет и выигрывает наибольшее количество очков.Таблица пользователей самоочевидна.Первый дизайн, о котором я подумал:В приведенной выше таблице один идентификатор пользователя будет распределен между user1_id и user2_id.Казалось бы, требуется несколько запросов и кажется грязным.Другой способ - сохранить отдельную таблицу статистики

user_id, winloss

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

Ответы [ 2 ]

3 голосов
/ 22 января 2011

Как насчет одной записи для каждого пользователя в матче? Первичный ключ - это комбинация match_id и user_id. Также включите логическое winner поле.

match_id, user_id, счет, победитель

Хотя это не является частью вашего требования, это также легко масштабируется до большего числа игроков.

Запрос% выигрыша - это просто вопрос:

SELECT winner, count(winner) FROM match_results
WHERE user_id = (some_user) GROUP BY winner;
0 голосов
/ 22 января 2011

У меня будет пользовательская таблица (очевидно), таблица соединения с именем Match с идентификатором совпадения и транзакционная таблица, которая будет иметь user_id, match_id, score. Так что для конкретного совпадения будет две записи, соответствующие двум пользователям.

Кроме того, я также буду хранить fk-ссылку победившего user_id в таблице соответствий. Просто быстрый способ найти% выигрыша для каждого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...