Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql]Optymalizacja struktury bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
emilgubala
OK. Mamy mały problem. Planujemy właśnie bazę do pewnego projektu.
Jak to mówią gdzie polaków dwóch tam trzy zdania biggrin.gif
Nie możemy dojść do porozumienia wiec postanowiłem aby zapytać kogoś z zewnątrz...
Chciałbym was poprosić o podanie które z przedstawionych przezemnie rozwiązań będzie działać szybciej...

Projekt to coś w stylu bazy firm. Wiadomo może sie rozrosnąć (wiadomo też że nie musi... ale lepiej pomysleć o optymalizacji na początku dlatego zakładamy że sie rozrośnie...)

Przyjmijmy że będziemy mieli około 5000 rekordów. (sprawdzałem po innych takich projektach jest nawet i ponad 10000 smile.gif

problem pojawił się przy zaplanowaniu bazy danych
w skrucie przyjmijmy ze informacje jakie chcemy przechować to:

nazwa firmy i branża i wszelkie_różności

z powodu przeznaczenia projektu - nawet budowy samego layouta gdzie w menu na pierwszej stronie
są kategorie (nie wspominając o wyszukiwarkach)
bardzo czesto bede musiał z bazy wybierać firmy z danej branży praktycznie każde wejscie na strone = wybranie informacji o firmach z danej branży...

pierwsza propozycja jest taka aby trzymać to wszystko w jednej tabeli wiec tak jak leci:

-------------------------------------------------
ID | Nazwa firmy | Branża | wszelkie_różności |
-------------------------------------------------
1 | bla bla bla | kompy | @#$%^&*()_%^ |
**************************************
5000 | rla rla bra | moto | @#$%^&*()_%^ |

wedłóg mnie każdorazowe przeszukiwanie tej tabeli po to by wybrać firmy z danej branży potrwa dłużej niżeli:

(pomysł nr. 2)

utworzenie w bazie tabeli do karzdej branży:

$tabela kompy
---------------------------------------
ID | Nazwa firmy | wszelkie_różności |
---------------------------------------
1 | bla bla bla | @#$%^&*()_%^ |
******************************
500 | rla rla bra | @#$%^&*()_%^ |

$tabela motoryzacja
---------------------------------------
ID | Nazwa firmy | wszelkie_różności |
---------------------------------------
1 | bla bla bla | @#$%^&*()_%^ |
******************************
500 | rla rla bra | @#$%^&*()_%^ |

$tabela budownictwo
---------------------------------------
ID | Nazwa firmy | wszelkie_różności |
---------------------------------------
1 | bla bla bla | @#$%^&*()_%^ |
******************************
500 | rla rla bra | @#$%^&*()_%^ |

wtedy wybieram wszystkie rekordy z tabeli która mnie interesune (czyli z branży która mnie interesuje) - według mnie takie coś będzie szybsze i praktyczniejsze - ale oczywiście moge się mylić - dlatego proszę was o opinie.

Z góry dzięki wszystkim za odpowiedzi!
legorek
Każdy z tych pomysłów jest zły.

Potrzebujesz tabeli firmy i kategorie

Zapoznaj się: 3NF
emilgubala
ok winksmiley.jpg zapoznałem sie winksmiley.jpg tylko nie mam pojęcia jak niby miałbym to odnieść do tego projektu winksmiley.jpg

może troszkę to źle opisałem - wszystkie rużności nie oznaczają że wszystko trzymam dalej winksmiley.jpg

potem się rozbije tabelę na np. firmy_adres - gdzie są wszelkie informacje teleadresowe winksmiley.jpg

nie wiem co miałbym niby trzymać w tabeli kategorie ? i po co ?
skoro nie mam żadnych rzeczy opisujących kategorie winksmiley.jpg
jedynie firmy przynależace do danych kategorii...

tak wiec dalej proszę o pomoc winksmiley.jpg
BirdWatcher
Witaj!

NA PEWNO nie tabela z firmami kazdej kategori, bo jesli sie 'rozrosnie' to nie bedziesz co chwile recznie dodawał nowej branży smile.gif


Nie wiem dokladnie jakich informacji będziesz używał na każdej stronie, ale w odniesieniu do samej branży.

Najlepszym rozwiązaniem, w mojej opini będzie utworzenie tabeli ID|branża i tabeli ID|Nazwa_firmy|id_branzy|cala reszta

I wtedy szybko wyciągniesz po prostu firmy których pole id_branzy jest takie, jak branża której poszukujesz smile.gif

mam nadzieje ze pomogłem, a jeśli ktoś ma jeszcze lepszy pomysł, to z chęcią sie naucze smile.gif

pozdro
mxm
Jeśli mogę coś zasugerować to to, że jesli rozbijesz firmy na poszczególne branże to jak skatalogujesz firmy które będą należały do dwóch lub trzech branżquestionmark.gif?
emilgubala
heh jak to mówią jeden przykład lepszy od miliona kursów winksmiley.jpg

dostałem od kogoś z innego forum:

CREATE TABLE firmy (id unique serial, nazwa, adres, telefon, www, email, fax... )
CREATE TABLE branze (id unique serial, nazwa, kod, id_rodzica)
CREATE TABLE firmy_branze (firma_id, branza_id);

SELECT firmy.nazwa as nazwa, firmy.adres as adres ... branze.nazwa FROM firmy, branze WHERE firmy_branze.firma_id=firmy_branze.branza_id and firmy.nazwa like '$szukaj';
i zrozumiałem o co chodzi z 3NF.
Cóż ja mam takie podejście ze nikt sie geniuszem nie rodzi ale głupcem zostaje ten, który nie zdobywa wiedzy winksmiley.jpg
2 dni z głowy ale chociaz nowe wiadomości doszły!
Dzięki wszystkim za pomoc! Każdy dostaje pomugł!
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.