Моделирование базы данных: наследование - PullRequest
0 голосов
/ 25 сентября 2018

Я не могу понять, как смоделировать мою базу данных с этой проблемой:

  • A поездка имеет один драйвер .
  • A путешествие имеет несколько пассажиров .
  • Оба водителя и пассажиров являются пользователями .
  • A пользователь , очевидно, может иметь несколько поездок , где он является либо водителем , либо пассажиром .

Я думал о сводной таблице journey_role_user, но это не сработало бы.
Я разрабатываю это с помощью Eloquent Ларавела, а не то, что это изменит какие-либо отношения.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Я бы порекомендовал следующие пять таблиц:

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 хранится список пользователей для каждой поездки.

0 голосов
/ 25 сентября 2018

Я бы порекомендовал три таблицы:

users:
    user_id,
    . . .

journey:
    journey_id,
    driver_id references users.user_id
    . . .

journey_passenger
    journey_passenger_id,
    journey_id references journey.journey_id,
    passenger_id references user.user_id,
    . . .

"водитель" и "пассажир", похоже, являются ролями, которые могут иметь пользователи.Они могут быть определены ссылочной таблицей.

0 голосов
/ 25 сентября 2018

Четыре таблицы:

Journey:
journey_id
other_info

User:
user_id
other_info

Journey_Passenger:
journey_id
user_id

Journey_driver:
journey_id
user_id

Вы также можете добавить столбец driver_id в таблицу Journey, чтобы избежать таблицы Journey_Driver

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...