Pracuję nad aplikacją PHP, która ma kilka obiektów, które można komentować. Każdy komentarz można poddać głosowaniu, przy czym użytkownicy mogą nadać mu +1 lub -1 (np. Digg lub Reddit). W tej chwili planuję mieć tabelę "głosów", która nosi identyfikator użytkownika i informacje o głosowaniu, co wydaje się działać dobrze.Najlepsza praktyka dla struktury bazy danych z głosowaniem głosowym
Chodzi o to, że każdy obiekt ma setki komentarzy, które są przechowywane w osobnej tabeli komentarzy. Po wczytaniu komentarzy muszę potwierdzić głosy, a następnie indywidualnie sprawdzić każdy głos przeciwko użytkownikowi, aby upewnić się, że mogą głosować tylko raz. Działa to, ale wydaje się, że naprawdę wymaga dużej ilości danych - wiele zapytań tylko o komentarze.
Czy istnieje prostsza metoda wykonania tej czynności, która wymaga mniej intensywnej bazy danych? Czy moja obecna struktura bazy danych jest najlepszym sposobem na przejście?
Aby być jaśniejsze o bieżącej struktury bazy danych:
Komentarze tabela:
- user_id
- object_id
- total_votes
Głosy tabela:
- comment_id
- user_id
- głosowanie
Koniec Cel:
- Pozwól użytkownikowi głosować tylko raz na każdy komentarz z co najmniej # zapytań MySQL (każdy obiekt ma wiele komentarzy)
To bardzo pomaga, dzięki! Ta myśl o posiadaniu dwóch podstawowych kluczy nawet nie przyszła mi do głowy ... – mdolon