Seu esquema de banco de dados parece para mim como um esquema de banco de dados relacional 'clássico'. Mongodb bom ajuste para desnormalização de dados. Eu acho que quando você exibe rotas você carrega todos os clientes relacionados, motorista, caminhão.
Se você quiser tornar seu sistema realmente rápido, você pode incorporar tudo na coleção de rotas.
Então sugiro as seguintes modificações do seu esquema:
- clientes - como está
- caminhões - no estado em que se encontram
- drivers - no estado em que se encontram
-
lista de rotas:
Incorpore dados sobre clientes dentro de paradas em vez de referência. Caminhão também embutido. Neste caso o esquema será:
{ "route_name": "monday_1", "day": "monday", "truck": { _id = 1, // here will be all truck data }, "stops": [{ "customer": { _id = 1, //here will be all customer data } }, { "customer": { _id = 2, //here will be all customer data } }] }
-
rotas:
Ao iniciar uma nova rota, copie a rota da lista de rotas e, além disso, incorpore as informações do motorista:
{ //copy all route-list data (just make new id for the current route and leave reference to routes-list. In this case you will able to sync route with route-list.) "_id": "1", route_list_id: 1, "start_time": "04:31 AM", "status": "active", driver: { //embedd all driver data here }, "stops": [{ "customer": { //all customer data }, "status": "complete", "start_time": "04:45 AM", "finish_time": "04:48 AM", "elapsed_time": "3" }] }
Acho que você está se perguntando o que fazer se o driver, o cliente ou outros dados desnormalizados forem alterados na coleção principal. Sim, você precisa atualizar todos os dados desnormalizados em outras coleções. Você provavelmente precisará atualizar bilhões de documentos (depende do tamanho do seu sistema) e está tudo bem. Você pode fazê-lo assíncrono se demorar muito tempo.
Quais benefícios na estrutura de dados acima?
- Cada documento contém todos os dados que você pode precisar exibir em seu aplicativo. Assim, por exemplo, você não precisa carregar clientes relacionados, motorista, caminhão quando precisar exibir rotas.
- Você pode fazer qualquer consulta difícil em seu banco de dados. Por exemplo, em seu esquema, você pode criar uma consulta que retornará todas as rotas que contêm paradas na parada do cliente com nome ="Bill" (você precisa carregar o cliente pelo nome primeiro, obter o ID e procurar pelo ID do cliente em seu esquema atual).
Provavelmente você está se perguntando que seus dados podem ser dessincronizados em alguns casos, mas para resolver isso você só precisa criar alguns testes de unidade para garantir que você atualize seus dados desnormolizados corretamente.
A esperança acima irá ajudá-lo a ver o mundo do lado não relacional, do ponto de vista do banco de dados de documentos.