Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko normalizacije-strukture baze

[es] :: MySQL :: Pomoc oko normalizacije-strukture baze

Strane: 1 2

[ Pregleda: 4007 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Pomoc oko normalizacije-strukture baze15.07.2011. u 10:10 - pre 155 meseci
Evo ga dijagram.
opet sam vratio da mi lokacija bude string posto cu u programu odraditi da se drzava i grad biraju, tako da nece dolaziti do greska, a nazivi drzava i gradova mislim da se nece menjati :)
E sad isto sam uradio za lica, izbacio sam da mi korisnik bude id iz tabele korisnika, posto svaki korisnik ima jedinstveno krace ime pa se umesto id-ija korisnika sada u tabelu za odgovorno lice upisuje to krace ime od tri karaktra.
Pa to prikazujem umesto imena i prezimena, a da kraca imena se isto nikad ne menjaju. Sto se tice istorije o cemu se tu radi. Ja tu upisujem sve podatke koji su vezani za pracenje cim se desi neka promena, tako imam kompletnu istoriju, posto s etako i trazi.
Eto to je to



djLapac
Prikačeni fajlovi
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Pomoc oko normalizacije-strukture baze15.07.2011. u 11:27 - pre 155 meseci
Da li ima razlike u izvrsavanju upita, tj da li uopste ima razlike izmedju ova dva upita:
Code:

SELECT * FROM table1 as t1, table2 as t2 WHERE t2.table1_id = t1.table1_id

i ovog
Code:

SELECT * FROM table1 INNER JOIN table1 ON (table2.table1_id = table1.table1_id )

djLapac
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko normalizacije-strukture baze15.07.2011. u 11:54 - pre 155 meseci
mislim da si preterao sa denormalizacijom al ..

sto se tice upita, isti su, kad nisi siguran uradis explain jednog i drugog i uporedis rezultat explain-a, ako je isti - to je to
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Pomoc oko normalizacije-strukture baze15.07.2011. u 12:04 - pre 155 meseci
Jbg. Moram da zavrsim strukturu baze i samu bazu, da bih nastavio program, tri dana sam crtao i dijagrame i razmisljao sta mi je najbolje ali mislim da sam ovako dosta smanjio upit i JOINOVANJE evo sad izgleda ovako:
I generalno brzo radi 78ms. mislim da je to ok
Code:

SELECT SQL_CALC_FOUND_ROWS eqdb_device.Device_ID, eqdb_device.Status_ID, eqdb_device.Inventory, eqdb_device.Product, eqdb_device.Model, eqdb_device.EQ_ID, eqdb_device.Project, eqdb_device.Previous_Location, eqdb_device.Current_Location, eqdb_device.Current_Responsible, eqdb_device.Current_Assignment_Comment, eqdb_device.Next_Expected_Location, eqdb_device.Next_Assigned_Responsible, eqdb_device.Next_Assignment_Comment, eqdb_device.Date_Of_Expected_Arrival, eqdb_device.Transfer, eqdb_device.Date_Of_Lastchange, eqdb_department.Department_Name
FROM 
eqdb_device 
INNER JOIN eqdb_owner ON (eqdb_device.Owner_ID = eqdb_owner.Owner_ID)
INNER JOIN eqdb_customer ON (eqdb_device.Customer_ID = eqdb_customer.Customer_ID)
INNER JOIN eqdb_department ON (eqdb_device.Department_ID = eqdb_department.Department_ID) 
WHERE (eqdb_device.Status_ID LIKE '%a%' OR eqdb_device.Inventory LIKE '%a%' OR eqdb_device.Product LIKE '%a%' OR eqdb_device.Model LIKE '%a%' OR eqdb_device.EQ_ID LIKE '%a%' OR eqdb_device.Project LIKE '%a%' OR eqdb_device.Previous_Location LIKE '%a%' OR eqdb_device.Current_Location LIKE '%a%' OR eqdb_device.Current_Responsible LIKE '%a%' OR eqdb_device.Current_Assignment_Comment LIKE '%a%' OR eqdb_device.Next_Expected_Location LIKE '%a%' OR eqdb_device.Next_Assigned_Responsible LIKE '%a%' OR eqdb_device.Next_Assignment_Comment LIKE '%a%' OR eqdb_device.Date_Of_Expected_Arrival LIKE '%-a %' OR eqdb_device.Transfer LIKE '%a%' OR eqdb_device.Date_Of_Lastchange LIKE '%-a %' OR eqdb_department.Department_Name LIKE '%a%' ) AND eqdb_device.Department_ID IN(1,2) LIMIT 10


E sad mozda ovaj upit moze jos bolje da se optimizuje, da na neki nacin izbegnem ovolike LIKE-ove. Ali sam stavio da su mi sve tabele innoDB tako da ne znam drugaciji nacin da pretrazim sva polja u tabeli za zadati kriterijum pretrage.


djLapac
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko normalizacije-strukture baze15.07.2011. u 12:13 - pre 155 meseci
kao sto rekoh vec mnogo puta like % je smrt - to je full table scan obavezno, to je 70ms sad, za 2 meseca ce biti 10sekundi za godinu dana ce prsnuti server ...

1.normalizujes
2.ako moras uradis like % iz "malih" tabela i onda napravis upit sa tim id-ovima iz "velike" tabele, like % iz tabele od preko par stotina entrija je znak da si nesto gadno zabrljao


dalje eqdb_device.Status_ID LIKE '%a%' .... kako ovo moze da bude like ? status_id je valjda numeric .. zasto like? znas da mozes da imas 5 statusa ..

etc etc ... kao sto rekoh, ne valja, imas dovoljno informacija da znas sta treba da uradis, ostaje samo da se to uradi i to je cca 30min posla max
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Pomoc oko normalizacije-strukture baze15.07.2011. u 12:20 - pre 155 meseci
Cek ovo te nisam razumeo

2.ako moras uradis like % iz "malih" tabela i onda napravis upit sa tim id-ovima iz "velike" tabele, like % iz tabele od preko par stotina entrija je znak da si nesto gadno zabrljao

Meni se u programu trazi da pretrazim sva polja tabele za zadatu rec, jedino da napravim novo polje u bazi tipa keywords pa da u njega strpam vrednosti svih polja i onda samo za to polje uradim LIKE
Jer ja ovde samo pretrazujem tabelu eqdb_device.

A ovo za int cu srediti

djLapac
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko normalizacije-strukture baze15.07.2011. u 12:34 - pre 155 meseci
select * from velikatabela where grad_id in (select grad_id from grad where grad_name like %) or user_id in (select user_id from user where user_name like %) ...
...

mnooogo brze od toga sto si ti napisao (ni ovo nije idealno resenje)

generalno ako imas non stop zahtev da pretrazujes sva polja moras da pravis recnik i index

inace to u 99.9% slucajeva znaci da onaj ko dizajnira aplikaciju (to u ovom slucaju nisi ti nego klijent) nema pojma sta oce
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Pomoc oko normalizacije-strukture baze15.07.2011. u 12:54 - pre 155 meseci
He, he...
Pa o tome ti pricam. Ja sam dobio zahteve i na meni je da najbolje realizujem. Napravio sam indexe, a dodacu jedno polje u kom cu cuvati kljucne reci za pretragu pa cu samo njega pretrazivati.
U svakom slucaju dosta si mi pomogao, stvarno sam pohvatao dosta stvari iz ovih poruka.
Hvala puno
djLapac
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko normalizacije-strukture baze16.07.2011. u 08:10 - pre 155 meseci
uvek je smor kada klijent nema pojma sta hoce a ti nemas autoritet da mu kazes da prvo smisli sta hoce pa tek onda dodje sa zahtevima ... na zalost to nam se svima desava non stop i od toga ne moze da se pobegne...

ja sam na par mesta seljacima radio seljacko resenje ... napravis lepo celu bazu kako treba, innodb, transakcije, referencijalni integritet ovo ono i stavis jednu tabelu koja je myisam koja ima id int, seljana varchar(1000) .. i onda na varchar polje stavim full text key i te debilne pretrage rade kroz taj myisam ..

kada za takvu pretragu stvarno ima potrebe onda napravis svoj lokalni index - dakle pravis recnik + reference i to je to
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Pomoc oko normalizacije-strukture baze16.07.2011. u 08:22 - pre 155 meseci
Ma da tako je najbolje.
Nego znas sa cim sad imam problem. Kad mi se izvrsi upit bez ORDER BY traje mi 78 ms. Sto je super brzo, ali cim stavim ORDER BY po nekoj koloni onda mi traje upit 2,5 sekundi. Sto je strasno sporo, da ne poverujes. I evo sad se mucim sa tim.
Pa sam onda uzeo pa sam izbacio ORDER BY u mysql-u vec sam napravio sortiranje programski u php-u. Kad mi vrati upit rezultat ja ga presortiram i ispisem. Medjutim sta je sad problem, ja mogu da presortiram na taj nacin samo limitirani niz ne mogu sve rezultate.

Tako da opet moram da vratim ORDER BY. Pa sad evo kopam po netu da vidim sta da radim da ubrzam ovo.
djLapac
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko normalizacije-strukture baze16.07.2011. u 08:42 - pre 155 meseci
pogledaj sta kaze explain, verovatno radis full table scan a imas limit, kada uradis full table scan sa npr limi 10 on prolazi kroz tabelu dok ne nadje 10 i to je to, kada imas order by, on mora da prodje CELU tabelu pa onda da sortira rezultat pa ti vrati 10kom
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Pomoc oko normalizacije-strukture baze16.07.2011. u 09:03 - pre 155 meseci
Pa jeste tako je. Ja imam LIMIT 0, 500.
I kad imam ORDER BY on prvo sortira sve rezultate pa uzme prvih 500.
E ne znam sta da radim, bez ordera ne mogu a on mi mnogo, mnogo usporava upit
djLapac
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko normalizacije-strukture baze16.07.2011. u 17:22 - pre 155 meseci
resenje je vrlo jednostavno - popravi upit tako da ne radi full table scan :)
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: Pomoc oko normalizacije-strukture baze16.07.2011. u 17:30 - pre 155 meseci
pa to je nemoguce.
Jer pazi kako radi program, ti kad se ulogujes program prikazuje listu svih uredjaja.
Naravno prikaze 10 uredjaja sortiranih po datumu poslednje izmene i imas boks za paginaciju da mozes da kazes ledecih 10 i tako redom.
E tek onda postoji polje za pretragu gde kucas kljucnu rec i pretrazi se lista svih uredjaja.
Sve ovo ukazuje da ja na pocetku moram da imam ORDER BY cele tabele, i da ne moze da se izbegne

djLapac
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Pomoc oko normalizacije-strukture baze16.07.2011. u 17:51 - pre 155 meseci
order by cele tabele nije problem ako je order po indexiranom polju dakle ako imas

create table t1 (i int primary key not null, j int, a varchar(100), b varchar(100), key i_j (j), key i_a(a), key i_b (b));

i onda uradis

select * from t1 order by a limit ..

to nije full table scan i nece da traje sto godina ...

naravno ako tu ubacis where b like %xx% onda to jeste full taqble scan i onda si usr* motku ali mislim da sam ti vec 3 puta rekao kako da izbegnes taj table scan pa necu vise da se ponavljam
 
Odgovor na temu

[es] :: MySQL :: Pomoc oko normalizacije-strukture baze

Strane: 1 2

[ Pregleda: 4007 | Odgovora: 34 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.