Twój schemat wygląda doskonale, możesz zobaczyć, że inni (w tym ja dzisiaj) mieli mniej więcej taką samą strukturę wcześniej (Przechowywanie wiadomości z różnych czatów w jednej tabeli bazy danych , Schemat bazy danych dla czatu indywidualnego i grupowego , Tworzenie wątku prywatnego system przesyłania wiadomości, taki jak facebook i gmail ). Naprawdę chciałbym zauważyć, że Twoja wizualna reprezentacja jest najlepsza ze wszystkich, jest tak łatwa do zrozumienia i śledzenia :)
Ogólnie rzecz biorąc, uważam, że posiadanie „pokoju” („czatu”, „rozmowy”) ma sens, nawet jeśli w tej chwili nie masz żadnych konkretnych właściwości (ponieważ może to być name
, posting_allowed
, type
(tj. jeśli ponownie używasz podobnej struktury nie tylko do prywatnych wiadomości i czatów, ale np. do publicznych postów z komentarzami) i tak dalej. Pojedyncza tabela z pojedynczym identyfikatorem indeksu powinna być superszybka i mieć prawie zerowy narzut, jednak pozwoli na dość łatwe rozszerzenie bez konieczności modyfikowania całego istniejącego kodu (np. pewnego dnia zdecydujesz się dodać name
do czatów). Utrzymywanie logiki RoomID „ukrytej” wewnątrz participants
tabela nie będzie ani przejrzysta, ani wydajna (np. gdy musisz znaleźć kolejny identyfikator czatu), nie polecałbym tego.