Witam.
Stanąłem właśnie przed problemem mądrego zaprojektowania struktur baz danych do mojego serwisu.
Chciałbym przechowywać w bazach dane użytkowników. W założeniu każdy użytkownik(w przykładzie A) może zdefiniować sobie do 5 grup i przydzielić każdego innego użytkownika(dla przykładu nazwijmy go B ) do którejś z tych grup(tylko jednej).
Chciałem ten problem rozwiązać w ten sposób:
Stworzyć 3 tabele
1 – users (id | inne dane bleble)
2 – grupy (id | id_usera | opis_dzialanie_grupy)
3 – polaczenie (id | id_usera | id_grupy | id_usera_przypisanego)

I teraz jeżeli B wchodzi na stronę w której “władzę” ma A z bazy 3 pobierane jest id_grupy gdzie id_usera=A_id i id_usera_przypisanego=B_id. Następnie z 2 pobieramy opis warunków i podejmujemy już odpowiednie działania na stronie.

Przy założeniu że w 1 będzie 100 nie ma problemów ale jeśli np. będziemy mieli 100k userów to już w grupach może być 500k rekordów a w 3 9999k. A jeśli w 1 będzie 300k :/

Mam nadzieję, że problem jest jasno przedstawiony.
Czy takie rozwiązanie jest efektywne, czy jest jakiś lepszy sposób? Jakie macie propozycje, może jakieś własne doświadczenia.

Kolejne pytanie.
Czy ilość kolumn w tabeli ma wielkie znaczenie w szybkości wykonywania skryptów. Tzn czy mimo iż pytam o 3 kolumny z N to czy czas wykonania zapytania będzie wiele dłuższy dla dużego N? Jaka jest optymalna liczba kolumn w tabeli?