Mam pewien dylemat.

Postanowiłem napisać forum jako dodatek do pewnego CMSa, do którego jeszcze nie ma forum :-)
Upraszczajac - mam tabele uzytkownikow, for, grup użytkowników, tabele z dostepami (id, nazwa, czytanie, pisanie, etc) oraz tabele z mapami:
a) forumAccess - forumId -> groupId -> AccessId
cool.gif groupMap - userId -> groupId.

Zalozenie - każdy użytkownik może być przypisany do wielu grup. Czyli mając 1 usera, przypisanego do 2 grup, mając 100 for, dostaje 200 rekordów. Przy 100 uzytkownikach osiągnąć mogę już liczbę 20 000 rekordów.

Oczywiście pobierajac listę for, pobieram tylko 100 rekordów z tych 20 000 możliwych (maksymalne wartości dla danego użytkownika w danej chwili).

Postanowiłem, ze posile się widokami. I tu moje pytanie - czy to dobre podejście do mojego zagadnienia?

Mniej wiecej to będzie wyglądało tak:
1. Zapytanie wyciagajace listę for.
2. Na zapytaniu mam Joina na widoku, który pobiera mi maksymalne wartości z drugiego widoku. Pobiera ono tyle rekordów ile jest for.
3. W tym drugim widoku planuje jeszcze dodać jeden Select poprzez Union All.

Czy to aby nie zapcha mi bazy czasem wykonania zapytania?
Myślałem, aby stworzyć tabele z tymi wynikami, które otrzymuje poprzez widoki i dodawanie/edycje/usuwanie oprogramowac Triggerami. Ale czy to byłoby słuszne? Tabela po czasie miałaby masę rekordów, a ja wybieram dla konkretnego Usera u Forum.

Jak z indeksami w widokach? Dzialaja? I czy działają jeśli zrobię Union All w
widoku?

Czy jak mam w zapytaniu czasem Where/Join na UserId, czasem na ForumId, a czasem na oba pola, to powinienem zastosować indeksy pojedyncze czy złożone, a może jedne i drugie?

Z góry dzięki za odpowiedzi na nurtujace mnie
pytania i wątpliwości.