Estoy en el proceso de desarrollo del software Route Tracking/Optimization para mi empresa de recogida de basuras y me gustaría recibir algunos comentarios sobre mi estructura/situación de datos actual.MongoDB Estructura de base de datos y prácticas recomendadas Ayuda
Aquí es una versión simplificada de la estructura de mi MongoDB:
base de datos: datos de
Colecciones:
“clientes” - recolección de datos que contiene todos los datos de los clientes.
[
{
"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"
}, { ... }, { ... }, ...
]
“camiones” - recolección de datos que contiene todos los datos de camiones.
[
{
"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"
}
]
“drivers” - recolección de datos que contiene todos los datos del conductor.
[
{
"driverid": "1234",
"name": "John Doe"
},
{
"driverid": "4321",
"name": "Jack Smith"
},
{
"driverid": "3421",
"name": "Don Johnson"
}
]
“Ruta-listas” - colección de datos que contiene todas las listas de rutas predeterminadas.
[
{
"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"
}
]
}
]
"rutas" - colecciones de datos que contienen los datos para todas las rutas activos y terminados.
[
{
"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": ""
}
]
}
]
Aquí es el proceso hasta el momento:
conductoresCada día comienzan iniciando una nueva ruta.Antes de comenzar una nueva conductores de ruta debe en primer lugar los datos de entrada:
- DriverID
- fecha
- camión
Una vez que se ha introducido correctamente todos los datos del inicio de una nueva ruta comenzar:
- Crear nuevo objeto en la colección “rutas”
- consulta de la colección “Ruta de las listas” para “día” + “camión” partido y volver "detiene"
- Insertar “ route-listas” de datos en ‘rutas’ colección
Como el conductor procede con sus paradas/tareas diarias, la colección "rutas" se actualizará en consecuencia.
Al completar todas las tareas, el controlador tendrá la capacidad de completar el proceso de ruta simplemente cambiando el campo "estado" a "activo" de "completo" en la colección "rutas".
Eso lo resume todo. Todos los comentarios, opiniones, comentarios, enlaces, tácticas de optimización son muy apreciados.
Gracias de antemano por su tiempo.
¿Qué sucede si la información del cliente o del camión o el conductor está actualizada en el sistema? Creará ambigüedad de los datos. Mejor mantener solo los identificadores de otros modelos. –