Рейтинг ELO — MySQL дизайн

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

Пока все отлично работает.
Сейчас я думаю добавить систему рейтинга ELO.

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

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

Итак, как сделать дизайн базы данных, чтобы, если я удалю какую-либо игру из середины записей, рейтинг был пересчитан правильно?

Наглядный пример моей проблемы я не могу решить (расчет рейтинга просто информативен):

 Player1 (rating 1200), Player2 (1200)
Game1 played, player1 wins.
Rating after game: P1:1231, P2:1169
Game2 played, Player1 wins.
Rating: P1:1259, P2:1141
Game3, Player2 wins
Rating: P1:1220, P2:1180

Итак, я понимаю, что в игре 2 есть ложные данные, и я хочу их удалить.

Что должно произойти?
Удаляю game2, тогда скрипт должен изменить рейтинг как
Получите рейтинг обоих игроков от одной игры до, от после игры1. что будет P1: 1231, P2: 1169
А затем пересчитать весь рейтинг после удаленной игры.
Так Game3, игрок выигрывает, рейтинг должен быть P1: 1198, P2: 1202

Я не могу просто удалить game2 и его различия в рейтинге … рейтинг должен быть пересчитан из предыдущей игры и для всех после сыгранных игр.

Сложнее становится, если есть 3 или более игроков, и они играли в игры после того, который я хочу удалить.
Из-за их рейтинги изменились. А если игра удалена, то все изменения рейтинга игр, в которые играли после, должны были быть пересчитаны одна за другой.

Я надеюсь, что моя проблема ясна …

Итак, вопрос в том, не могли бы вы дать мне полный старт php / .mysql, намеки на то, какой должна быть логика базы данных и процесс расчета рейтингов для моей ситуации.

Заранее спасибо.

3

Решение

В основном будет две таблицы: players(name,whatever else,rating) а также games(player_id_white,player_id_black,result=1,0,-1,date),

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

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

1

Другие решения

Других решений пока нет …