Я бы порекомендовал следующие пять таблиц:
journey (id PK, name, driver_id)
users (id PK, name, ...)
roles (id PK, name, ...)
user_roles (user_id, role_id)
user_journeys (user_id, journey_id)
Здесь есть 3 базовые таблицы journey
, users
и roles
.В таблице journey
хранятся метаданные для каждой поездки, включая водителя.Для этого он хранит driver_id
, который будет внешним ключом, указывающим на id
в таблице users
(поскольку драйвер должен быть каким-то пользователем).В таблицах users
и roles
хранятся метаданные о каждом пользователе и каждой роли.
Здесь есть две таблицы соединений / мостов, user_roles
и user_journeys
.В таблице user_roles
хранятся роли, которые может иметь пользователь.Конечно, пользователь может быть и водителем, и пассажиром, и в этом случае у этого пользователя может быть два числа в таблице user_roles
.В таблице user_journeys
хранится список пользователей для каждой поездки.