Autor Zpráva
Tomasds
Profil
Ř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
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
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
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
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
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 *
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
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 *
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
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
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
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 *
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
Kajman_
To bude asi nejlepší řešení.

Díky všem.
Toto téma je uzamčeno. Odpověď nelze zaslat.