Отношения между клубами и событиями направлены против пользователя , а не друг против друга.Кроме того, поскольку оба отношения «многие ко многим», вы могли бы воспользоваться двумя таблицами мостов ;один между пользователями и клубами, а другой между пользователями и событиями:
user_clubs
таблица:
user_id | club_id | payment_method
---------------------------------------
1 | 1 | 'Visa'
2 | 1 | 'Visa'
2 | 2 | 'Mastercard'
user_events
таблица:
user_id | club_id | payment_method
---------------------------------------
1 | 1 | 'Visa'
2 | 1 | 'Visa'
2 | 2 | 'Mastercard'
Это в дополнение к user
, clubs
и events
таблицам.
Как вы можете видеть, это позволяет пользователям присоединяться к нескольким клубам и посещать несколько мероприятий, а также позволяет клубам исобытия для размещения нескольких пользователей.Это также полностью устраняет необходимость в таблице payment
полностью, перемещая единственный отсутствующий столбец (payment_method
) на две таблицы мостов.membership_fees
отображается на amount
, поэтому он больше не нужен.
Отсюда вы можете запросить все соответствующей информации о конкретном пользователе (или клубе /событие) путем объединения таблиц в вашем запросе.Например, если вам нужна вся информация о пользователе:
SELECT * FROM user
INNER JOIN user_clubs ON user.id = user_clubs.user_id
INNER JOIN clubs ON user_clubs.club_id = clubs.id
INNER JOIN user_events ON user.id = user_events.user_id
INNER JOIN events ON user_events.user_id = club.id
WHERE user.id = '1'
Это даст вам всю информацию о пользователе;клубы, в которые они входят, события, которые они посещают, соответствующие сборы и то, как пользователь оплачивал эти сборы.