MongoDB bir belge veritabanıdır ve PostgreSQL gibi ilişkisel veritabanları gibi belgeler arasındaki ilişkileri korumaz.
Yine de MongoDB, belgeler arasında ilişkiler oluşturmanıza olanak tanır. Bu ilişkiler, gömülü veya referanslı yaklaşımlarla modellenebilir. Hadi daha yakından bakalım.
Yerleşik İlişkiler vs. Referans İlişkileri
Gömülü bir yaklaşımda, bir belge doğrudan başka bir belgenin içine eklenir ve bu da iç içe geçmiş verilerle sonuçlanır. İşlem ayrıca "denormalizasyon" olarak da adlandırılır.
Referans yaklaşımı ise bir belgeden diğerine işaret etmek için belge referanslarını kullanır. Bu yaklaşıma "normalleştirme" de denir.
MongoDB: Gömülü Belgelerle Bire Bir İlişkiler
Gömülü yaklaşımı kullanarak belgeler arasında bire bir ilişki oluşturabilirsiniz. Bu ilişki, bir belge nesnesi yalnızca bir başka belgeyle ilişkili olduğunda oluşur.
Bir öğrenci veritabanı düşünün. Bu veri tabanı, aşağıdaki belgelerle birlikte öğrenci ve adres koleksiyonlarını içerir.
// Öğrenci Belgesi
{
"öğrenciAdı": "Frodo Baggins",
"telefon Numarası": "987654321",
};
// Adres Belgesi
{
"öğrenciAdı": "Frodo Baggins",
"cadde": "Bagshot Row",
"şehir": "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.
İlişkili: MongoDB'de Veritabanı ve Koleksiyon Nasıl Oluşturulur
Adresin diğer ayrıntılarla birlikte kullanıldığı durumlarda, örneğin bir Öğrenci adı, veritabanını birden çok kez sorgulamanız gerekecek. Bunun dezavantajı, yüksek sayıda okuma işlemi ve dolayısıyla düşük sorgu performansıdır.
Gömülü yaklaşımı kullanarak, adres verilerini doğrudan öğrenci belgesine ekleyebilir ve verileri almak için yalnızca tek bir sorgu kullanabilirsiniz.
{
"öğrenciAdı": "Frodo Baggins",
"telefon Numarası": "987654321",
"adres": [{
"cadde": "Bagshot Row",
"şehir": "Hobiton"
}],
};
Adresi almak için Öğrenci adı, bu sorguyu kullanın.
db.student.findOne({"studentName":"Frodo Baggins"}, {"adres":1})
MongoDB'de Gömülü Belgelerle Bire Çok İlişkiler
Bir öğrencinin birden fazla adresi olduğu bir durumu düşünün. Öğrenci ve adresler arasındaki ilişki bire çok olur.
Gömülü model, öğrenci belgesine birden çok adres eklemenize olanak tanır. Gömülü belgeleri kullanan bire bir ilişkide olduğu gibi, bu yaklaşım nispeten yüksek bir sorgu performansına sahiptir.
{
"öğrenciAdı": "Frodo Baggins",
"telefon Numarası": "987654321",
"adres": [
{
"cadde": "Bagshot Row",
"şehir": "Hobiton"
},
{
"sokak": "Başka Bagshot Sırası",
"şehir": "Hobiton2"
},
]
};
Aşağıdaki sorgu, belirtilen öğrenci adının adreslerini döndürür.
db.student.findOne({öğrenciAdı: “Frodo Baggins”}, {adres: 1})
İlişkili: MongoDB'de Belgeler Nasıl Oluşturulur
Şimdi, daha fazla adresiniz varsa ve bunları adres alanına eklemeye devam ederseniz, belge oldukça hızlı bir şekilde darmadağın olabilir. Çözümlerden biri belge referanslarını kullanmaktır.
MongoDB: Belge Referanslarıyla Bire Çok İlişkiler
Referans yaklaşımını kullanarak bire çok ilişkisini de modelleyebilirsiniz. Bu veri modelinde öğrenci ve adres verileri ayrı koleksiyonlarda tutulacaktır. Öğrenciyi adresiyle ilişkilendirmek için öğrenci belgesine adres kimliklerini içeren bir alan ekleyin.
{
"öğrenciAdı": "Frodo Baggins",
"telefon Numarası": "987654321",
"adres": [
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId("61fa7d19ebdadf8ac71427eb")
]
};
Bir öğrencinin adres ayrıntılarını almak, öğrenci belgesinden adres kimliklerini almayı ve bu kimlikleri koleksiyondan gerçek adresleri almak için kullanmayı içerir.
const öğrenci = db.users.findOne({"ad":"Frodo Baggins"},{"adres":1})
const adresleri = db.address.find({"_id":{"$in":student["address_ids"]}})
Gömülü ve Referans Yaklaşımlar Arasında Seçim Yapma
Hem gömme hem de referans verme modellerinin artıları ve eksileri vardır ve bir seçim yapmadan önce birkaç şeyi göz önünde bulundurmanız gerekir. Yeni başlayanlar için kullanım durumunu göz önünde bulundurmanız gerekir. Veriler yalnızca bir belgeyle ilgili olacaksa, gömmek en iyi seçeneğiniz olabilir.
Bire çok ilişkiler oluşturmak için başvuru modelini veya gömülü modeli kullanabilirsiniz. Yalnızca ilişkilendirmek istediğiniz belgenin referans kimliğini eklediğinizden, referans verme, temiz ve tutarlı bir belgeyle sonuçlanır.
Ancak, bağlı verileri almak için gereken okuma işlemlerinin sayısı nispeten yüksektir ve performansı etkileyebilir. Belgeyi gömmek performansı artırabilir, ancak iç içe geçmiş birçok belgeyle, sıkışık bir koleksiyonla karşılaşabilirsiniz.
Bu nedenle belgenizdeki veri ilişkilerini nasıl uygulayacağınızı seçmek tamamen size kalmış. Belgeyi nasıl kullanacağınızı, hedeflediğiniz sorgu performans düzeyini ve yapmak istediğiniz ödünleri düşünün.
Veritabanlarına farklı bir yaklaşım mı düşünüyorsunuz? MongoDB'de veri modelleme şu şekilde çalışır.
Sonrakini Oku
- Programlama
- Programlama
- veri tabanı
Mary Gathoni, yalnızca bilgilendirici değil aynı zamanda ilgi çekici teknik içerik yaratma tutkusuna sahip bir yazılım geliştiricisidir. Kod yazmadığı veya yazmadığı zamanlarda arkadaşlarıyla takılmaktan ve dışarıda olmaktan hoşlanıyor.
Haber bültenimize abone ol
Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!
Abone olmak için buraya tıklayın