Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Filip Jirsák

Stran: 1 ... 146 147 [148] 149 150 ... 375
2206
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 19. 10. 2019, 19:40:12 »
Nikdo si nevymýšlel vlastní zadání.

Např. pokud je vedoucí zaměstnanec definován tím, že má podřízené

V aplikaci můžu chtít zobrazit všechny vedoucí, co mají podřízené zaměstnance. Ale také můžu chtít (a je to dost běžné) na jiném místě zobrazit i ty, co (už) žádné podřízené nemají.

Tak buď Miroslav Šilhavý umí vytvořit zaměstnance, kteří zároveň mají i nemají podřízené, nebo si změnil zadání.

Q.E.D.

Podle toho, čemu říkáte "zadání".
Tady v diskusi říkám zadání tomu, co jsem jako zadání napsal.

To, co jste popsal, je přístup programátorské lopaty (dnes se tomu eufemisticky říká "junior").
A jak se říká někomu, kdo si přečte zadání a vzápětí napíše něco, co je s ním zjevně v rozporu, a je mu to úplně jedno? Jak se říká někomu, kdo ostatním pořád vnucuje zapisovat INNER JOIN pomocí OUTER JOINu ale ten příkaz opakovaně píše špatně?

Junior obvykle aspoň ví, že neví. Horší je, když si někdo o sobě myslí, že je expert, ale ve skutečnosti taky neví.

2207
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 19. 10. 2019, 13:42:13 »
I kdyby zadání bylo nereálné, neznamená to, že ho můžete tiše ignorovat, vymyslet si své vlastní zadání a tím se řídit. Takovým postupem rozhodně nedojdete k výsledku, se kterým bude zadavatel spokojený. Pokud je termín „vedoucí“ definován v zákoně, můžeme klidně použít pro náš účel jiný termín, třeba „nadřízený“. Mít definované lidi, kteří aktuálně mají podřízené, smysl dává – např. pokud chcete, aby své podřízené o něčem informovali, mimořádně rozdělili prémie o den dřív nebo vytipovali podřízené na školení, nedává smysl informovat o tom někoho, kdo žádné podřízené nemá.

Já jsem nepsal o žádném podnikovém IS, psal jsem o jedné jediné tabulce, která sloužila jenom jako příklad. Nepsal jsem nic o tom, že to má být hotové komplexní řešení. Pouze jsem na tom ilustroval to, že ze struktury tabulek neplyne jediný možný pohled na data, tudíž je nesmyslné odvozovat použití INNER nebo OUTER JOINu z toho, jak vypadá struktura tabulek.

2208
Po jak velkých blocích je nejoptimálnější načítat data ze souboru?
Optimální je načítat data po stejných blocích, po jakých je načítá knihovní funkce do bufferu, po jakých s nimi pracuje souborový systém a po jakých s nimi pracuje disk. Přičemž v každé té vrstvě může být blok jinak velký, v lepším případě jsou to alespoň násobky. A v každé té vrstvě to může být v různých případech jinak. Takže nemá smysl to experimentálně zjišťovat, protože tím zjistíte pouze parametry pro ten případ, kde to testujete – a tam je lepší se podívat do konfigurace, jak máte nastavený souborový systém a jaký tam máte disk.

2209
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 19. 10. 2019, 10:20:19 »
Houby si pletu. Vím s jistotou, že pokud můžete modelovat data
Sice to víte s jistotou, ale víte to blbě. Data modelujte pomocí struktury tabulek a omezení. A při vytváření struktury tabulek opravdu JOIN nepoužijete.

Váš INNER JOIN nepřináší nic navíc, pouze omezuje možnosti manipulace s daty.
INNER JOIN navíc přináší přehlednost a srozumitelnost, tím pádem snižuje riziko chyby. Vždyť i vy jste tady ten INNER JOIN pomocí OUTER JOINu psal špatně, než jsem vás na to upozornil – a to se tváříte, jaký jste expert.

Navíc to vaše kritérium, že má být dotaz co nejuniverzálnější, je nesmyslné – a vy sám to víte. Kdybyste tomu svému kritériu opravdu věřil, navrhnete mnohem univerzálnější dotaz, než nějaký OUTER JOIN dvou tabulek. Pořádně univerzální dotaz je CROSS JOIN všech tabulek, teprve ten nijak neomezuje možnost manipulace s daty.

Pleteš si zadání a strukturu databáze. V zadání je např. schopnost IS zachytit to, že je někdo vedoucí. Nikoli to, jak má DB tuto skutečnost zachycovat.
Já si to nepletu. Já jsem napsal, že jedno možné zadání je „vedoucí je definován tím, že má podřízené“. V rozumné definici databázové struktury pak tohle bude kontrolováno, aby nemohl vzniknout vedoucí bez podřízených. Dá se to udělat například tak, že vyjdete přímo z té definice a připravíte si nějaký pohled, který vybere všechny zaměstnance, kteří mají podřízené. Když se v budoucnosti zadání změní, změníte ten pohled. Další možnost je mít na to v databázi příznak a pomocí omezení nebo triggerů zajistit, aby byl vždy nastaven správně.

Dobrá implementace zadání se mj. vyznačuje tím, že je schopna do sebe s co nejmenšími změnami integrovat změny a rozšíření zadání.
Tohle je napsáno hodně obecně, takže to není pravda. Je potřeba umět provést ty změny, které jsou skutečně potřeba. Špatné implementace zadání se totiž mimo jiné vyznačují tím, že jsou přehnaně obecné, přičemž ta obecnost se nikdy nevyužije. A naopak ta obecnost velmi komplikuje skutečné požadované změny, které jsou v takových případech ještě jiného charakteru, než předpokládala ta obecnost. Takže vy si klidně můžete do databáze zavést příznak vedoucího, jenže pak se změní organizační struktura na maticovou, zaměstnanci budou mít organizačního vedoucího a projektového vedoucího, a stejně musíte strukturu měnit.

Ostatní tedy nepředefinovávají zadání, ale počítají s rozumnou implementací tohoto zadání.
Ne, předefinováváte zadání. Pokud zadání zní „vedoucí je ten, kdo má podřízené“, jakmile přijde o posledního podřízeného, podle definice přestává být vedoucím. To zadání vám může připadat divné, můžete ho rozporovat, můžete počítat s jeho změnou. Ale když napíšete „možnosti vyhodit z oddělení posledního člověka, aniž by se Ti ztratila informace o tom, že je někdo vedoucí“, je to v rozporu se zadáním, protože podle zadání dotyčný přestal být vedoucím, ale podle vás dále je vedoucím.

2210
Nic jiného netvrdím. Záleží přece na tom jakým způsobem ty funkce použijete a to jsem psal, že já hledám funkci, která umožňuje přístup k souboru více uživateli, načíst soubor, změnit soubor, zapsat soubor. V mých testech není ta změna.
To ale umožňují všechny funkce, o kterých tady byla řeč. Akorát se (kterákoli z nich) musí správně používat. Navíc ty vaše testy mohou ale nemusí případné chyby odhalit. Konkurenční programování je založené na tom, že pochopíte problém a nastudujete si dokumentaci použitých funkcí. Nelze to založit na testech, protože variant je příliš mnoho, takže je nedokážete otestovat všechny. A do třetice, výsledkem testu, který ověřuje, zda by váš kód mohl být správně, je výstup ano (možná je správně) nebo ne (není správně) – ne žádné grafy. Pokud vám z testu vyjde, že ten kód je špatně, nemá smysl z toho malovat nějaký graf, ale opravit ten kód.

2211
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 18. 10. 2019, 07:19:49 »
Toto pravidlo Filip porušil hned v začátku této diskuse. Nerespektoval realitu databáze, ale respektoval pravidlo určené rozhodnutím. Tím mám na mysli "tbl2 nemusí obsahovat odpovídající záznamy" (realita) vs. "hledáme jen allowed > 0" (rozhodnutí specifické pro jeden jediný pohled).
No jo, když vy si pořád pletete modelování databáze (strukturu tabulek) a dotazování. Tak ještě jednou: SELECT opravdu není součástí modelování databáze. Pokud mi nevěříte, najděte si, jaký je rozdíl mezi DDL a DML, a všimněte si, že SELECT nepatří pod DDL.

2212
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 18. 10. 2019, 07:16:46 »
To jsem jaksi nespojil já, to jaksi spojili platové předpisy v mnoha firmách.
Jak jsem psal, takový předpis se snadno může změnit.

Tvuj "zlepšovák" takovouto situaci prostě nebude umět zkontrolovat, protože nebude umět správně podchytit, kdo má funkci vedoucího.
Tak, jak jsem to popsal, nebude co kontrolovat, protože do databáze bude přepsána ta definice. Podchycení toho,kdo má funkci vedoucího, bude dané právě implementací té definice.

Tvými zlepšováky jsem nemyslel Tvůj způsob zápisu dotazu, ale Tvůj způsob, jakým jsi chtěl zachycovat zaměstnaneckou strukturu ve firmě. Která byla nesmyslná - viz výš - a tedy není divu, že ostatní ve své argumentaci Tebou navrženou strukturu DB ignorovali a argumentovali rozumnou strukturou DB - proti čemuž jsi se poněkud arogantně ohrazoval.
Pokud máte nějaké zadání, můžete ho rozporovat, že je podle vás špatně, ale nemůžete si ho potichoučku úplně předělat. Struktura DB, kterou jsem popsal, přesně odpovídala zadání, které jsem také jasně napsal. Ostatní mohou zadání klidně rozporovat, mohou navrhnout jiné – ale pokud zadání akceptují ale navrhnou strukturu databáze, která je s tím zadáním v rozporu, je chyba na jejich straně.

2213
Jenom bych upřesnil, že neustále píšete, že selhávají funkce flock() a file_put_contents() atd., ale ve skutečnosti selhává váš kód. Ty funkce fungují správně, chyby jsou ve vašem kódu.

2214
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 16. 10. 2019, 20:19:44 »
Právě proto, že může být vedoucí oddělení, kde nejsou zaměstnanci (ale např. platově je v třídě vedoucích atd....) - spojuješ do jednoho příznaku dva nesouvisející fakty.
Ty dva nesouvisející fakty (vedoucí a platová třída) jste spojil vy.
 
Stejnej nesmysl je vynucovat že každý má svého nadřízeného
Někdy je to naopak velice praktické. Můžete organizačně (ne databázově) s tou rolí nadřízeného spojit určitá oprávnění, např. schvalování dovolené. A pak nedojde k situaci, že si ředitel nemůže vzít dovolenou, protože mu ji nemá kdo schválit.

nebude dobře fungovat, protože např. dotaz na počty podřízených jednotlivých lidí bude dávat (bez patřičných ošetření komplikujících dotazy a navíc snadno opomenutelných) špatné výsledky, protože ostatní vedoucí sami sebe nepovedou
Větší banalitu už tam nemáte?

Stará známá poučka návrhu databází praví: "zachycujte realitu".
A proto mi tu ve svém komentáři vysvětlujte, že mám ignorovat realitu a databázi raději navrhnout jinak.

Mimochodem, ten můj model databáze zachycující realitu je problematický z jiného důvodu. Další poučka říká, že není vhodné databázi modelovat těsně podle pravidel daných realitou, pokud jsou ta pravidla daná rozhodnutím. Protože se to rozhodnutí může změnit.  Takže pokud mi někdo řekne, že u nich ve firmě je nadřízený definován tím, že má podřízené, budu zvažovat porušení pravidla „modeluj realitu“ právě proto, že ta definice nadřízeného je daná rozhodnutím a může se změnit.

Takže se moc nedivím, že ostatní Tvé "zlepšováky" pro návrh db ignorovali
Já jsem žádné zlepšováky nenavrhoval, právě naopak – já jsem psal o standardním zápisu INNER JOINu pomocí INNER JOINu. Naopak jsem proti zlepšováku Miroslava Šilhavého s tím, že pro INNER JOIN použije zápis pomocí OUTER JOINu a spojovací podmínku přidá k filtrovacím podmínkám do WHERE.

To je o tom, jestli chcete být programátorská lopata, která nechce rozumět reálnému prostředí a co jí není vyspecifikováno do puntíku, tak to ignoruje. Nebo jestli chcete program (včetně SQL) opravdu navrhovat. Pak musíte přemýšlet o krok dál.
Když píšete o sobě, pište raději v první osobě než v druhé. Navíc vy jste ignoroval i to, co do puntíku specifikováno bylo.

Zadání bylo naprosto přesně zadané: struktura dat byla dána tím, že "v tbl2 může a nemusí existovat odpovídající záznam"
Ano, tím je dána struktura dat. Struktura dat se popisuje pomocí DDL, zatímco JOIN je součástí SELECTu, tedy DML. Je hloupé pokoušet se JOINem určovat strukturu dat, protože tím strukturu nezměníte.

zatímco podmínka dotazu byla dána "allowed > 0"
Jsem rád, že jste konečně zaregistroval, jak byla dána podmínka. Ano, přesně takhle. Proto je také přesně tahle podmínka ve WHERE. A nefunguje to jen náhodou, jako ve vašem případě, ale vždycky, pro jakoukoli podmínku. Co když se podmínka změní na allowed IS NULL? V mém postupu se jenom změní podmínka ve WHERE a bude to dál fungovat. Vy byste v takovém případě (možná) zjistil, že jste použil špatný JOIN a že ho musíte opravit.

Naopak vy jste ze zadání naprosto nadbytečně dovodil, že OUTER JOIN se dá redukovat na INNER JOIN.
Nikoli, ten INNER JOIN je v zadání napsaný: „vybrat pouze to, co v tbl2 je …“. To naopak vy jste zcela nadbytečně odvodil, že zrovna v tomhle konkrétním případě se i OUTER JOIN bude chovat stejně jako požadovaný INNER JOIN.

ja som skor riesil Vasu fobiu z NULL hodnot spomenutu niekde vyssie.
Zkuste příště řešit reálné věci a ne vaše výmysly. Žádnou fóbii z NULL hodnot nemám, jenom jsem připomněl, že NULL je speciální hodnota, která má svůj význam, a není vhodné její význam měnit.

2215
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 15. 10. 2019, 21:16:48 »
sakra Filip vyser sa uz na to. proste mozes dostat listu zamestnancov ktory uz nemaju nadriadenych a tam bude NULL. NULL neni nic zle da sa s tym dalej pracovat. ide o to co chces robit.
Myslím, že o tom, jak psát správně SQL dotazy, by neměli poučovat lidé, kteří mají problém zapamatovat si zadání o třech větách. Napíšu, že vedoucí je definován tím, že má podřízené, načež Miroslav Šilhavý začne řešit, co když vedoucí nemá podřízené. Napíšu, že každý zaměstnanec má svého nadřízeného (což může platit i pro ředitele, který může být v databázi nadřízeným sám sobě – může to být vhodné, protože pak není potřeba řešit výjimky, kdo mu bude schvalovat dovolenou apod. ) – a e3k objeví, že je možné to řešit i tak, že ne každý má svého nadřízeného.

Zadání vám klidně může připadat hloupé, pak je ale potřeba s tím zadáním polemizovat, ne si potichoučku řešit něco jiného. Takže za sebe bych to uzavřel, že než začnete řešit, jaký typ JOINu je nejlepší, je nejprve potřeba si pořádně přečíst zadání.

2216
Pokud by za hosting platil 50 Kč měsíčně, měl by naprosto stejné problémy se zamykáním souborů, jaké tady řeší. Cena za hosting v tom nehraje roli.
Nikoli, stejné problémy by neměl. Nebyl by omezený limitem 20 MB na databázi, takže by se nepokoušel bez jakýchkoli znalostí naprogramovat vlastní databázi, ale použil by tu, kterou nabízí webhosting.

Dík Kite za zastání. A to jsem nezmínil, že by těch projektů klidně časem mohlo být víc. Platit za něco co slouží druhým a mě ne, proč bych to měl platit? Ať si to platí sami. Anebo ať mi to zaplatí ten pán co mi tak doporučuje placený hosting, když má tolik peněz na sponzorování nekomerčních projektů.
Jenže vy za to platíte svým časem, a to daleko víc, než kolik byste zaplatil za ten hosting. Navíc to zatím nevypadá, že byste se blížil k cíli – o konkurenčním přístupu k souborům toho nevíte o nic víc, než na začátku. A upřímně řečeno, nemyslím si, že byste se to mohl naučit z komentářů na diskusním fóru a generováním náhodných testů, které se s podstatou zamykání souborů míjí.

2217
To nepotřebuju. Efektivní vyhledávání mám ale už dávno vyřešeno.
Efektivní hledání v registrovaných uživatelích, které zapisujete do souboru na disk? To bych chtěl vidět…

Nedám ani korunu za web, který nevydělává, leda že by si za to návštěvníci ten hosting sami zaplatili. Ale u webu který nemá žádnou návštěvnost asi těžko. Navíc mě těmi svými blbými řečmi rozpalujete doběla. Soudíte druhé lidi podle sebe, jenže vy jste profík, můžete si dovolit strávit u počítače kolik času chcete. Vůbec jsem z těch vašich subjektivně laděných soudů znechucen. To je jak bavit se s blbým člověkem, už jsem vám říkal, že hosting placený nechci a ten neplacený má kapacitu jen 20MB. Taky jsem psal, že tu databázi použiju, ale rozhodně ne na registraci. A tento týden se databází rozhodně zabývat nebudu. To jakým tempem pracuju je moje věc, do toho vám nic není pane.
Mně by to trvalo hodinu. Vám by to trvalo den, kdybyste si nechal poradit. Bude vám to trvat měsíce, když to budete dělat způsobem, jak to tady popisujete.

Nehodnotil jsem, jak dlouho na tom pracujete nebo kolik máte času. Pouze se podivuju nad tím, že si svou práci dobrovolně tolik komplikujete. To, že vás dobré rady rozpalují doběla, je váš problém.

Pokud nejste ochoten dát 50 Kč měsíčně, místo toho budete týdny něco programovat s nejistým výsledkem, znamená to, že váš čas nemá žádnou hodnotu. Můj čas hodnotu má a nehodlám ho plýtvat na řešení vašich problémů, které si sám vytváříte svou umíněností. Takže za mne naposledy: pokud je pro vás příliš pracné použít úplně základním způsobem jakoukoli databázi, ukládání dat do souborů v konkurenčním prostředí (tak, aby to alespoň trochu rozumně fungovalo) naprogramovat nedokážete. To není žádné souzení nebo hodnocení, je to prosté konstatování faktu. Buď to můžete vzít na vědomí, zařídit se podle toho a změnit svůj postup tak, abyste naprogramoval to, co naprogramovat chcete. A nebo můžete hlavou dál zkoušet prorazit betonovou zeď.

2218
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 14. 10. 2019, 22:57:22 »
Pořád se slepě řídíte strukturou tabulek a neberete v úvahu význam dat. Pokud záznamy s neexistující vazbou nemají žádný význam, nemá smysl vytvářet nad nimi pohled, abyste je následně při každém použití toho pohledu musel odfiltrovat. Já jsem nepsal o pohledech, které přidávají jednu podmínku, ale o pohledech, které reprezentují různá data. Např. pokud je vedoucí zaměstnanec definován tím, že má podřízené, nemá smysl vytvářet si pohled s vedoucími, který bude obsahovat i ty, kteří žádné podřízené nemají, a ty z něj pak při každém použití odfiltrovávat.

Přesně naopak. V aplikaci můžu chtít zobrazit všechny vedoucí, co mají podřízené zaměstnance. Ale také můžu chtít (a je to dost běžné) na jiném místě zobrazit i ty, co (už) žádné podřízené nemají. Tedy jak existence, tak neexistence navázaného záznamu je významná. Struktura dat je pro oba záměry shodná, liší se jen v podmínce filtru.

2219
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 14. 10. 2019, 21:47:41 »
Pořád se slepě řídíte strukturou tabulek a neberete v úvahu význam dat. Pokud záznamy s neexistující vazbou nemají žádný význam, nemá smysl vytvářet nad nimi pohled, abyste je následně při každém použití toho pohledu musel odfiltrovat. Já jsem nepsal o pohledech, které přidávají jednu podmínku, ale o pohledech, které reprezentují různá data. Např. pokud je vedoucí zaměstnanec definován tím, že má podřízené, nemá smysl vytvářet si pohled s vedoucími, který bude obsahovat i ty, kteří žádné podřízené nemají, a ty z něj pak při každém použití odfiltrovávat. Zároveň můžu mít nadefinováno, že každý zaměstnanec má svého vedoucího, to je pořád stejná struktura dat, pohled „zaměstnanci se svým vedoucím“ bude velmi podobný. Stejná struktura tabulek, stejná data, JOIN stejné tabulky do sebe sama – ale dva různé významy, dva různé pohledy, a možná dva různé JOINy, podle toho, jak bude vyřešen ředitel firmy, zda i u něj bude dodrženo pravidlo, že každý má vedoucího.

2220
To je blbost, registraci si napíšu za týden.
Když vás baví psát týden něco, co můžete mít hotové za hodinu… Navíc už se tu dva dny snažíte přijít na to, jak se mají zamykat soubory, řešení stále nikde – a to zatím řešíte jen přidávání záznamů, ale ne aktualizaci nebo mazání nebo dokonce efektivní vyhledávání.

Stran: 1 ... 146 147 [148] 149 150 ... 375