MongoDB - modelowanie danych
Dane w MongoDB mają elastyczny schemat schema.documents w tej samej kolekcji. Nie muszą mieć tego samego zestawu pól ani struktury. Wspólne pola w dokumentach kolekcji mogą zawierać różne typy danych.
Projektowanie modelu danych
MongoDB udostępnia dwa typy modeli danych: - Wbudowany model danych i znormalizowany model danych. W zależności od wymagań podczas przygotowywania dokumentu możesz użyć dowolnego z modeli.
Wbudowany model danych
W tym modelu można mieć (osadzać) wszystkie powiązane dane w jednym dokumencie, jest to również znane jako zdenormalizowany model danych.
Na przykład załóżmy, że pobieramy dane pracowników w trzech różnych dokumentach, a mianowicie Personal_details, Contact i Address, możesz osadzić wszystkie trzy dokumenty w jednym, jak pokazano poniżej -
{
_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" } }
Znormalizowany model danych
W tym modelu możesz odwołać się do dokumentów podrzędnych w oryginalnym dokumencie, używając odniesień. Na przykład możesz ponownie napisać powyższy dokument w znormalizowanym modelu jako:
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"
}
Zagadnienia dotyczące projektowania schematu w MongoDB
Zaprojektuj swój schemat zgodnie z wymaganiami użytkownika.
Połącz obiekty w jeden dokument, jeśli będziesz ich używać razem. W przeciwnym razie rozdziel je (ale upewnij się, że nie ma potrzeby łączenia).
Powiel dane (ale ograniczone), ponieważ miejsce na dysku jest tanie w porównaniu z czasem obliczeniowym.
Łączenia wykonuj podczas zapisu, a nie podczas czytania.
Zoptymalizuj swój schemat pod kątem najczęstszych przypadków użycia.
Wykonaj złożoną agregację w schemacie.
Przykład
Załóżmy, że klient potrzebuje projektu bazy danych dla swojego bloga / witryny internetowej i widzi różnice między projektami schematów RDBMS i MongoDB. Witryna ma następujące wymagania.
Każdy post ma unikalny tytuł, opis i adres URL.
Każdy post może mieć jeden lub więcej tagów.
Każdy post ma nazwę wydawcy i całkowitą liczbę polubień.
Każdy post ma komentarze dodane przez użytkowników wraz z ich imieniem i nazwiskiem, wiadomością, datą i polubieniami.
Każdy post może zawierać zero lub więcej komentarzy.
W schemacie RDBMS projekt dla powyższych wymagań będzie miał minimum trzy tabele.
W schemacie MongoDB projekt będzie miał jeden wpis kolekcji i następującą strukturę -
{
_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
}
]
}
Tak więc podczas wyświetlania danych w RDBMS musisz połączyć trzy tabele, aw MongoDB dane będą wyświetlane tylko z jednej kolekcji.