2012-08-04 18 views
5

Zastanawiam się,
na wielu stronach internetowych istnieje możliwość polubienia/niechęci do postu.
nawet tutaj oczywiście w stackoverflow.projektowanie baz danych: tabela podobieństw?

Więc, technicznie, to wielki stół lubiany?

user_id post_id 

user_id - który głosował
post_id - która jest po to

to chodziło?
wielki stół lubi?
czy nie ma czegoś bardziej wydajnego/wyrafinowanego?

+0

Na jakiej podstawie sądzisz, że to duży stół? –

+0

Jeśli chcesz zachować informacje o tym, kto podoba się/nie podoba mi się, jest to minimalna ilość danych, które musisz przechowywać. – JJJ

Odpowiedz

5

Na najbardziej podstawowym poziomie, tak, to wszystko.

Ale potem zaczyna się rozwijać, próbując odpowiedzieć na pytania:

  • Ile zrobił użytkownik jak tego postu?
  • Kiedy oni polubili ten post?
  • Jak znaleźli post?
  • Czy skomentowali post?
  • Jak cała grupa/wspólnota jak słupka

Wtedy zaczniesz chcesz odebrać bardziej dogłębne pytania o przyjaciółmi i społecznością.

1

Myślę, że rozumiem twój niepokój. Konieczność wydania COUNT() za każdym razem, gdy strona musi zostać zaprezentowana.

Z pewnością musisz mieć podstawową tabelę, która będzie podstawą funkcji COUNT(), ale nie musisz jej używać() dla każdego dostępu.

Utwórz tabelę podsumowującą i zaktualizuj ją, gdy strona będzie podobna lub nie podobna, za pomocą wyzwalacza lub wywołaj procedurę przechowywaną, aby zaktualizować ją od czasu do czasu.

Powiedziałbym, że każda metoda jest bardziej wskazana dla różnych osobowości witryny, tj. Więcej czytań lub więcej pism, ale już wiesz, że jeśli chodzi o upodobania lub antypatie, nic nie jest niewidoczne.

+0

tak praktycznie, przypuszczam, że dostałem stół Post, który może być lubiany. powinien zawierać pole "likes_counter", które policzy liczbę polubień, więc nie muszę używać COUNT(). dobrze? – socksocket

+0

Prawidłowo. Przy użyciu tabeli docelowej dodanie do niej kolumny jest podejściem, które zapisuje dodatkową tabelę na serwerze. Jeśli możesz zmienić strukturę tabeli docelowej, świetnie. Jeśli nie, utwórz oddzielną tabelę, która będzie zawierać dwie kolumny: targetTableName, totalLikes. Przypuszczam, że masz pełny dostęp do bazy danych. Moje rozważania polegały jedynie na zwróceniu uwagi na różne alternatywy projektowe. –

Powiązane problemy