Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Projekt bazy danych
Forum PHP.pl > Forum > Bazy danych
kacperix
Witam.

Jestem w trakcie projektowania bazy danych. Jednymi z danych jakie będą w niej gromadzone to opinie użytkowników. Każda opinia będzie się składała z treści, oceny ogólnej i ocen cząstkowych. Otóż nie jestem pewien jak dokładnie składować oceny cząstkowe.

Na początku wyszedłem z założenia, że "definicje" ocen cząstkowych będą przetrzymywane w tabeli Parametry. Każda definicja to id oraz nazwa oceny cząstkowej. Z tej też tabeli byłyby one pobierane i wyświetlany byłby dla nich formularz na stronie www.
Po przesłaniu formularza dane miałby być zapisywane w taki sposób, że do tabeli Opinie wędrowała by treść opinii, ocena ogólna i id użytkownika, a oceny cząstkowe zostały by włożone do tabeli OpiniaParametry (na ERD jest mały błąd, drugie pole ID, które nie jest kluczem głównym powinno się nazywać value). Każdy wpis zawierał by id opinii, id parametru (definicji oceny cząstkowej) oraz wartość odpowiedzi użytkownika (liczby całkowite od 1 do 6). Czyli jeśli np. zdefiniowanych zostałoby 10 ocen cząstkowych to dla jednej opinii w tabeli Opinie, istniałoby 10 wpisów w tabeli OpiniaParametry.

Poniżej przykładowy ERD:



Jednak jak przeanalizowałem to jeszcze raz to ten pomysł wydaje mi się nietrafiony.
Otóż, ocen cząstkowych nie będzie więcej jak 10.

Dlatego też moje pytanie brzmi, czy warto w takim razie rozbijać to aż na 3 tabele?? Zamiast tego zrobić to wszystko na jednej tabeli. Poniżej przykładowe ERD.

prond
Ja bym powiedział tak:
model #1) Daje większą elastyczność przy zmianach parametrów.
model #2) Nieco sztywniej, ale na pewno wydajniej zarówno przy zapisie jak i przy odczycie.
kacperix
No to wiem. Niestety coś za coś.

Wybrałem model pierwszy, bardziej elastyczny.

Z początku budziło to we mnie pewne wątpliwości, więc postanowiłem zrobić małe testy. Wygenerowałem dla wszystkich 3 tabel po 1.5 mln rekordów z losowymi danymi i zacząłem to testować. I wcale nie daje to tak złych wyników czasowych przy szukaniu określonych danych tym bardziej jeśli szuka po indeksach.
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.