Проектирование базы данных и моделирование конкретных отношений

Я пытаюсь реализовать решение для доставки и отслеживания.

Есть TRUCKS этот ход PRODUCTS из CITY другому CITY через назначенный PATHS по конкретным SCHEDULES, TRUCKS транспортировать PRODUCTS с помощью CONTAINERS, Эти TRUCKS проинструктированы через JOBS, лайк pick_up, transfer, drop_off,

Проблема, которая у меня возникает, когда product_1 должен быть перемещен truck_1 через pick_upJOB от city_A в city_C с помощью city_B, В то же время, есть product_2 тронут truck_2 через JOB из pick_up от city_C в city_A с помощью city_B, И то и другое trucks Можно transfer (JOB) их containers (и по существу product и просто возвращайтесь к их происхождению cityт.е. для truck_1, вернуться к city_A и для truck_2, вернуться к city_C через команду drop_off (JOB).

Итак, у меня есть следующие таблицы:

  • TRUCK (truck_id, код грузовика,...)
  • PRODUCT (идентификатор продукта, код продукта, имя продукта,...)
  • CONTAINER (container_id, container_desc,...)
  • CITY (city_id, city_name, city_desc,...)
  • PATH (path_id, from_city_id, to_city_id,...)
  • SCHEDULE (schedule_id, schedule_name, schedule_desc, start_time, end_time,...)
  • TRANSACTION (транзакция_id, транзакция_имя, транзакция_деск,...)

Как я могу смоделировать сценарий выше, где CONTAINERS передаются между TRUCKS?

1 ответ

Решение

Предположительно, у грузовика и / или дальнобойщика есть задание, включающее в себя прохождение последовательности событий, в том числе следование по пути и выполнение поставок и транзакций и т. Д. Предположительно, работа - это такое событие, из которых существует несколько видов, например, получение, передача и оставите машину.

Таблицы в реляционной базе данных описывают состояние приложения. С каждой таблицей связан оператор заполнения (предиката). Предикаты базовой таблицы предоставляются дизайнером:

// truck [truck_id] has code [truck_code] and ...
TRUCK (truck_id, truck_code, ...)
// product [product_id] has code [product_code] and name [product_name] ...
PRODUCT (product_id, product_code, product_name, ...) 

(Предикат характеризует отношение приложения, то есть отношение, представленное таблицей, то есть отношением, отсюда "реляционная модель".)

Параметры предиката - это столбцы таблицы. Когда вы предоставляете значения для каждого параметра, вы получаете утверждение (предложение), которое является истинным или ложным для вашего приложения. Строка значений для столбцов дает такие значения для каждого именованного пробела. Строки, которые делают предикат таблицы истинным, попадают в таблицу. Строки, которые составляют, если ложь, остаются вне. Вот как состояние базы данных описывает ситуацию приложения. Вы должны знать операторы таблиц, чтобы читать или запрашивать базу данных, чтобы узнать по ее строкам, что является правдой и ложью в ситуации, и обновить базу данных, поместив в нее именно те строки, которые делают истинные предложения после наблюдения за ситуацией.,

У каждого запроса также есть предикат, построенный из предикатов его таблиц. СОЕДИНЕНИЕ двух таблиц дает строки, которые удовлетворяют AND своих предикатов, UNION OR и т. Д. И результат запроса также содержит строки, которые удовлетворяют его предикату.

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

Вам нужно определиться с достаточным количеством предикатов, чтобы иметь возможность полностью описать положения вашего приложения. Это включает в себя такие абстрактные вещи, как маршруты, транзакции, события, расписания, назначения и т. Д. (Как только у нас появятся достаточные предикаты / таблицы, мы улучшаем их с помощью таких методов, как нормализация).

Когда могут быть разные вещи, мы говорим о супертипах и подтипах и видим предикаты вроде (я буду использовать "задание", которое я использую как событие):

// job [job_id] for trucker [trucker_id] is ... stuff about all jobs ...
JOB(job_id, trucker_id...)
// job [job_id] is a pickup with ... stuff about pickups ...
PICKUP(job_id, container_id...)
// job [job_id] is a transfer with ... stuff about transfers
TRANSFER(job_id,...)
...

(Вы можете иметь или не иметь другое или дополнительное понятие передачи как события с двумя или более ассоциированными контейнерами и т. Д.) (Поиск "подтипов". Например.)

Другие вопросы по тегам