MongoDB - Veri Modelleme
MongoDB'deki verilerin aynı koleksiyonda esnek bir schema.documents var. Aynı alan kümesine veya yapıya sahip olmaları gerekmez Bir koleksiyonun belgelerindeki ortak alanlar farklı türde verileri tutabilir.
Veri Modeli Tasarımı
MongoDB iki tür veri modeli sağlar: - Gömülü veri modeli ve Normalleştirilmiş veri modeli. İhtiyaca bağlı olarak, belgenizi hazırlarken modellerden herhangi birini kullanabilirsiniz.
Gömülü Veri Modeli
Bu modelde, ilgili tüm verileri tek bir belgeye yerleştirebilirsiniz (gömebilirsiniz), aynı zamanda normalleştirilmiş veri modeli olarak da bilinir.
Örneğin, çalışanların ayrıntılarını Kişisel_ayrıntılar, İletişim ve Adres olmak üzere üç farklı belgede aldığımızı varsayalım, üç belgenin tümünü aşağıda gösterildiği gibi tek bir belgeye yerleştirebilirsiniz -
{
_id: ,
Emp_ID: "10025AE336"
Personal_details:{
First_Name: "Radhika",
Last_Name: "Sharma",
Date_Of_Birth: "1995-09-26"
},
Contact: {
e-mail: "[email protected]",
phone: "9848022338"
},
Address: {
city: "Hyderabad",
Area: "Madapur",
State: "Telangana"
}
}
Normalleştirilmiş Veri Modeli
Bu modelde, referansları kullanarak orijinal belgedeki alt belgelere başvurabilirsiniz. Örneğin, yukarıdaki belgeyi normalleştirilmiş modelde şu şekilde yeniden yazabilirsiniz:
Employee:
{
_id: <ObjectId101>,
Emp_ID: "10025AE336"
}
Personal_details:
{
_id: <ObjectId102>,
empDocID: " ObjectId101",
First_Name: "Radhika",
Last_Name: "Sharma",
Date_Of_Birth: "1995-09-26"
}
Contact:
{
_id: <ObjectId103>,
empDocID: " ObjectId101",
e-mail: "[email protected]",
phone: "9848022338"
}
Address:
{
_id: <ObjectId104>,
empDocID: " ObjectId101",
city: "Hyderabad",
Area: "Madapur",
State: "Telangana"
}
MongoDB'de Şema tasarlarken dikkat edilecek noktalar
Şemanızı kullanıcı gereksinimlerine göre tasarlayın.
Bir arada kullanacaksanız, nesneleri tek bir belgede birleştirin. Aksi takdirde onları ayırın (ancak birleştirme gerekmediğinden emin olun).
Verileri çoğaltın (ancak sınırlı) çünkü disk alanı, hesaplama zamanına kıyasla ucuzdur.
Okurken değil, yazarken katılın.
Şemanızı en sık kullanım durumları için optimize edin.
Şemada karmaşık toplama yapın.
Misal
Bir müşterinin blogu / web sitesi için bir veritabanı tasarımına ihtiyacı olduğunu ve RDBMS ile MongoDB şema tasarımı arasındaki farkları gördüğünü varsayalım. Web sitesi aşağıdaki gereksinimlere sahiptir.
Her gönderinin benzersiz başlığı, açıklaması ve url'si vardır.
Her gönderinin bir veya daha fazla etiketi olabilir.
Her gönderi, yayıncısının adını ve toplam beğeni sayısını içerir.
Her gönderide, kullanıcılar tarafından adları, mesajları, veri zamanı ve beğenileriyle birlikte verilen yorumlar bulunur.
Her gönderide sıfır veya daha fazla yorum olabilir.
RDBMS şemasında, yukarıdaki gereksinimler için tasarım en az üç tabloya sahip olacaktır.
MongoDB şemasında, tasarımda bir koleksiyon gönderisi ve aşağıdaki yapı bulunur -
{
_id: POST_ID
title: TITLE_OF_POST,
description: POST_DESCRIPTION,
by: POST_BY,
url: URL_OF_POST,
tags: [TAG1, TAG2, TAG3],
likes: TOTAL_LIKES,
comments: [
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
},
{
user:'COMMENT_BY',
message: TEXT,
dateCreated: DATE_TIME,
like: LIKES
}
]
}
Bu nedenle, verileri gösterirken, RDBMS'de üç tabloyu birleştirmeniz gerekir ve MongoDB'de veriler yalnızca bir koleksiyondan gösterilecektir.