Przykładowa baza danych z jedną tabela wyglądała by mniej więcej takt
Id
Id_sender
Id_recipient
(pomijam treść, czas, itd)
Zapelnijmy ja przykładowy I danymi:
Id sender recipient
1 1 5
2 1 6
3 5 1
4 6 5
5 5 6
I teraz tabele robi się coraz większą, są tysiące wiadomości. Gdy będę chciał wyświetlić listę konwersacji użytkownika o id=1 będę musiał sprawdzac kolumny sender i recipient czy takowe ID istnieje w nich, jeżeli tak to sprawdzać czy mam już pobrany wiersz o id z warunku powyżej. Dodatkowo będą przypadki gdzie w jednym wierszu sender=1 a recipient=5 a w następnym odwrotnie. To podwaja wiersze (wynik). Jak dobrze wszystko opisałem wydaje mi się że takie rozwiązanie traci na szybkości działaniu. Poza tym, sposób ten eliminuje ko wersacje z wieloma użytkownikami (chyba że pole recipient ustawie jako tekstowy i będę zapisywać id odbiorców oddzielnych np przeciwnikiem. Lecz wydaje mi się że to najgorsze rozwiązanie).
Dlatego chciałbym napisać/zaprojektować to w taki sposób aby działało szybko, dało się rozbudować.