Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][SQL]Ocenianie produktów - relacje między tabelami
Forum PHP.pl > Forum > Przedszkole
mattix19
Witam,
tworzę serwis z opiniami produktów. Robię to czysto dla nauki programowania i sql dlatego jako początkujący mam problem z relacjami w bazie. Otóż serwis według moich założeń ma pozwalać na kategoryzowanie produktów ich opinię przeż użytkownika raz dziennie oraz dodawanie produktów. Dlatego stworzyłem sobie taką oto struktórę bazy:
<soon>
tabela kategorii zawiera implementację drzewa nesed set. Mój problem natomiast jest taki czy połączone relacje są prawidłowe oraz jaką relacją połączyć użytkowników? Głowię się również jak rozwiązać problem jednorazowego opiniowania czy dodać tabelę z adresami ip czy możę lepiej będzie zrobić to na plikach?
SmokAnalog
Ogólnie schemat wygląda nieźle. Niepotrzebnie jednak w tabelach opinions i photos masz pole z kategorią produktu. To redundancja, ta informacja wynika już z tabeli products.

Co do użytkowników do opinii, to występuje tu relacja jeden do wielu. Jedna opinia jest napisana przez jednego użytkownika, ale jeden użytkownik może napisać wiele opinii. Jeżeli nie chcesz, by Jan Kowalski napisał więcej niż jedną opinię do produktu Baton Mars, to w tabeli opinions, na grupę pól product_id i user_id musisz nałożyć indeks UNIQUE.
mattix19
dzięki wielkie za pomoc
co do pol z id kategorii w opiniach i zdjeciach to nałożył mi je automat w mysql workbench, z którego korzystam. Zaraz poprawię.
SmokAnalog
Zakładam, że chcesz pozwolić na opiniowanie również niezalogowanym, tak? Na pewno nie żadne pliki smile.gif Moim zdaniem najlepiej zrobić tak: w tabeli OPINIONS nie dodawać żadnego pola informującego o autorze opinii. Dodać tabelę zawierającą opinion_id i user_id (zalogowani autorzy opinii) oraz tabelę zawierającą ip oraz opinion_id (autorzy niezalogowani). Masz wtedy piękny schemat bazy danych, jednak mechanizmy dot. blokady opiniowania jednego produktu X razy musiałbyś zaimplementować w systemie. Wszelkie dane będziesz miał, najważniejsza tu będzie data opinii. Masz wtedy taką zaletę, że w łatwy sposób możesz ustalać konkretne wymogi, np. że jeden użytkownik może opiniować jeden produkt raz na X dni, raz na Y godzin, ogólnie tylko raz lub np. bez ograniczeń itd.
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.