MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB Hubungan Satu ke Banyak

Masalahnya adalah Anda terlalu menormalkan data Anda. Pesanan ditentukan oleh pelanggan, yang tinggal di tempat tertentu pada titik waktu tertentu, membayar harga tertentu yang berlaku pada saat pesanan (yang mungkin sangat berubah selama masa aplikasi dan yang tetap harus Anda dokumentasikan dan beberapa parameter lain yang semuanya hanya valid dalam waktu tertentu . Jadi untuk dokumen pesanan (pun intended), Anda harus mempertahankan semua data untuk titik waktu tertentu. Biarkan saya memberi Anda sebuah contoh:

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

Sekarang, selama baik pelanggan maupun detail item tidak berubah, Anda dapat mereproduksi ke mana pesanan ini dikirim, berapa harga pesanannya dan serupa. Tapi sekarang apa yang terjadi jika pelanggan mengubah alamatnya? Atau jika harga suatu barang berubah? Anda perlu melacak perubahan tersebut di dokumen masing-masing. Itu akan menjadi banyak lebih mudah dan cukup efisien untuk menyimpan pesanan seperti:

{
  _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}
  ]
}

Dengan model data ini dan penggunaan saluran agregasi, Anda memiliki beberapa keuntungan:

  1. Anda tidak perlu secara mandiri melacak harga dan alamat atau perubahan nama atau pembelian hadiah dari pelanggan - ini sudah didokumentasikan.
  2. Menggunakan saluran agregasi, Anda dapat membuat tren harga tanpa perlu menyimpan data harga secara mandiri. Anda cukup menyimpan saat ini harga item dalam dokumen pesanan.
  3. Bahkan agregasi yang kompleks seperti elastisitas harga, perputaran menurut negara bagian/kota dan sejenisnya dapat dilakukan dengan menggunakan agregasi yang cukup sederhana.

Secara umum, aman untuk mengatakan bahwa dalam database berorientasi dokumen, setiap properti atau bidang yang dapat berubah di masa depan dan perubahan ini akan menciptakan makna semantik yang berbeda harus disimpan di dalam dokumen. Segala sesuatu yang dapat berubah di masa mendatang tetapi tidak menyentuh makna semantik (kata sandi pengguna dalam contoh) dapat ditautkan melalui GUID.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Langkah-langkah untuk Menginstal MongoDB di Amazon Linux

  2. Pencarian Ekspresi Reguler MongoDB - Dimulai dengan menggunakan driver javascript dan NodeJS

  3. Kode keluar mongo tak terduga 100. Mulai ulang

  4. Array bersarang $pull query menggunakan driver C# MongoDB

  5. Kumpulan Mesin &Profil Cloud untuk MongoDB