Схемата ви изглежда напълно добре, може да видите, че другите (включително мен днес) идваха с повече или по-малко същата структура преди (Съхранение на съобщения от различни чатове в една таблица на базата данни , Схема на базата данни за индивидуален и групов чат , Създаване на частен с нишки система за съобщения като facebook и gmail ). Наистина бих искал да отбележа, че вашето визуално представяне е най-доброто от всички, толкова е лесно за разбиране и следване :)
Като цяло смятам, че имаш "стая" ("чат", "разговор") има смисъл, дори ако нямаш конкретни свойства в момента (както може да е name
, posting_allowed
, type
(т.е. ако използвате повторно подобна структура не само за лични съобщения и чатове, но и за публични публикации с коментари) и т.н. Единична таблица с единичния идентификационен номер на индекса трябва да е супер бърза и да има близо до нула допълнителни разходи, но ще позволи разширение доста лесно, без да е необходимо да променяте целия съществуващ код (т.е. един ден решите да добавите name
към чатове). Поддържане на логиката на roomID „скрита“ вътре в participants
таблицата няма да бъде прозрачна и нито ефективна (т.е. когато трябва да намерите следващия идентификатор на чата), не бих препоръчал това.