Witam
Jestem na etapie tworzenia serwisu, którego ideą jest ocenianie przez użytkowników produktów z pewnej kategorii. Każdy użytkownik jest opisany trzema cechami i ocenia w skali od 1 do 10 produkty, którę są dodatkowo określone dwiema cechami.
Wszystko jest zapisywane do bazy i potem przez php na stronie wyświetlają się oceny poszczególnych produktów pogrupowane wg cech użytkowników i produktów, np.
|cecha1 uzytk|cecha2 uzytk|cecha3 uzytk|cecha1 produktu|cecha2 produktu|średnia ocena-7.8|Liczba ocen - 42|
Teraz problem: Mam dwie tabele:
UZYTKOWNICY - tworzona przy rejestracji
id_user
dane_user
mail
cecha1_user
cecha2_user
cecha3_user
PRODUKTY - rekordy są dodawane za każdym razem, gdy ktoś oceni produkt
id_prod
id_user
dane_prod
cecha1_prod
cecha2_prod
cecha1_user
cecha2_user
cecha3_user
ocena
W tej chwili przy wyświetlaniu listy ocen dla poszczególnych produktów mam jednego prostego selecta do tabeli PRODUKTY. Przy coraz większej liczbie uzytkowników i ocen, w tabeli PRODUKTY zaczną mi się powtarzać cechy poszczególnych uzystkowników. Prostym rozwiązaniem jest znormalizowanie tabel, wywalenie z PRODUKTY cech użytkownika, a potem wyciąganie ich przez join z tabeli uzytkownicy.
Teraz moje pytanie - jeśli będzie kilka tysięcy użytkowników i kilkadziesiąt tysięcy ocen produktów, które rozwiązanie będzie wydajniesze? Jeśli użyję joina, to będę mógł odchudzić tabelę PRODUKTY i zaoszczędzę sporo miejsca, z drugiej strony czytałem, że złączanie tabel ma negatywny wpływ na wydajność zapytań