Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System oceniania TAK/NIE
Forum PHP.pl > Forum > Bazy danych > MySQL
proton
Tworzę teraz prosty system oceniania TAK/NIE, który będzie wykorzystywany w kilku miejscach strony (newsy, artykuly, filmy itd.), i zastanawiam się nad tym, jak zaprojektować do tego bazę danych. Mam dwa pomysły:

1 - W tabeli każdych materiałów (tabela news, artykuly, filmy), dodaje dwa dodatkowe pola ocena_tak, ocena_nie. Zaletą jest to, że aby sprawdzić ocenę, nie muszę wykonywać dodatkowych zapytań do bazy danych, a robię to wraz z wyciąganiem samego tekstu. Minusem jest to, że w razie jakichś zmian, dajmy dodanie opcji "nie wiem", muszę zmieniać tabele w każdych materiałach.

2 - Tworze osobną tabele oceny, gdzie mam pola ocena_tak, ocena_nie, id, typ, gdzie id określa id np. newsa, a typ czy jest to właśnie news, czy artykuł itd. W tym przypadku wadą jest to co było zaletą w pierwszym sposobie (dodatkowe zapytania), natomiast zaletą jest to co byłą wadą w pierwszym (łatwa modyfikacja w przyszłości, tego systemu).

Który sposób polecacie?
mkozak
Polecam mix,
Problem polega na tym, że można kliknąć kilka razy TAK, albo nie.

Polecam tabelkę:
id, user_id, mod (moduł: news, art itd.), mod_id (klucz główny), ocena (-1 lub 1), data

aby zabezpieczyć się przed powstawaniem dubli robisz klucz UNIQ dla 3 pól user_id, mod, mod_id.
(w ogóle to kolejne moduły dał bym jako nr i w komentarzu pola dopisz sobie słownik 1 - news, 2 - art, 3 - galeria)

do każdej tabelki news, art itd dodaj pole ocena gdzie wartość po każdym udanym inser-cie w tabelce zaproponowanej wyżej będzie np.: "UPDATE news SET ocena = ocena +1 WHERE id = 997" na tak i -1 na nie.

Teraz:
1. łatwo będzie ci wyświetlić ocenę danego newsa (nie musisz wszystkiego sumować i obciążać bazę).
2. będziesz miał kontrolę nad tym, czy dany user kliknął, czy nie.
3. w razie rozbieżności w danych możesz wszystko przeliczyć jeszcze raz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.