• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

MongoDB - ogólna struktura bazy danych i relacje

42 Warsaw Coding Academy
+2 głosów
934 wizyt
pytanie zadane 24 września 2022 w SQL, bazy danych przez Bartłomiej Sikora Użytkownik (750 p.)

Witam!

Od niedawna zacząłem poznawać Node.js i przy okazji poznałem MongoDB. Jak dotąd miałem do czynienia wyłącznie z bazami SQL i nie do końca rozumiem zamysł nierelacyjnych baz danych, a przede wszystkim relacji wiele do wielu. 

Rozważmy to na przykładzie teoretycznej aplikacji do fiszek. W bazie danych przechowywał będę talie (zestawy) fiszek. Każdy użytkownik będzie mógł więc rozpocząć naukę z wybranymi zestawami i zapisywać swój postęp nauki. W relacyjnej bazie danych stworzył bym więc następujące tabele:

  • fiszki,
  • talie (w niej informacje o tym, które fiszki znajdują się w której talii / taliach),
  • użytkownicy,
  • postępy (tutaj informacje o tym, które fiszki dany użytkownik już zna, a których nie).

Jak jednak zrobić to w bazie nierelacyjnej. Zapewne stworzę kolekcję z zestawami, a wewnątrz dokumentu danego zestawu znajdą się wszystkie fiszki. (Co z ewentualnymi fiszkami, które znajdowały by się w wielu taliach?). Dodatkowo będzie kolekcja użytkowników.

W jaki sposób mogę zapisać postępy? Jak połączyć te dane? Za pomocą ID?

Czy przy tworzeniu aplikacji należy zastanowić się z jakiego typu bazy danych skorzystać, może MongoDB nie nadaje się do tego typu aplikacji i lepsza będzie baza SQL?

Z góry dziękuję za odpowiedź! 

2 odpowiedzi

+6 głosów
odpowiedź 25 września 2022 przez Comandeer Guru (607,060 p.)
wybrane 5 października 2022 przez Bartłomiej Sikora
 
Najlepsza

Czy przy tworzeniu aplikacji należy zastanowić się z jakiego typu bazy danych skorzystać, może MongoDB nie nadaje się do tego typu aplikacji i lepsza będzie baza SQL?

Zawsze przy tworzeniu aplikacji należy się zastanowić, jakie technologie będą najlepsze do jej stworzenia. I faktycznie, dla danych, w których jest dużo relacji (albo są oparte głównie na relacjach), wybranie czegoś SQL-owego może być lepsze. Zwłaszcza, że takie PostgreSQL ma dość sensowną obsługę dokumentów JSON, więc do pewnego stopnia możemy dostać coś na wzór Mongo.

Natomiast co do wiele do wielu, to są dwie metody. Pierwszą z nich jest faktycznie zamieszczanie bezpośrednio w taliach fiszek. Ale bardzo szybko doprowadzi to do powstania sporej liczby duplikatów. Więc częściej stosuje się rela referencje ;) Każdy obiekt w Mongo ma swoje unikalne ID i to ID można użyć do wskazania na jakiś obiekt w innej kolekcji. Czyli coś zbliżonego po prawdzie do kluczy obcych w SQL-u. Żeby uzyskać coś naprawdę zbliżonego do kluczy obcych, używa się często rozwiązań pokroju Mongoose. Pozwalają one narzucić określoną strukturę na bazę danych.

+1 głos
odpowiedź 26 września 2022 przez tmar1212 Bywalec (2,600 p.)
Generalnie, noSQL uzywasz, jak masz nieustrukturyzowane dane.

https://www.mongodb.com/nosql-explained/when-to-use-nosql
komentarz 2 października 2022 przez Wiciorny Ekspert (280,610 p.)

 bazy danych NoSQL często pozwalają programistom kontrolować strukturę danych, więc - nie. 

Podobne pytania

+1 głos
1 odpowiedź 1,385 wizyt
pytanie zadane 6 grudnia 2018 w PHP przez User007 Bywalec (2,420 p.)
0 głosów
0 odpowiedzi 474 wizyt
pytanie zadane 30 maja 2020 w Java przez MarkoMarecki Nowicjusz (120 p.)
0 głosów
1 odpowiedź 707 wizyt

93,377 zapytań

142,379 odpowiedzi

322,524 komentarzy

62,724 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...