Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odwoływanie do innych tabel a optymalizacja
maciek257
post 29.01.2018, 13:54:03
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 5.08.2013

Ostrzeżenie: (0%)
-----


Cześć,

Stworzyłem portal zawierający pewne oferty. Są one przypisane do kategorii oraz posiadają różne parametry (zależne od kategorii, w której się znajdują).
Przypuśćmy, że chcę wywołać listę 100 ofert (bez paginacji). Na tej liście jest podana kategoria oraz parametry dla każdej z ofert.

Pytania brzmią:

1. Czy podczas dodawania ofert do bazy dodawać kategorię w tabeli "Oferty" jako:

a. pole tekstowe z pełną nazwą kategorii
b. id kategorii, która znajduje się w osobnej tabeli "Kategorie" (połączenie kluczem obcym)

Tu dodam, że tabela z kategoriami i tak musi istnieć w innych celach.

2. Czy podczas dodawania ofert do bazy dodawać parametry do:

a. wielu stworzonych kolumn w tabeli "Oferty"
b. osobnej tabeli z parametrami (połączenie kluczem obcym)

Z punktu widzenia zachowania odpowiedniej struktury tabel w obu przypadkach padłaby zapewne odpowiedź "b" natomiast z punktu widzenia optymalizacji dla mnie (laika) odpowiedniejsze byłyby rozwiązania "a" ponieważ podczas wywoływania 100 ofert nie kluczymy 100 razy po 3 tabelach, aby uzyskać odpowiednią finalną tabelę wyników tylko pobieramy rekordy z jednej tabeli.

Zastanawiam się jaki wpływ na prędkość działania zapytań ma stosowanie odwołań do innych tabel.
Czy ma to wpływ marginalny i przy odpaleniu strony ze 100 wynikami przez 1000 osób jednocześnie nie będzie zauważalnej różnicy w przeciążaniu serwera?

Będę wdzięczny z opinie.
Pozdrawiam.
Go to the top of the page
+Quote Post
Pyton_000
post 29.01.2018, 14:20:25
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Generalnie oba B.

Zauważ że np. jak byędziesz wyświetlał ofertę to pewnie będziesz chciał jakiś breadcrumb podać. Co za tym idzie fajnie jest mieć kategorię. Mając nazwę i tak musisz pobierać jej ID, a mając ID już nie.

Druga sprawa jeśli chodzi o normalizację i wydajność.
Jeśli Ci się nie podoba robienie JOIN to możesz zrobić sobie `view` w BD które wyciągnie Ci odpowiednie elementy. Inaczej możesz też napisać raz zapytanie w kodzie i na to samo wyjdzie.

Co do wydajności to tutaj nie ma takiego dużego znaczenia. Silnik BD ma wbudowany cache, więc jeśli będą dobrze dobrane indeksy to oba rodzaje zapytań (z JOIN i bez) będą porównywalne.
Aczkolwiek czasami warto zdenormalizować BD ale tylko w przypadkach gdy obliczenie jakieś wartości zajmuje dość dużo czasu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 06:37