MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB Mối quan hệ một đến nhiều

Vấn đề là bạn chuẩn hóa dữ liệu của mình quá mức. Một đơn đặt hàng được xác định bởi một khách hàng, người sống tại một địa điểm nhất định vào thời điểm nhất định, trả một mức giá nhất định hợp lệ tại thời điểm đặt hàng (điều này có thể thay đổi nhiều trong suốt thời gian ứng dụng và dù sao thì bạn cũng phải ghi lại một số các tham số khác tất cả chỉ có giá trị trong một thời điểm nhất định . Vì vậy, để tài liệu một đơn đặt hàng (dự định chơi chữ), bạn cần duy trì tất cả dữ liệu cho thời điểm nhất định đó. Để tôi cho bạn một ví dụ:

{ _id: "order123456789",
  date: ISODate("2014-08-01T16:25:00.141Z"),
  customer: ObjectId("53fb38f0040980c9960ee270"),
  items:[ ObjectId("53fb3940040980c9960ee271"),
          ObjectId("53fb3940040980c9960ee272"),
          ObjectId("53fb3940040980c9960ee273")
         ],
 Total:400
 }

Bây giờ, miễn là khách hàng và thông tin chi tiết của các mặt hàng không thay đổi, bạn có thể sao chép đơn đặt hàng này được gửi đến đâu, giá trên đơn đặt hàng giống nhau như thế nào. Nhưng bây giờ điều gì sẽ xảy ra nếu khách hàng thay đổi địa chỉ của nó? Hoặc nếu giá của một mặt hàng thay đổi? Bạn sẽ cần theo dõi những thay đổi đó trong các tài liệu tương ứng của chúng. Nó sẽ là nhiều dễ dàng hơn và đủ hiệu quả để lưu trữ đơn đặt hàng như:

{
  _id: "order987654321",
  date: ISODate("2014-08-01T16:25:00.141Z"),
  customer: {
               userID: ObjectId("53fb3940040980c9960ee283"),
               recipientName: "Foo Bar"
               address: {
                          street: "742 Evergreen Terrace",
                          city: "Springfield",
                          state: null
                         }
            },
  items: [
    {count:1, productId:ObjectId("53fb3940040980c9960ee300"), price: 42.00 },
    {count:3, productId:ObjectId("53fb3940040980c9960ee301"), price: 0.99},
    {count:5, productId:ObjectId("53fb3940040980c9960ee302"), price: 199.00}
  ]
}

Với mô hình dữ liệu này và việc sử dụng các đường ống tổng hợp, bạn có một số lợi thế:

  1. Bạn không cần phải theo dõi một cách độc lập giá cả và địa chỉ, thay đổi tên hoặc mua quà của khách hàng - nó đã được ghi lại.
  2. Sử dụng các đường ống tổng hợp, bạn có thể tạo xu hướng giá mà không cần lưu trữ dữ liệu giá một cách độc lập. Bạn chỉ cần lưu trữ hiện tại giá của một mặt hàng trong tài liệu đặt hàng.
  3. Ngay cả những tổng hợp phức tạp như độ co giãn của giá, doanh thu theo tiểu bang / thành phố và các vùng tương tự cũng có thể được thực hiện bằng cách sử dụng các tổng hợp khá đơn giản.

Nói chung, có thể an toàn khi nói rằng trong cơ sở dữ liệu hướng tài liệu, mọi thuộc tính hoặc trường có thể thay đổi trong tương lai và sự thay đổi này sẽ tạo ra một ý nghĩa ngữ nghĩa khác nên được lưu trữ bên trong tài liệu. Mọi thứ có thể thay đổi trong tương lai nhưng không liên quan đến ý nghĩa ngữ nghĩa (mật khẩu người dùng trong ví dụ) có thể được liên kết thông qua GUID.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongod phàn nàn rằng không có thư mục / data / db

  2. Cách đơn giản để tạo mã với Mongoose và Node.js và Underscore?

  3. MongoDB phương pháp hay nhất để tham khảo

  4. MongoDB $ isoWeekYear

  5. MongoDB $ dateFromParts