Đối với tôi, lược đồ cơ sở dữ liệu của bạn giống như một lược đồ cơ sở dữ liệu quan hệ 'cổ điển'. Mongodb phù hợp tốt cho việc chuẩn hóa dữ liệu. Tôi đoán khi bạn hiển thị các tuyến đường, bạn tải tất cả khách hàng, tài xế, xe tải có liên quan.
Nếu bạn muốn làm cho hệ thống của mình thực sự nhanh, bạn có thể nhúng mọi thứ vào bộ sưu tập tuyến đường.
Vì vậy, tôi đề xuất các sửa đổi sau đối với lược đồ của bạn:
- khách hàng - nguyên trạng
- xe tải - nguyên trạng
- trình điều khiển - nguyên trạng
-
danh sách tuyến đường:
Nhúng dữ liệu về khách hàng bên trong các điểm dừng thay vì tham chiếu. Ngoài ra xe tải nhúng. Trong trường hợp này, giản đồ sẽ là:
{ "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 } }] }
-
tuyến đường:
Khi tài xế bắt đầu tuyến đường mới, hãy sao chép tuyến đường từ danh sách tuyến đường và thêm vào đó là thông tin tài xế nhúng:
{ //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" }] }
Tôi đoán bạn đang tự hỏi mình phải làm gì nếu dữ liệu tài xế, khách hàng hoặc dữ liệu không chuẩn hóa khác thay đổi trong bộ sưu tập chính. Vâng, bạn cần cập nhật tất cả dữ liệu không chuẩn hóa trong các bộ sưu tập khác. Bạn có thể sẽ cần cập nhật hàng tỷ tài liệu (tùy thuộc vào kích thước hệ thống của bạn) và không sao cả. Bạn có thể làm điều này khi không đồng bộ nếu mất nhiều thời gian.
Lợi ích nào trong cấu trúc dữ liệu trên?
- Mỗi tài liệu chứa tất cả dữ liệu mà bạn có thể cần để hiển thị trong ứng dụng của mình. Vì vậy, chẳng hạn, bạn không cần tải khách hàng, tài xế, xe tải liên quan khi bạn cần các tuyến đường hiển thị.
- Bạn có thể thực hiện bất kỳ truy vấn khó nào đối với cơ sở dữ liệu của mình. Ví dụ:trong lược đồ của bạn, bạn có thể tạo truy vấn sẽ trả về tất cả các tuyến đường chứa các điểm dừng của khách hàng với name ="Bill" (trước tiên bạn cần tải khách hàng theo tên, lấy id và tìm theo id khách hàng trong lược đồ hiện tại của bạn).
Có thể bạn đang tự hỏi mình rằng dữ liệu của bạn có thể không được đồng bộ hóa trong một số trường hợp, nhưng để giải quyết vấn đề này, bạn chỉ cần xây dựng một vài thử nghiệm đơn vị để đảm bảo rằng bạn cập nhật dữ liệu không được nhiệt hóa của mình một cách chính xác.
Hy vọng ở trên sẽ giúp bạn nhìn thế giới từ khía cạnh không quan hệ, từ quan điểm cơ sở dữ liệu tài liệu.