Hej, piszę małą aplikacje powiedzmy że podobną do fejsbuka, generalnie mam problem z systemem lajków, tzn jak zaprojektować tabele w bazie żeby np. przy wyświetlaniu postów były zaznaczone posty które użytkownik już zalajkował wcześniej. Wymyśliłem pewnie rozwiązanie które chyba będzie działać ale zastanawiam się czy można to zrobić jakoś lepiej. W załączniku przesyłam fotkę ERD. Z góry dzięki za sugestie.
Teoretycznie można by zrobić pomiędzy postami, a użytkownikiem relacje wiele do wielu. To znaczy tabela "Like" zawierałaby tylko UserId i PostId. Te dwa atrybuty tworzyły by klucz główny. Informacja byłaby zachowana. Co w przypadku jeżeli zechcesz w przyszłości wprowadzić przycisk "nie lubię", lub inne ikonki jak to zrobił facebook ? Wówczas taka "Like" zostałaby zamieniona na jakąś relację emocji/ocen jak zwał tak zwał i dodatkowo przechowywałaby klucz obcy do nowej tabeli Typu emocjo (lubię to, nie lubię tego, jest to do kitu etc.)
ale tak jak masz teraz to jeden post może być oceniony tylko raz i tylko przez jednego usera
Nie za bardzo rozumiem jak to by miało działać. Są dwie sytuacje. Użytkownik może pisać posty i może je lajkować.
Jeżeli usunę tabelę Like to skąd będę wiedział które posty użytkownik zalajkował, a które posty napisał ? Jak stworzę relację wiele do wielu to stworzy mi się taka sama tabela jak mam w sumie czyli ten Like
Wyświetlam listę postów które należą do jakiegoś użytkownika - po UserId ich szukam i wyświetlam. Właściwość ThumbUp mówi mi ile post o danym id ma lajków. Jak mam jeszcze z tej tabeli wyciągnąć informacje który konkretnie post jest zalajkowany przez tego użytkownika ?
Jak mam tabelę Like i użytkownik lajkuje jakiś post to robię coś takiego
public ActionLink Like(int postId, int userId)
{
//pseudokod!
Like like = new Like()
{
like.postId = postId,
like.userId = userId
};
Like like = Context.Likes.Add(like);
post.ThumbUp = post.ThumbUp + 1;
Context.Likes.Add(like);
Context.SaveChanges();
}
@mariano901229 proszę o jakiś komentarz