Я нахожусь в процессе разработки программного обеспечения для отслеживания / оптимизации маршрутов для моей компании по сбору мусора и хотел бы получить отзывы о моей текущей структуре данных / ситуации.
Вот упрощенная версия моей структуры MongoDB:
База данных: данные
Коллекция:
«клиенты» - сбор данных, содержащих все данные клиентов.
[
{
"cust_id": "1001",
"name": "Customer 1",
"address": "123 Fake St",
"city": "Boston"
},
{
"cust_id": "1002",
"name": "Customer 2",
"address": "123 Real St",
"city": "Boston"
},
{
"cust_id": "1003",
"name": "Customer 3",
"address": "12 Elm St",
"city": "Boston"
},
{
"cust_id": "1004",
"name": "Customer 4",
"address": "16 Union St",
"city": "Boston"
},
{
"cust_id": "1005",
"name": "Customer 5",
"address": "13 Massachusetts Ave",
"city": "Boston"
}, { ... }, { ... }, ...
]
«грузовики» - сбор данных, содержащий все данные о грузовиках.
[
{
"truckid": "21",
"type": "Refuse",
"year": "2011",
"make": "Mack",
"model": "TerraPro Cabover",
"body": "Mcneilus Rear Loader XC",
"capacity": "25 cubic yards"
},
{
"truckid": "22",
"type": "Refuse",
"year": "2009",
"make": "Mack",
"model": "TerraPro Cabover",
"body": "Mcneilus Rear Loader XC",
"capacity": "25 cubic yards"
},
{
"truckid": "12",
"type": "Dump",
"year": "2006",
"make": "Chevrolet",
"model": "C3500 HD",
"body": "Rugby Hydraulic Dump",
"capacity": "15 cubic yards"
}
]
«драйверы» - сбор данных, содержащий все данные драйвера.
[
{
"driverid": "1234",
"name": "John Doe"
},
{
"driverid": "4321",
"name": "Jack Smith"
},
{
"driverid": "3421",
"name": "Don Johnson"
}
]
«Списки маршрутов» - сбор данных, содержащий все заранее определенные списки маршрутов.
[
{
"route_name": "monday_1",
"day": "monday",
"truck": "21",
"stops": [
{
"cust_id": "1001"
},
{
"cust_id": "1010"
},
{
"cust_id": "1002"
}
]
},
{
"route_name": "friday_1",
"day": "friday",
"truck": "12",
"stops": [
{
"cust_id": "1003"
},
{
"cust_id": "1004"
},
{
"cust_id": "1012"
}
]
}
]
"маршруты" - сбор данных, содержащий данные для всех активных и завершенных маршрутов.
[
{
"routeid": "1",
"route_name": "monday1",
"start_time": "04:31 AM",
"status": "active",
"stops": [
{
"customerid": "1001",
"status": "complete",
"start_time": "04:45 AM",
"finish_time": "04:48 AM",
"elapsed_time": "3"
},
{
"customerid": "1010",
"status": "complete",
"start_time": "04:50 AM",
"finish_time": "04:52 AM",
"elapsed_time": "2"
},
{
"customerid": "1002",
"status": "incomplete",
"start_time": "",
"finish_time": "",
"elapsed_time": ""
},
{
"customerid": "1005",
"status": "incomplete",
"start_time": "",
"finish_time": "",
"elapsed_time": ""
}
]
}
]
Вот процесс на данный момент:
Каждый день водители начинают с запуска нового маршрута. Перед началом нового маршрута водители должны сначала ввести данные:
- driverid
- дата
- грузовик
Как только все данные введены правильно, начнется новый маршрут:
- Создать новый объект в коллекции «маршруты»
- Коллекция запросов «Списки маршрутов » для «День» + «Грузовик» Совпадение и возврат «Остановки»
- Вставить «списки маршрутов» данные в «маршруты» сборник
По мере того, как водитель выполняет свои ежедневные остановки / задания, коллекция «маршруты» будет обновляться соответствующим образом.
По завершении всех задач у водителя будет возможность завершить процесс маршрута, просто изменив поле «состояние» на «активное» с «завершено» в коллекции «маршруты».
Это примерно так. Любые отзывы, мнения, комментарии, ссылки, тактика оптимизации приветствуются.
Заранее спасибо за ваше время.