MongoDB'de Veri İlişkileriyle Çalışma

MongoDB'de Veri İlişkileriyle Çalışma

MongoDB bir belge veritabanıdır ve PostgreSQL şeklinde ilişkisel veritabanları şeklinde belgeler arasındaki ilişkileri korumaz.

Gene de MongoDB belgeler içinde ilişkiler oluşturmanıza izin verir. Bu ilişkiler katıştırılmış yada başvurulan yaklaşımlar vesilesiyle modellenebilir. Daha yakından bakalım.

Katıştırılmış İlişkiler ve Müracaat İlişkileri Karşılaştırması

Katıştırılmış bir yaklaşımda, belge direkt başka bir belgenin içine eklenmiş olur ve bu da iç içe veriyle sonuçlanır. İşleme “denormalizasyon” da denir.

Öte taraftan, müracaat yaklaşımı, bir belgeden diğerine imlemek için belge başvurularını kullanır. Bu yaklaşıma “normalleşme” de denir.

MongoDB: Gömülü Belgelerle BireBir İlişkiler

Katıştırılmış yaklaşımı kullanarak belgeler içinde bire bir ilişki oluşturabilirsiniz. Bu ilişki, bir belge nesnesi yalnızca başka bir belgeyle ilişki kurabildiğinde oluşur.

Bir talebe veritabanı düşünün. Bu veritabanı, aşağıdaki belgelere haiz talebe ve adres koleksiyonlarını ihtiva eder.

// Student Document
{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
};
// Address Document
{
"studentName": "Frodo Baggins",
"street": "Bagshot Row",
"city": "Hobiton",
}

Bu veritabanında, bir öğrencinin yalnızca bir adresi olmasına izin verilir. Adresi almak için öğrencinin adını kullanarak adres koleksiyonunu sorgulamanız gerekir.

İlgili: MongoDB’de Veritabanı ve Koleksiyon Iyi mi Oluşturulur

Adresin, studentName, veritabanını birden oldukça kez sorgulamanız gerekir. Bunun dezavantajı, yüksek sayıda okuma işlemi ve netice olarak düşük sorgu performansıdır.

Katıştırılmış yaklaşımı kullanarak, adres verilerini direkt talebe belgesine ekleyebilir ve verileri almak için yalnızca tek bir sorgu kullanabilirsiniz.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"address": ({
"street": "Bagshot Row",
"city": "Hobiton"
}),
};

Adresi studentName, bu sorguyu kullanın.

db.student.findOne({"studentName":"Frodo Baggins"}, {"address":1})

MongoDB’de Gömülü Belgelerle Bire Fazlaca İlişkiler

Bir öğrencinin birden fazla adresi olduğu bir durumu göz önünde bulundurun. Talebe ve adresler arasındaki ilişki bire oldukça olur.

Katıştırılmış model, talebe belgesine birden oldukça adres eklemenize olanak tanır. Katıştırılmış belgeleri kullanan bire bir ilişkide olduğu şeklinde, bu yaklaşım nispeten yüksek bir sorgu performansına haizdir.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"address": (
{
"street": "Bagshot Row",
"city": "Hobiton"
},
{
"street": "Another Bagshot Row",
"city": "Hobiton2"
},
)
};

Aşağıdaki sorgu, belirtilen talebe adının adreslerini döndürür.

db.student.findOne({studentName: “Frodo Baggins”}, {address: 1})

MongoDB sorgusundan çıktıyı gösteren terminal penceresi

İlgili: MongoDB’de Belgeler Iyi mi Oluşturulur

Şimdi, daha çok adresiniz var ise ve bu tarz şeyleri adres alanına eklemeye devam ederseniz, belge oldukça süratli bir halde karmaşıklaşabilir. Bir çözüm belge başvurularını kullanmaktır.

MongoDB: Belge Referanslarıyla Bire Fazlaca İlişkiler

Müracaat yaklaşımını kullanarak bir-çok ilişkisini de modelleyebilirsiniz. Bu veri modelinde talebe ve adres verileri ayrı koleksiyonlarda muhafaza edilecektir. Öğrenciyi adresleriyle ilişkilendirmek için, talebe belgesine adres kimliklerini içeren bir alan ilave edin.

{
"studentName": "Frodo Baggins",
"phoneNumber": "987654321",
"address": (
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId("61fa7d19ebdadf8ac71427eb")
)
};

Bir öğrencinin adres ayrıntılarını almak, talebe belgesinden adres kimliklerini almayı ve koleksiyondaki gerçek adresleri getirmek için bu kimlikleri kullanmayı ihtiva eder.

const student = db.users.findOne({"name":"Frodo Baggins"},{"address":1})
const addresses = db.address.find({"_id":{"$in":student("address_ids")}})

MongoDB sorgusundan elde edilen sonuçları gösteren terminal penceresi

Katıştırılmış ve Müracaat Yaklaşımları Içinde Seçim Yapma

Hem gömme hem de referanslama modellerinin artıları ve eksileri vardır ve bir seçim yapmadan ilkin birkaç şeyi göz önünde bulundurmanız gerekir. . Yeni başlayanlar için kullanım örneğini göz önünde bulundurmanız gerekir. Veriler yalnızca bir belgeyle ilgili olacaksa, katıştırma en iyi seçeneğiniz olabilir.

Bire oldukça ilişkiler oluşturmak için müracaat modelini yada katıştırılmış modeli kullanabilirsiniz. Yalnızca ilişkilendirmek istediğiniz belgenin müracaat kimliği eklediğinizden, müracaat yapmak temiz ve tutarlı bir belgeyle sonuçlanır.

Sadece, bağlı verileri almak için ihtiyaç duyulan okuma işlemlerinin sayısı nispeten yüksektir ve performansı etkileyebilir. Belgeyi katıştırma performansı artırabilir, sadece iç içe geçmiş birçok belgeyle sıkışık bir koleksiyonla karşılaşabilirsiniz.

Bundan dolayı, belgenizdeki veri ilişkilerinin iyi mi uygulanılacağını seçmek tamamen size kalmış. Belgeyi iyi mi kullanacağınızı, hedeflediğiniz sorgu performans düzeyini ve yapmak istediğiniz takasları göz önünde bulundurun.

Yorum Yap
0 Yorum yapan