Podany przez Ciebie przykład, podobnie jak większość rzeczywistych przykładów relacji wiele do wielu, jest w rzeczywistości przykładem kilku do kilku relacja. Możesz mieć wiele restauracji i wielu jadłodajni, ale w porównaniu z całym zestawem, każda dana restauracja serwowała tylko mały podzbiór gości, a większość indywidualnych gości odwiedziła tylko mały podzbiór restauracji. Brzmi to jak słabo połączona sieć, w której współczynnik gęstości łączy jest znacznie niższy niż jeden.
Pytałeś jednak o wiele do wielu, więc może użyjemy sieci neuronowej jako przykładu? Sieci neuronowe często tworzą gęste sieci, a zatem reprezentują prawdziwą sieć wiele-do-wielu. W takim przypadku odpowiedź jest prosta - nie używaj mongoDB. Korzystaj z niestandardowych struktur i strategii serializacji dostosowanych do Twoich konkretnych wymagań. W końcu prawdziwe relacje wiele-do-wielu prawie zawsze są wartościami odstającymi, a więc uzasadniają określone leczenie.
Mając to na uwadze, modelowanie bardziej typowych kilku do kilku związek w mongoDB można osiągnąć bez poświęcania bogatej struktury dokumentu, a sposób, w jaki to osiągniesz, zależy od twoich wzorców dostępu.
Tak więc w przykładzie z siecią restauracji/jadalni, jeśli zazwyczaj zamierzasz wysłać zapytanie do restauracji w jej restauracjach, utworzysz tablicę identyfikatorów diner_id przechowywanych w każdej restauracji. Inny sposób oznaczałby tablicę identyfikatorów restauracji przechowywanych z każdą kolacją. Oba dla dwukierunkowych możliwości zapytań.
Należy zachować ostrożność, ponieważ w mongoDB nie ma ograniczenia klucza_obcego, a zatem utrzymanie integralności referencyjnej danych jest Twoim obowiązkiem.
Jeśli wydajność jest dla Ciebie najważniejsza, możesz chcieć osadzić dane w każdym dokumencie, zamiast odwoływać się do nich za pomocą identyfikatora. Jest to opcja o wyższej wydajności do odczytu (nie do zapisu), ponieważ wszystkie dane można pobrać z dysku jednym uderzeniem. Oznacza to, że będziesz musiał wykonać więcej pracy podczas aktualizowania wartości danych, aby zapewnić integralność danych, ale często nie jest to tak przerażające, jak się wydaje. Jak często goście naprawdę zmieniają swoje imiona? W zależności od rozmiarów dokumentu, niekoniecznie chcesz osadzić cały dokument, podzbiór danych plus identyfikator wskazujący na pełny rekord często wystarczy.
Krótko mówiąc, projekt schematu mongoDB powinien być kierowany przez wymagania aplikacji. Różne schematy dla różnych aplikacji w przeciwieństwie do jednej monolitycznej relacyjnej bazy danych, która zarządza nimi wszystkimi. Jaka jest rzeczywistość danych? W jaki sposób aplikacja faktycznie wykorzystuje te dane? Jak duże są przechowywane obiekty dokumentów? Odpowiedz na te pytania, a Twój schemat praktycznie sam się zaprojektuje.