konto usunięte
Temat: MongoDB a zależności pomiędzy tabelami
Uszanowanie,takie pytanie do tych którzy bawią się z MongoDB. Zrobiłem sobie relatywnie prosty ORM dla MongoDB w którym za cel postanowiłem sobie - nigdy nie zaglądać do bazy danych.
Więc łącząc się z bazą danych bezczelnie pobieram listę kolekcji i indeksów. Mappery które zajmują się zapisem/odczytem mają w sobie wpisane
- źródło danych czyli nazwę kolekcji
- listę pól na które należy nałożyć indexy
W momencie pierwszego odwołania do jakiejkolwiek kolekcji, Mapper sprawdza czy takowa nie została stworzona (porównując z listą kolekcji którą pobrał po połączeniu) oraz sprawdza czy indexy dla kolekcji się pokrywają.
Jeżeli nie to przy pierwszym zapisie nakaże nałożyć brakujące indexy co sprawia że owa operacja jest robiona tylko raz tak jak wydaje mi się - powinno się odbyć.
I ogólnie wszystko cacy. Zmiany w aplikacji nie wymagają ode mnie zmiany struktury w bazie danych czy czegoś w tym stylu. Wszystko co robię to dodaję/usuwam nowe pole w obiekcie danych lub dodaje nowy mapper które będzie reprezentował kolekcję i po sprawie. Działa.
Ostatnio nawet pobawiłem się w ten sposób że jeżeli zrobimy połączenie do 2 lub więcej odrębnych baz MongoDB, aplikacja nadal widzi ją jako jedną co znacząco upraszcza życie. To na przyszłość.
Został mi JEDEN orzech do zgryzienia. Zależności. W relacyjnych bazach danych sprawa jest prosta. Klucze obce załatwiają za mnie sprawę czyszczenia bazy usuwając wszystkie rekordy zależne jak leci.
Niestety MongoDB nie oferuje czegoś takiego.
Więc zastanawiam się JAK czyścić dane z innych kolekcji które są w jakikolwiek sposób kojarzone z kolekcją z której usuwam dane ? Jak na razie pomysłów mam niewiele. Jednym z nich były kolekcje pośrednie mające nazwę składającą się z nazw 2 kolekcji. I z jej użyciem usuwać dane zależne. Nie było by z tym problemu z uwagi na to że jak mówiłem - po połączeniu obiekt bd przechowuje listę kolekcji które mam w bd. Konfliktów nazw by nie było bo jako standard używam Camela a te łączył bym za pomocą "_".
Ktoś inny mówił żeby po prostu dokładać dane do tabeli users ale to mi się nie widzi z kilku przyczyn.
Jakieś sugestie ?