Wpis z mikrobloga

#programowanie cześć! Mam pytanie do ekspertów bazodanowych (na pewno tu jacyś są ;)). Załóżmy, że chcę stworzyć w moim programie system wiadomości, które będę wysyłał do wszystkich użytkowników. Ważną rzeczą jest to, że potrzebna będzie informacja, czy dany użytkownik tą wiadomość już przeczytał. Czy typowym podejściem jest stworzenie relacji one to many między encją User a encją Message i przechowywanie w każdym obiekcie Message pola boolean z informacją czy użytkownik przeczytał daną wiadomość? Tym co mi się nie podoba w takim podejściu jest fakt, że taka sama wiadomość jest tworzona tak wiele razy, ile jest użytkowników. Np. jeżeli mam 100k użytkowników, to będę musiał stworzyć 100k wiadomości. Czy to będzie problem w przypadku dużych systemów? Stworzenie relacji many to many jeszcze bardziej komplikuje sprawę, bo dla np. 100k użytkowników, wysłanie 100 wiadomości stworzy w tabeli pośredniczącej 10 milionów rekordów... ktoś z was pracował może nad taką funkcjonalnością i wie jak to elegancko rozwiązać?
  • 8
  • Odpowiedz
@htfhere: Możesz zrobić właśnie to oneToMany, dodaj sobie booleana readed i (to z railsów podpatrzyłem) timestamp kiedy utworzony. Masz wtedy możliwość jak na fb np. pokazania ile tych nieprzeczytanych wiadomości ma user. Z timestampem będzie ci łatwo bo jako query criteria podasz DateTime.now i readed is false. Możesz też zrobić OneToMany i dodatkowo OneToOne żeby zapisać tą ostatnią w profilu, ale to będziesz miał tylko jedną - a co jak
  • Odpowiedz