Cześć,

Chciałem zapytać jak najlepiej zaprojektować moduł prywatnych wiadomości (PHP + MySQL).

W systemie wyróżniamy następujące role użytkowników:
- Klient:
- Specjalista
- Starszy Specjalista
- Administrator

Zasada działania:
- Klient może wysłać maila tylko do Specjalistów. Wysłana wiadomość jest widoczna przez wszystkich specjalistów i starszych specjalistów.
- Specjalista, Starszy Specjalista i Administrator mogą wysyłać do wiadomości zarówno do jednego klienta, kilku, jak i do wszystkich. Widomość widoczna tylko przez adresatów. Widzą zarówno wiadomości grupowe, jak i prywatne.

Pytanie:
1. Jak najlepiej zaprojektować i zrealizować działanie (logika) opcje, że wszyscy pracownicy powinni widzieć wiadomość od użytkownika.
2. Gdzie najlepiej umieścić informację o autorze i odbiorcy wiadomości, w jakiej tabeli
3. Grupowe odczytywanie wiadomości, czy tworzyć dodatkowe aliasy, czy wykorzystać istniejące grupy użytkowników, lub inny pomysł

Przykładowe opcje, ale może moglibyście podsunąć lepszy pomysł.

Baza

1. Tabela user
- id
- name
- group_id

2. Tabela wiadomości - Wstępnie bez autora i odbiorcy, tylko tytuł, treść, data
- id
- rodzic_id
- tytuł
- treść
- data utworzenia

OPCJA 1
Dodatkowa tabela z relacją wielu do wielu

Tabela wiadomość_status
- id
- wiadomość_id
- user_id
- folder ENUM (odebrane, wysłane, kosz, spam)
- status ENUM (autor, odbiorca)

Tylko że takie rozwianie powoduje że jeżeli użytkownik wyśle wiadomość, musiałbym wstawić
- jeden rekord z dostępem dla użytkownika
- kilkanaście rekordów, dla pracowników, oddzielny rekord dający dostęp do wiadomości dla każdego pracownika.
Plus jest taki, że wtedy każdy użytkownik może zmienić folder widomości tylko dla siebie.

OPCJA 2
Dodanie typu widomości, czy grupowa, czy indywidualna. Jeśli wiadomość wysłana do grupy to wtedy wpisuje w pole group_id, jeżeli do pojedynczego użytkownika, lub do kilku, wtedy wpisuje w user_id

Tabela wiadomość_status
- id
- wiadomość_id
- typ ENUM (grupowa, indywidualna)
- group_id
- user_id
- folder ENUM (odebrane, wysłane, kosz, spam)
- status ENUM (autor, odbiorca)

Inne opcje lub jakiś ciekawy wpis w Internecie opisujący logikę działania.