Мне нравится название таблицы в единственном числе.Я также хотел бы поставить идентификатор во всей таблице как общий шаблон.Делайте так, как вы хотите для этого.
Я не уверен в некоторых моментах, например, в том, что нам нужно отслеживать различные соревнования (я предположил, что да, поскольку они говорят «для каждого соревнования», предполагая, что нужно отслеживать более одного соревнования) иесли набор событий может быть разделен между соревнованиями (я только моделирую событие для соревнования, вместо того, чтобы иметь список событий, который повторно используется во всех соревнованиях, что также было бы интересно, если бы между соревнованиями были общие события, такие как «быстрый бегун»).").
Вот пример для моделирования на основе этих допущений:
dog
---
id
name
competition
-----------
id
date
name
competition_event
-----------------
id
competition_id
name
/* note: we could make a different event (or event_type) table
and just use event_id (or event_type_id) in the competition_event table
if we want to share events among competition...
would be useful to do stat on stuff like "faster runner" across all competitions */
dog_competition_event_score
---------------------------
id
competition_event_id
dog_id
score
Тогда для запроса он должен выглядеть примерно так:
SELECT *
FROM dog d
JOIN dog_competition_event_score dces ON dces.dog_id = d.id
JOIN competition_event ce ON ce.id = dces.competition_event_id
JOIN competition c ON c.id = ce.competition_id;