Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Optymalizacja bazy danych, jedna tabela, czy kilka mniejszych tabel
coolos
post 23.03.2010, 14:51:25
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 15.04.2009

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


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

Ten post edytował coolos 23.03.2010, 14:54:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
dziamber
post 23.03.2010, 20:56:26
Post #2





Grupa: Zarejestrowani
Postów: 57
Pomógł: 18
Dołączył: 15.04.2009
Skąd: Kwidzyn

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


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.
Go to the top of the page
+Quote Post
coolos
post 24.03.2010, 10:06:16
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 15.04.2009

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


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.
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: 14.08.2025 - 07:32