Создание турнирной сетки

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

Турнир проходит по швейцарской системе. Есть таблицы "player", "tournament", "match". Хочу сделать визуальное динамическое создание и отображение сетки в зависимости от количества игроков, используя любые элементы. Хочу поменять базу данных, но не понимаю как сделать это правильно.

Каждый столбец и строка должны добавляться после записи игрока на турнир(добавляет игрока администратор). Хотелось бы сделать ограничение на запись до кратного 8 игроков. Хотелось бы добавлять матч, после окончания которого результат записывался бы в строку выигравшего игрока в столбец к проигравшему.

Пример того, как пытался это сделать я: создал таблицу "tournament", таблицу "player", и сделал связующую между ними таблицу "tourplay", с содержанием id player и id tournament. Создал таблицу "match", куда сделал вывод id в два поля "participant1", "participant2" из "tourplay". Поле "matchwinner" вписывал администратор вручную из двух представленных id. Но при взятии данных из таблицы "match" приходится создавать множество листов, для разделения на игроков на пары.

Спасибо.