Databaze maji indexy (klice). Kdyz je ten index dobre udelany, treba pro id radku se pouziva autoincrement a cislo, tak Prohledat milion zaznamu podle klice je brnkacka. Tam je nejaky algoritmus optimalizovany prave na to, ze je kazde cislo jine a ze je to cislo. Treba to ma roztrizene jeste vnitrne do kategorii cisla >500, <500, <250, >250 a tak v 10 krocich dohleda existenci toho cisla. Cili 1000 polozek je pro nej se spravne udelanym indexem bezproblemove.
Kdybys tam ten index nedal (u mysql se musi spesl rici, ze ten sloupec slouzi jako index), tak misto 10 kroku pro kazde cislo musi projit vsech 1000 radku.
tab konektor
nazev, id_layout
"Franta", 3
tab layout
nazev, id_layout, pocet pinu
"Piny pro Franta", 4
tab piny
nazev, id_pin, id_komp, popis
"ctvercova", 2, 5, "ctvercovy kompatibilni s id1"
"kruhova" , 3, 6, ",,,"
"ctvercova", 4, 7, "ctvercovy kompatibilni s id2"
tab komp
nazev, id_pin, id_komp
"id1 ctvercovy", 5
"id1 kruhovy", 6
"id2 ctvercovy", 7
tab pin_layout
id_layout, id_pin, pocet
4, 2, 2 .
4, 3, 2 ... layout 4 ma 3 ruzne piny, z toho 2 jsou ctvercove, 2 jsou kruhove, 2 jsou jine ctvercove
4, 4, 2 .
5, 2, 6 ]-- laout 5 ma jen jeden druh pinu
Snad jsem to vsechno pokryl :) SQL dotaz, chces jednu velkou tabulku (jen odhadem)...
SELECT
`a`.*,
GROUP_CONCAT( CONCAT(`e`.`pocet`,`d`.`nazev`,`e`.`nazev`) SEPARATOR ', ' ) AS piny
FROM
konektor a
LEFT JOIN layout b ON b.id_layout=a.id_layout
LEFT JOIN pin_layout c ON c.id_layout=a.id_layout
LEFT JOIN piny d ON d.id_pin=c.id_pin
LEFT JOIN komp e ON e.id_komp=d.id_komp
GROUP BY
c.id_layout
d.id_pin
e.id_komp
-- zgrupujes to podle tech tri hodnot a pak pospojujes sloupce
-- pres concat a radky pres group_concat (snad je to spravne :) )
Kdybys to negrupoval, tak kazda odlisnost udela novy radek. A taky to grupovani neni idealni u rozsahlejsich tabulek, protoze tam kopiruji obsah vsech radku pro kazdou odlisnost. To by se pak muselo resit trochu jinak, ze si vytahnes jen idecka jednim dotazem uvnitr a vnejsim dosadis hodnoty. Tim padem se budou krupovat jen idcka, coz je mene narocne na pamet.
O neco slozitejsi je dotaz na vyhledavani, protoze kazdou vyhledavanou polozku je lepsi resit zvlast sql dotazem, vytahnout id radku a pak to pres grupovani spojit.
http://www.tutorialspoint.com/mysql/mysql-concat-function.htm - co dela CONCAT
http://www.tutorialspoint.com/…y-clause.htm - co dela GROUP BY
GROUP_CONCAT dela totez, co concat jen pro sloupce se stejnym nazvem na jinem radku zgrupovane pres GROUP BY