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.