Прошу помощи в определении правильной структуры хранения записей в MySQL
Имеется единая форма, некоторые части формы отключаемые, в зависимости от надобности.
Схему в более качественном размере/масштабе можно увидеть по ссылке
Основная проблема в том что, поездка может быть как в аэропорт, так и из аэропорта. А так же поездка может быть типа точка-точка, то есть из определенного места до определенного места. Может быть например одна остановка по пути следования, но не более одной.
Мне не понятно как организовать связи между таблицами. Как должен хранится маршрут поездки, в одной таблице или же в разных таблицах.
Единственное что мне понятно, есть несколько справочных таблиц, они обозначены на схеме, а так же понятно что есть точки (адреса/location).
Есть так же мысль добавить в таблицу location метку типа точки, начальная, конечная, промежуточная.
P.S. Схему начертил как смог, прошу не кидать помидорами.
Ответы (1 шт):
Я так понимаю, итогом работы формы должен быть сохранённая в БД запись о заказе, плюс информация о маршруте.
В таком случае я предлагаю следующую базу данных для такого:
Таблица
order(заказ, поездка, это основной домен):id-INTилиUUID- суррогатный ключ, идентификатор заказаroute_id-INTилиUUID- ссылка на маршрутauto_id-INTилиUUID- ссылка на авто из справочника- ... ещё какие-нибудь поля из вашей формы
Таблица
address- таблица с информацией о ваших адресах, в неё можно сохранять введённые пользователями адресаid-INTилиUUID- тоже суррогатный айдиcityzip- и так далее
Таблица
point- таблица с точками маршрутаorder_id- ссылка на таблицуorderaddress_id- ссылка на таблицуaddressposition-INT- порядковый номер точки на маршруте, типа 1, 2, 3 - 1 это точка отправления, 3 это точка прибытия, 2 это промежуточная
Связи между таблицами:
Один заказ - много точек Один адрес - много точек
order <- point -> address
Таблицу address я выделил в отдельную, потому что скорее всего в будущем заказчик захочет выводить подсказки по адресам на форме. Данные адресов можно также скачать, например использовать официальную базу адресов КЛАДР или ту что новее, не помню её названия.
Поле формы "аэропорт" вы можете также брать из справочника, в котором будут значения "airport_name, address_id", связывающий аэропорт из формы с реальным адресом для создания из этого адреса запись в point.
Если же вы не хотиите, чтобы аэропорт был частью маршрута, можно добавить в таблицу order два поля:
airport_id - ссылка на справочник аэропортов
direction - направление следования, например 1 или 0 для "в аэропорт" или "из аэропорта", можно создать справочник direction в котором будут записи с описанием направления, и тогда уже сделать поле order.direction_id со ссылкой на справочник.
В общем, как поступать с "аэропорт" полем - лучше всего решать вам, я бы выбрал вариант с адресами, ибо тогда механизм построения маршрутов будет универсальный и в будущем можно будет как-то расширить модель данных, например, добавить кроме аэропортов вокзалы...
