Autor | Zpráva | ||
---|---|---|---|
Tomasds Profil |
#1 · Zasláno: 3. 3. 2009, 11:42:38
Řeším jednu věc, nevím si s tím rady. Jde o toto:
Existuje seznam zakázek, každá má přidělen nějaký počet jednotek a pořadové číslo. Potom existuje kalendář. Pro každý den je tam zadán počet jednotek, kolik se do daného dne má vložit. A úkol je rozložit zakázky do kalendáře podle pořadového čísla. Když se zakázka do dne nevejde, vloží se jen část a zbytek přeteče do dalšího dne. tblKalendar ID .. datum .. jednotek tblZakazky ID .. jednotekZak .. poradi je jasné, že musím vytvořit další tabulku tblJednotkyvKalendari ID .. datum .. IDzakazky .. jednotek Když při vkládání narazím na datum, kde není zadán počet jednotek, použiju nějakou výchozí hodnotu. Vypadá to možná jednoduše, ale nevím, jak to řešit na nějaké slušné úrovni. Prozatím mám jen ten nápad, že načtu jednotky jednotlivých zakázek do pole a pak půjdu po dnech kalendáře a budu z toho pole prostě usekávat. To mi ale připadá silně neelegantní. O tom, že ten kalendář se bude muset od určitého data přeskládat při vložení každé zakázky, ani nemluvím. S tím ale nehnu, i když mi to je hrubě proti srsti. V podstatě jde o to udělat z těch zakázek štrůdl a ten pak nakrájet podle šablony v tblKalendar. |
||
ninja Profil |
#2 · Zasláno: 3. 3. 2009, 12:00:12
Ja bych to resil trochu jinou strukturou. tabulka kalendar by byla ne radek=den, ale radek=jednotka. Tedy pokud v jeden den je treb a 6 jendotek, bylo by 6 radku. Pak neni potreba 3. tabulka.
|
||
Tomasds Profil |
#3 · Zasláno: 3. 3. 2009, 12:11:07
Rozumím. Možná by to bylo řešení, ale jednotka je prostě číslo, které vyjadřuje zátěž pro výrobu a mám pocit, že to bude pár desítek za den. A když má zakázka třeba sto jednotek, tak by šlo o hodně dlouhé řady stejných hodnot. Určitě by to šlo, ale myslím že to není optimální.
|
||
ninja Profil |
#4 · Zasláno: 3. 3. 2009, 12:34:48
Tomasds: ja prave myslim ze to je optimalni. Tabulka tblKalendar bude priste id INT, datum DATE, zakazka_id INT. Tedy same cisla, velmi optimalni a rychle i pri velkem poctu radku.
|
||
Tomasds Profil |
#5 · Zasláno: 3. 3. 2009, 13:05:37
Ty chceš v podstatě tu informaci, kterou já navrhuju ukládat v třetí tabulce, nahradit počtem řádků :)
Je pravda, že to láká. Bylo by to o tabulku (a asi JOIN) míň a a nějakých 15 tisíc řádků za rok.. o nic nejde. Horší je to se změnami. Dumám nad tím, ale nevím jak na to. Dejme tomu, že tam mám jednu zakázku na dnešek a pět dalších do konce týdne. Když budu chtít té dnešní zakázce změnit počet jednotek, tak to znamená updatnout zakazka_id dejme tomu ve stovce řádků.. ale updatnout na co? Nějak mi selhává představivost. Jde o vzájemný posun dvou množin čísel, ale nevím jak na to. |
||
Tomasds Profil |
#6 · Zasláno: 3. 3. 2009, 13:21:08
ID datum zakazka_id 1 2009-1-1 4 2 2009-1-1 5 3 2009-1-2 5 4 2009-1-2 5 5 2009-1-1 6 Když zakázce 5 změním počet jednotek ze 3 na 2, tak to znamená update všech řádků od ID=2 včetně. Nějak mně to nechce docvaknout, myslím, že půjdu udělat INSERT srnci_ragu INTO me. |
||
Kajman_ Profil * |
#7 · Zasláno: 3. 3. 2009, 13:49:10
K čemu má být třetí tabulka v prvním návrhu? Nestačí ten seznam vypsat dle prvních dvou? Pak se nemusí nic updatovat.
|
||
Tomasds Profil |
#8 · Zasláno: 3. 3. 2009, 15:05:57 · Upravil/a: Tomasds
Kajman_
- tblZakazky je seznam zakázek - tblKalendar je tabulka, kde je uložen počet jednotek pro jednotlivé dny - tblJednotkyvKalendari jsem zamýšlel jako de facto kalendář. Bylo by tam datum, zakázka a její počet jednotek v daném dni (nikoliv počet jednotek pro den) |
||
Tomáš K. Profil * |
#9 · Zasláno: 3. 3. 2009, 15:30:40
Zůstává dotaz, k čemu tam ta tabulka je? Pokud tomu dobře rozumím, obsahuje jen data, která jdou vyčíst z předchozích dvou tabulek. Slouží jen jako cache... Vyhodil bych ji, výpis bych se pak pokusil řešit SELECTem s využitím proměnných - algoritmus bych na to použil přesně ten, který se ti nezdál elegantní - jen bych ho zkusil nacpat už do SQL.
|
||
Tomasds Profil |
#10 · Zasláno: 3. 3. 2009, 16:11:31
Tomáš K. + Kajman_
Jde o toto: Každá zakázka má svůj počet jednotek. Každý den má počet jednotek, které se do něj vejdou. Když to teď uvažuju, tak je asi pravda, že ta třetí tabulka je asi opravdu zbytečná, všechno se dá dopočítat. Ale nebude to také ľahké, zkusím to promyslet a možná se ještě ozvu, zatím díky. |
||
ninja Profil |
#11 · Zasláno: 3. 3. 2009, 16:28:10
Tomasds: podle toho navrhu to vypada, ze planujes mit v tabulce kalendar sloupce zakaza1, zakazka2, ... To neni dobre reseni.
Urcite bych rozdelil na tubulku kde bude DATUM - POCET JEDNOTEK VE DNI a vedle toho ID, DATUM, ZAKAZKA, POTREBNYCH JEDNOTEK s tim, ze jedno datum muze byt na vice radkach. Nebo jak jsme psal na zacatku, pri zadani poctu jednotek na konkretni datum si rovnou predvyplnit tabulku s daty tak, ze kazdy radek rovna se 1 jednotka na urcity den. |
||
Tomasds Profil |
#12 · Zasláno: 3. 3. 2009, 16:32:33
ninja
ze planujes mit v tabulce kalendar sloupce zakaza1 uf, to rozhodně neplánuju, neděs mě! :) Toto je vizuální podoba, takto se to bude zobrazovat. Data takto skladovat nebudu. |
||
Kajman_ Profil * |
#13 · Zasláno: 3. 3. 2009, 16:53:55
Nechal bych jen ty dvě tabulky. Udělat paralelně dva dotazy např. v php a pak vyčítat z jednoho nebo z druhého dotazu další řádek - podle toho, jestli došly jednotky a chcete další den, nebo je zakázka kompletně rozplánovaná a chcete plánovat další v pořadí.
|
||
Tomasds Profil |
#14 · Zasláno: 3. 3. 2009, 21:54:41
Kajman_
To bude asi nejlepší řešení. Díky všem. |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0