Android + SQLite a drzewa MLM

0

Mam problem. Potrzebuje przechowywać w bazie informacje o rodzicu (promotorze) każdej osoby. Np. Ania jest rodzicem Kasi i Daniela i Marysi, a Marysia jest rodzicem Damiana i Artura. Wychodzi nam drzewo, i potrzebuję sposobu na odczytywanie ID wszystkich należących do grupy dajmy na to Ani. W naszym przykładzie grupa Ani to wszystkie osoby, Grupa Kasi to tylko Kasia a grupa Marysia to Marysia Damian i Artur. Jako że używam androida to mam bazę SQLite. Nie ma tam rekusji, więc nie rozwiążę tegow prosty sposób. Jedyne co przychodzi mi do głowy to budowanie całego drzewa w Javie i wczytywanie go z bazy, a później operacje także w Javie. Ma ktoś może pomysł jak to odpowiednio rozwiązać ? Jaka struktura bazy byłaby odpowiednia żeby bez rekursji dało się wyciągnąć taką listę ID grupy ?

0

Z tego co piszesz to kojarzy mi się prolog, ale nawet nie wiem czy dobrze... (Jest jakaś biblio dla javy z tego co kojarze). Masz tam w prologu jakby takie pary. Krysia jest matką Joli, Krysia jest matka Zbyszka, można wyciągnąć wszystkie dzieci Krysi. Oczywiście są też bardziej skomplikowane konstrukcje. Pomyśl czy w tym wypadku to nie byłoby lepsze od SQLITE. Ps H2 jest chyba też wspierana przez android.

0

Tak czy siak muszę korzystać ze SQLite, takie wymagania. Jakieś inne pomysły ktoś ma ?

0

No jeszcze jest ORMLite. Tylko pamiętaj że są to lokalne bazy danych i nie wystawisz ich na zewnątrz

0

To mnie kompletnie nie interestuje, jedyne czego potrzebuje to stworzyć takową bazę na kompie, zrzucić ją razem z apką i apka musi z niej korzystać. Nie ma sposobu w jaki mógłbym to zrobić w SQLite ? Muszę koniecznie zmienić bazę ?

0

Przez ADB możesz pisać zapytania do sqlite.
Ale jeśli chcesz tą apkę udostępniać dalej no to musisz tworzyć bazę podczas instalacji apki i uzupełniać ją danymi

0

Dane można by też składować chociażby w XML, który to przecież znakomicie powinien się nadawać do tych drzewiastych struktur danych i opcjonalnie do tego zastosować jakiś Active Record pattern, czy coś tam podobnego.

Co do SQLite, można by się zastanowić nad czymś takim.

id integer primary key autoincrement,
parent_id integer,
level integer
...

I tak level może się zaczynać np. od 0, co będzie oznaczało że np. ta Ania jest na pierwszym poziomie (pierwsza weszła do MLM na samym początku), kolejno 1 może być dla tych co wprowadziła (Kasia, Daniel, Marysia), 2 dla Damiana i Artura.

I teraz żeby odczytać wszystkie ID tych co należą do Ani (pierwszego poziomu) trzeba by pewnie kolejno jechać i to już zapewne za pomocą algorytmu, sprawdzając kolejne poziomy tzn. kto ma parent_id jako Ania, jak ich znajdzie to znowu kolejne poziomy kto ma parent_id wskazujące na Kasię, Daniela i Marysię. Bez rekurencji tu się chyba nie obejdzie. I raczej nie sądzę żeby tu były jakieś specjalne problemy z wydajnością, biorąc pod uwagę szybkość SQLite.

0

Gdyby kogoś interesowało to rekurencja zrealizowana pod stronie Javy działa płynnie przy bazie około 500 osób. Więcej nie próbowałem, tyle mi wystarczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1