Составление правильной структуры БД

302
12 июня 2017, 21:19

Всем привет. Запутался в написании БД для футбольной лиги. Описание БД простым языком:

Таблица players: id, firstname, team_id, lastname, birthday, passport, password

Таблица teams: id, name, regdate, captain_id

Таблица teams_history: id, action_id, player_id, team_id, date

Таблица actions: id, value

Таблица tournaments: id, name, startdate, enddate, format_id, price, prizes

Таблица games_action: id, game_id, player_id, gameaction_id, game_time

Таблица gameaction: id, value

Таблица games: id, team1_id, team2_id, team1_score, team2_score, tournament_id, date

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

  • Вопрос 1: Правильно ли я сделал, что добавление игры - это добавление результата игры в таблицу games данных о результате? Что делать, если нужно будет составить расписание и внести в таблицу games уже готовые игры, но без результата?
  • Вопрос 2: Если мне нужно будет, к примеру, все игры определенного игрока, что мне нужно будет сделать? Игроки могут выходить из команд и заходить в команды, а мне нужно, чтобы их прошлые игры были видны. Нужно создавать промежуточную таблицу, где будут данные об игроке и команде, за которую он играл?
  • При условии, что игроки выходят и заходят в команды, хочу это отслеживать, чтобы писать в историю команды, что такой-то игрок зашел/вышел из команды, а также писать в историю игрока, что вышел/зашел в такую-то команду. Промежуточная таблица teams_history для этого подойдет?
  • В некоторых турнирах могут быть 2 этапа - групповой этап и игры на выбывание. Если я хочу отследить определенный этап, то мне следует в games помимо tournament_id записывать этап игры/тур группового этапа, где все команды играют каждая с каждой?
  • Где в данной БД лучше использовать представления, а где таблицы?
  • Что делать с индексами? Некоторые таблицы будут заполняться быстро, т.е. 1 игра может вставить, к примеру, от 10 до 50 строк в таблицу games_action, туда будут записываться желтые и красные карточки, голы и замены. P.S. сам про индексы только читаю, до этого с большими проектами дел не имел, поэтому индекс был 1 на всю таблицу - первичный ключ (id)

Заранее спасибо за ответы! Надеюсь, что этот вопрос будет полезен не только мне!

READ ALSO
Как выбрать последние строки из строк соответствующих условию

Как выбрать последние строки из строк соответствующих условию

Мне нужно получить из таблицы, имена всех клиентов, которые активны (совершали транзакции не меньше минуты назад)

265
Сервер mysql ругается на ' - одинарную кавычку

Сервер mysql ругается на ' - одинарную кавычку

Всем приветИмеется приложение на objective-c

253
даты в строгой последовательности mysql

даты в строгой последовательности mysql

Есть таблицав ней поле даты

288
Не получается соединить два поля из таблиц БД

Не получается соединить два поля из таблиц БД

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

245