abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | Nová verze

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    včera 23:22 | IT novinky

    Evropský parlament dnes přijal směrnici týkající se tzv. práva spotřebitele na opravu. Poslanci ji podpořili 584 hlasy (3 bylo proti a 14 se zdrželo hlasování). Směrnice ujasňuje povinnosti výrobců opravovat zboží a motivovat spotřebitele k tomu, aby si výrobky nechávali opravit a prodloužili tak jejich životnost.

    Ladislav Hagara | Komentářů: 2
    včera 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 10
    včera 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 25
    včera 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 707 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Tvorba databáze pro jednoduchý skladový program

    19.9.2013 14:47 Marty_Burns
    Tvorba databáze pro jednoduchý skladový program
    Přečteno: 3121×
    Dobrý den, potřeboval bych si s pomocí PHP a MySQL napsat jednoduchý program pro skladovou evidenci a chtěl bych poprosit zkušené programátory o radu jak tu tvorbu pojmout. Pro každou položku ve skladech potřebuju mít tabulku, která bude zaznamenávat pohyby té konkrétní položky. Dále potřebuji zaznamenávat příjemky a výdejky, tak aby byly propojeny s jednotlivými tabulkami zboží.

    Jen stále nevím jak to pojmout jestli opravdu vytvořit pro každé zboží samostatnou tabulku v databázi nebo číslo toho zboží jen zachytávat v tabulce příjemek a výdejek a příslušnou tabulku pak sestavit PHP skriptem na požádání.

    Docela si říkám, že v momentě kdy tam budu mít 50 000 pohybů by mohlo trvat než od sebe všechny ty příjemky a výdejky odečte a sestaví kartu(tabulku) zboží.

    Proto bych se chtěl zeptat co je pro MySQL a PHP horší varianta mít v tabulce 50 000 pohybů, které bude skript neustále procházet a odečítat nebo mít 1000 tabulek v databázi a na každé jen několik řádků? Na jaké problémy bych mohl při jednotlivých řešeních narazit?

    Budu velmi rád a vděčný za jakoukoliv připomínku k tématu.

    Řešení dotazu:


    Odpovědi

    Tarmaq avatar 19.9.2013 15:25 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Moc nechapu proc by mela kazda polozka mit svoji vlastni tabulku. Nechces spis mit Tabulku obsahujici polozky a ke kazde z tech polozek pridavat do nejake jine tabulky jeji atributy? Myslim, ze pokud to spravne navrhnes, mel bys mit ohdadem tak 10-20 tabulek (nevim co vsechno je treba evidovat). Btw nebylo by lepsi pro dane ucely sahnout uz po nejakem hotovem reseni? Urcite uz nejaky takovy system existuje..
    Don't panic!
    19.9.2013 16:24 Marty_Burns
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Děkuji za reakci, možná přemýšlím úplně špatně. Jde o to abych byl na požadavek schopný ke každé položce na skladu sestavit nějakou podobnou tabulku: | Množství | Kč | Datum|Doklad|Obsah|Příjem|Výdej|Zásoba|Příjem|Výdej|Zásoba| 18.9. P001 nákup 5 5 50 50 19.9. V002 prodej 3 2 30 20

    Dále tabulka příjemky a výdejky: ID | Typ | Datum | Doklad | Číslo zboží | Množství | Cena | 001 P 18.9. Dodák01 Zboží1 5 50 002 V 19.9. ......

    Kdybych teda měl všechno zboží v jedné tabulce a k tomu jen množství a průměrnou cenu tak na požadavek sestavení tabulky zboží, že by pročesal ty příjemky a výdejky a zobrazil to jako ta horní tabulka....Myslíš že je to teda lepší řešení, než pro každé zboží sestavit tabulku zvlášť?

    Hotových řešení je samozřejmě mraky, ale chtěl bych to zkusit.
    19.9.2013 16:30 Marty_Burns
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Úplně se mi ty náčrty tabulek rozesraly, ale další uživatelé mě již dole navádějí, že mnoho tabulek je úplný nesmysl.... Děkuju
    Řešení 1× (Marty_Burns (tazatel))
    19.9.2013 15:34 SPM | skóre: 28
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Rozhodně méně tabulek. Zakládat tabulky dynamicky pro každé zboží nedává moc smysl. Prostě uděláš tabulku pohybů a jeden sloupec bude odkaz na tu danou položku. Až budeš chtít z toho dostat věci jako počet pohybů za časové období, atd. tak to máš hezky v jedné tabulce a jednoduše to z ní dostaneš. 50000 záznamů na jednu tabulku je pořád docela sranda. Navíc ty těch 50k položek nebudeš procházet scriptem, ale napíšeš SQL dotaz tak, aby ti vrátil jen to co chceš.
    19.9.2013 16:34 Marty_Burns
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Moc děkuju, pomohl si mi.
    19.9.2013 16:04 j
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Mezi nama ... ty chces psat sklad a nemas paru o tom, jak funguje SQL?

    select sum(pocet) from pohyby where zbozi = XYZ ... 10M zaznamu, cas trvani 0,3s ...
    19.9.2013 16:42 Marty_Burns
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Tak základní dotazy umím, ale jak přesně funguje SQL a jak moc náročné pro server je podle parametru WHERE vyhledávat ve velkém množství položek jsem neměl páru. Je to pro mě spíš cvičení, ale kdyby to fungovalo určitě bych to testoval pro svou potřebu. Díky
    19.9.2013 17:12 j
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    => o SQL defakto nic nevis.

    Podivej, vyber zaznamu z linearni tabulky je pro SQL zcela trivialni uloha - specielne, pokud jsou na spravnych polich indexy. Skoro stejne trivialni je vyber z vice jednoznacne provazanych tabulek (nikoli pres textovy pole samo ...).

    Samo v okamziku, kdy zacnes resit vsemozne podminky vazeb, budes prohledavat textovy pole ... tak casova narocnost dotazu roste. Ale i u milionu zaznamu se bavime maximalne o desitkach vterin (nemyslim si, ze bys dokazal napsat tak slozity query, aby trvalo dyl).

    => pro tvy ucely
    1) tabulka hlavicek ... 
    id_pohybu, cislo_dokladu, ... typ (vydejka/prijemka)
    2) tabulka radku
    id_pohybu, id_radku, id_zbozi, pocet (idealne pro prijemky trebas kladnej, pro vydejky zapornej nebo opacne)...
    3) tabulka zbozi
    id_zbozi, ...
    
    Samo, nevim kam az chces zajit, dal muzes mit tabulku dodavatelu/odberatelu, kterou privazes na hlavicku ...

    Priklad:

    Vyber vsech dokladu s nejakym zbozim zacinajicim na ...
    select distinct cislo_dokladu from hlavicky
    left join radky on radky.id_pohybu = hlavicky.id_pohybu
    left join zbozi on zbozi.id_zbozi = radky.id_zbozi
    where zbozi.nazev like "Prkno%" 
    
    Řešení 1× (Marty_Burns (tazatel))
    19.9.2013 16:11 Kit
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    V principu stačí dvě tabulky. Tabulka pohybů (příjemek a výdejek) a tabulka stavů položek. Z PHP přidávat záznamy do tabulky pohybů a pomocí triggerů aktualizovat tabulku stavů.
    19.9.2013 16:52 Marty_Burns
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Děkuju, s triggery jsem se při mém amater programingu ještě nesetkal, ale snad se s tím popasuju.
    19.9.2013 16:54 j
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Trigger je to nejhorsi, co muzes databazi udelat ... ;D, neni lepsi zpusob, jak dokonale zabit vykon.

    => ano, je logicky si drzet stav nekde u zbozi, a neselectovat ho ze vsech pohybu (coz by slo taky), ale dela se to tak, ze v ramci jedny transakce vlozis (insert) zaznam do pohybu + aktualizujes(beznej update) pole stav. Kdyz se neco podela, nebude ani jedno ani druhy.
    19.9.2013 17:09 Kit
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Trigger vlastně není nic jiného, než transakce, do které insertem vložíš záznam o pohybu a aktualizuješ pole stav. Když se něco podělá, nebude ani jedno ani druhý.

    Rozdíl je akorát v tom, že transakce je v aplikaci a trigger v databázi. Trigger je výkonnější a šetrnější k prostředkům databáze i aplikace.
    20.9.2013 12:28 axel
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Trigger neni obecne vykonnejsi ani setrnejsi, zalezi na konkretnim scenari. Typicky pro velke objemy dat byvaji triggery problem, protoze neumoznuji rozumnou optimalizaci. Co mi na triggerech ale vadi vice je odtrzeni logiky od aplikace. To ze je kus "v aplikaci" a kus v databazi mimo jine znamena, ze se neda rozumne logovat, trasovat, jednotne testovat... Z programatorskeho hlediska je to klasicky side effect se vsemi nevyhodami (a samozrejme i vyhodami, pokud nekdo nejake vidi). Osobne nenavrhuju logiku do triggeru vubec. Nerikam, ze to nema sem tam smysluplna vyuziti, ale napr. ve vicevrstve architekture to podle mne nema co delat.
    Tarmaq avatar 20.9.2013 15:48 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    ja to vidim uplne naopak. Trigger mi umoznuje zaridit, aby se pohled choval jako relace, tj. abych do nej mohl vkladat, upravovat ho a triggery zaridi, aby se data rozsoupala do prislusnych tabulek z kterych se pohled sklada.. Nevim proc bych toto mel zarizovat na strane napr. PHP
    Don't panic!
    20.9.2013 15:58 Kit
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Jeden důvod znám: Dotyčný umí PHP lépe než SQL a počítá s tím, že s těmi daty bude pracovat pouze jeho PHP aplikace :-)
    20.9.2013 17:07 axel
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    PHP neumim vubec a SQL umim sice dobre, to ovsem pro psani triggeru moc potreba neni:-) Modifikovat (coz neni totez co "pracovat") data opravdu typicky muze pouze "moje aplikace", respektive jeji k tomu urcena vrstva, respektive specificka vrstva tvorici rozhrani vuci ostatnim systemum. Jinak by se na enterprise urovni nedalo efektivne zamykat, cachovat, nahravat velke objemy dat, detailne ridit opravneni atd. Predstava jakesi chytre databaze, ve ktere se vrta spousta aplikaci, ktere o sobe nevedi, a ona vsechno udrzi konzistenti (ne jen technicky, ale i "byznysove") je trochu sci-fi. Umisteni logiky do databaze prestane cloveka bavit nejpozdeji ve chvili, kdy ma do ni pribyt pouziti messagingu, overeni opravneni ve vzdalenem systemu, volani webservices atd. Pro nektere systemy toto hrozi, pro jine treba nehrozi. Co tvrdim je, ze pokud potrebuju vicevrstvou architekturu (opravdu potrebuju, ne jen ze ji mama rad a pouzivam ji vsude i na miniprojekty), tak tam mam vrstvu aplikacni logiky a ta by se mi nemela prolinat s datovou ve forme triggeru.
    20.9.2013 16:45 axel
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Triggery nad pohledy jsou specificka zalezitost. Zasadni prinos je urcite pro technologie poskytujici abstrakci nad tabulkami (formular si mysli, ze je nad tabulkou, generuje do ni inserty/updaty a je odstinen od datoveho modelu). Jinak mohu analogicky pouzit napr. stored proceduru nebo proceduru v aplikaci, naprogramovat to musim tak jako tak a v triggeru jsem nejvice omezen co do moznosti. Napriklad nainsertovat pres trigger nad pohledem vetsi objem dat je obvykle velky prusvih.
    20.9.2013 16:58 Kit
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Obvykle je velký průšvih, pokud se to někdo snaží šmudlit v PHP, některá z operací se nezdaří a my netušíme, která data tam už jsou a která ne.
    20.9.2013 17:11 axel
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    To je nejaka posedlost tim PHP? Ja mam o nem pouze zakladni predstavu a mozna nespravedlive ho nepovazuju za vhodne pro veleke projekty, ale programovat dobre nebo spatne se da snad v zasade ve vsem:-)
    20.9.2013 18:28 Kit
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    PHP v tom může být nevinně. Stačí nějaká chyba ve vstupních datech, které DB odmítne.
    20.9.2013 17:07 Tomáš
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program

    Mám tu jednu takovou aplikaci. Je v ní přes 2200 triggerů. Každý druhý zapisuje pokoutně do nějaké tabulky a jejich spouštění je jako neřiditelná lavina. Trasování je peklo. Dopadová analýza je inferno na druhou. Nějaké moduly a jasně definovaná rozhraní mezi nimi? Na takový luxus zapomeňte.

    Trigger je dobrá věc, ale jen ve specifických případech. Pokud máte aplikaci v rukou ( máte zdrojový kód, který můžete libovolně upravovat ), tak lepší se triggeru vyhnout. Ideálně je pokud se vám podaří udržet data a logiku separátně. S logikou pak můžete v rámci nasazení aplikace výrazně lépe manipulovat než s daty.

    20.9.2013 17:22 axel
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Presne tak, takovou aplikaci bohuzel take mame. Diky version managementu lze pekne sledovat, jak tyto veci vznikaji nejprve jako nenapadna "rozumna" vypadajici zkratka (zavolam jen insert a ono se mi to spravne doplni do dalsich tabulek) a konci jako bazina plna v zasade globalnich promennych, ktere ridi chovani jednotlivych triggeru podle toho, v jake situaci se zrovna volaji - pri davkove aktualizaci ne, pri aktualizaci z formulare ano, ale jen pokud se nejedna o zmenu rodneho cisla a neni to z pobocky, protoze tam to je cele slozitejsi atd. Nikdo nema jistotu, kdy se mu co zavola, takze do toho radeji nikdo nesaha (testovatelnost je blizka nule) a pro novou funkcionalitu casto vznika nejaka postranni cesticka, ktera to cele obchazi...
    Tarmaq avatar 20.9.2013 19:06 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program

    Ja jsem ale nerekl, ze taham business logiku do triggeru. Samozrejme tyto popisovane vyhybky tam nepatri. V triggeru pouze zarizuju, aby se data propagovala tam kam maji, protoze to zadny SQL server neumi sam o sobe, z jednoducheho pohledu obsahujiciho par joinu, rozpoznat zaridit. Take netvrdim ze je vhodne, aby ten trigger soupal data nekam uplne jinam. Jen do tabulek, z kterych se sklada view nad kterym je (samozrejme zapis do nejake logovaci tabulky atp. tam byt muze)

    Pokud je databaze vhodne navrhnuta, nestava se ze by se clovek podivoval pri chybe co se to deje a musel to nejak slozite analyzovat, pokud je v DB poradek.

    Predpokladam ze tabulky v tve databazi obsahuji semtam nejaky nullovatelny sloupec, je to tak?

    Don't panic!
    22.9.2013 17:53 axel
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Uvadis pouze triggery nad pohledy, coz je mensinova zalezitost. Nad tabulkami by se to pak tedy analogicky omezilo na jednu tabulku? Pak by tam opravdu prilis slozita logika byt nemohla, nejspis nejaka validace, a nemam s tim vubec problem (ovsem nedelame to tak, predevsim kvuli spatne vykonnosti pri zpracovani vetsiho mnozstvi dat). Jak je databaze navrzena nema vliv na to, zda se pri chybe nekdo "podivuje" a uz vubec na to, zda je chybu treba slozite analyzovat. Ano tabulky v me databazi obsahuji nullovatelne sloupce, souvisi to nejak s triggery?
    20.9.2013 19:53 Tomáš
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program

    Trigger rozhodně není transakce. Trigger se základním ACID transakčních DB nemá trigger vůbec nic společného. ( Na rozdíl od transakcí, které základem jsou. )

    Výkonnost kódu (pro DB orientované aplikace) převážně závisí na tom kolik musí transakce udělat I/O operací s diskem. Rozdíl, zda kód běží v triggeru nebo PL/SQL nebo PHP, je zanedbatelný. Pro představu přístupová doba k datové větě (s lidským měřítkem × 1e9):

    1. vylovení věty z cache na CPU = 1 ns ~ v lidském měřítku 1s
    2. vylovení věty z paměti DRAM = 65 ns ~ v lidském měřítku 65s ~ 1 min.
    3. vylovení věty z pevného disku = 2ms (seek time špičkového disku) ~ v lidském měřítku 23 dní, tady musíme trošku přidat protože disk pracuje blokově a průměr bude výrazně lepší. Takže řekněme 10x lepší číslo. Tedy cca 2 dny.
    4. vylovení řádku přes sít z paměti vzdáleného stroje = 0.1 ms ~ lidském měřítku cca 1 den. Tady bychom taky mohli ubrat. Do síťového paketu se vejde taky více jak jeden řádek.

    Ale nic si z toho nedělejte, názory jako Váš slyším i od seniorních vývojářů a IT architektů. Prý rozdíl mezi během triggeru a PL/SQL procedury i reálně změřili. A když se zeptám jak eliminovali diskovou cache, tak tou se nikdo nezabýval. Je to občas dost síla.

    23.9.2013 08:51 j
    Rozbalit Rozbalit vše Re: Tvorba databáze pro jednoduchý skladový program
    Jak tu nekdo zminil, trigger nema s transakci nic spolecnyho, a muze se podelat zcela nezavisle. A co se vykonu tyce, zasadni problem je predevsim v tom, ze trigger se musi vyhodnocovat VZDY pri LIBOVOLNE akci s tabulkou. I kdyz trebas nakonec nic neudela.

    Minimalne se databaze musi podivat na typ akce (insert/update) a porovnat, zda na tu akci je trigger povesen. Pokud takovych akci probihaji tisice ... a z toho trebas jen 1% vyzaduje akci triggeru ...

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.