Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Optymalizacja bazy danych
Forum PHP.pl > Forum > Przedszkole
coolos
Witam,

Wiem że już podobne tematy były na forum (nawet przeczytałem kilka smile.gif), chciałbym jednak żeby ktoś rozważył mój konkretny przypadek.

Mam mały dylemat przy tworzeniu bazy danych dla strony z bazą programów, gier i sterowników. Oto kilka wariantów o których myślę.

Wariant 1
Dosyć prosty i w porządku dla małej liczby rekordów, ale co w przypadku dajmy na to 10 000 aplikacji, 500 kategorii, 100 000 komentarzy? i około 500-1000 ludzików na stronie? Mogłoby być ciężko jak dla mnie.

Tabela Aplikacje
Id | IdProducenta | IdLicencji | IdKategorii | Nazwa | Wersja | Opis | DataDodania | NazwaProducenta | LinkDoProgramu | TypAplikacji <--- (tzn. Czy sterownik, program czy gra, wartości 1,2 lub 3)

Tabela Kategorie
Id | Nazwa

Tabela Komentarze
Id | IdUzytkownika | IdAplikacji | Komentarz

Tabela Obrazki <-- do jednej aplikacji może być więcej niż 1 obrazek stąd osobna tabela
Id | IdAplikacji | LinkDoObrazka



Wariant 2
Czyli rozbicie wszystkiego na tabele, pasuje od strony logicznej, bo gry, programy i sterowniki maja rożne kategorie. Wszystko jest rozłożone na klilka tabel, więc obciążenie danej tabeli jest mniejsze. Nie podoba mi się natomiast że obrazki rozbite są w 3 różnych tabelach, wolałbym mieć je wszystkie w 1 tabeli, jest to w zasadzie nie możliwe z powodu różnych indexów w każdej z tabel gry, sterowniki, programy.

Tabela Gry
Id | IdProducenta | IdLicencji | IdKategoriiGry | Nazwa | Wersja | Opis | DataDodania | NazwaProducenta | LinkDoProgramu |

Tabela Programy
Id | IdProducenta | IdLicencji | IdKategoriiProgramy | Nazwa | Wersja | Opis | DataDodania | NazwaProducenta | LinkDoProgramu |

Tabela Sterowniki
Id | IdProducenta | IdLicencji | IdKategoriiSterownikii | Nazwa | Wersja | Opis | DataDodania | NazwaProducenta | LinkDoProgramu |

Tabela KategorieGry
Id | Nazwa

Tabela KategorieProgramy
Id | Nazwa

Tabela KategorieSterowniki
Id | Nazwa

Tabela KomentarzeGry
Id | IdUzytkownika | IdGry | Komentarz

Tabela KomentarzeProgramy
Id | IdUzytkownika | IdProgramu| Komentarz

Tabela KomentarzeSterowniki
Id | IdUzytkownika | IdSterownika | Komentarz

Tabela ObrazkiProgramy
Id | IdProgramu | LinkDoObrazka

Tabela ObrazkiGry
Id | IdGry | LinkDoObrazka

Tabela ObrazkiSterowniki
Id | IdSterownika | LinkDoObrazka





Wariant 3 - i ostatni tongue.gif
Czyli wolna amerykanka - możliwość wyboru co chcemy mięć w 1 tabeli, a co w wielu tabelach

Tabela Aplikacja
Id | IdAplikacji | typ | <--- (IdAplikacji to id programu, sterownika lub gry, a Typ określa czy to jest sterownik, program czy aplikacja), dzięki tej tabeli pośredniczącej, każdy z rekordów tabeli, ma swój unikalny indeks.

Tabela Gry
Id | IdProducenta | IdLicencji | IdKategoriiGry | Nazwa | Wersja | Opis | DataDodania | NazwaProducenta | LinkDoProgramu |

Tabela Programy
Id | IdProducenta | IdLicencji | IdKategoriiProgramy | Nazwa | Wersja | Opis | DataDodania | NazwaProducenta | LinkDoProgramu |

Tabela Sterowniki
Id | IdProducenta | IdLicencji | IdKategoriiSterownikii | Nazwa | Wersja | Opis | DataDodania | NazwaProducenta | LinkDoProgramu |

Tabela KategorieGry
Id | Nazwa

Tabela KategorieProgramy
Id | Nazwa

Tabela KategorieSterowniki
Id | Nazwa

Tabela Obrazki
Id | IdAplikacji | LinkDoObrazka




Myślę nad tym i nie wiem który wariant wybrać. Te tabele o których napisałem wyżej są bardziej rozbudowane, ale nie chciałem przytaczać zbędnych danych tylko nakreślić problem. Nie wiem które rozwiązanie jest bardziej optymalne. Czy wariant 3, wprowadzenie dodatkowej tabeli z indexem jest dobrym pomysłem? Obstawiałbym za tym bo dałoby mi to szersze pole manewru. Sam już nie wiem i liczę na podpowiedź mądrzejszych odemnie.

pozdrawiam
dziamber
Według mnie, wariant 2 to najlepsze rozwiązanie. W przyszłości gdybyś chciał zmienić coś w tabeli np. kategorie (wariant1) to zmieniłbyś także w kategoriach gry, programy i sterowniki. Jednak gdy wybierzesz wariant 2 to możesz zmienić sobie w kategorie gry, a pozostałe kategorie pozostają bez zmian. IMO efektywniej pobierać jest tylko kategorie gry, gdy są one potrzebne niż wszystkie kategorie powodując tylko niepotrzebne obciążenia.
coolos
Dzięki za pomoc. Chciałbym żeby ktoś jeszcze podzielił się swoją opinią na ten temat smile.gif. Ale myślę że faktycznie, pójdę w kierunku 2 wariantu lub 3.

Myślę też czy nie lepiej będzie trzymać opisy do programów w osobnych tabelach, bo często wyświetla się samą nazwę programu z linkiem, bez opisów itd. (więc najczęsciej pobieram jakieś 20% danych z wszystkich kolumn). Zmniejszenie kolumn w Tabeli na pewno wpłynie na szybkość pobierania danych z bazy.
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.