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 ... 145 146 [147] 148 149 ... 375
2191
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 22. 10. 2019, 13:55:44 »
Ukázal jsem, že Tvůj příklad v situacích, které v praxi vcelku běžně nastávají, nebude fungovat
Co na tom nechápete, že příklad nevhodný pro jednu situaci může být vhodný pro jinou situaci? Opravdu je pro vás tak těžké pochopit, že to, že je osobní auto nevhodné pro převoz metráku uhlí, neznamená, že není vhodné k ničemu?

Tvůj argument je špatný: to, že nějaký model funguje v jedné konkrétní situaci není důkaz toho, že je dobrý.
Ale já jsem nedokazoval, že je dobrý. Pro mé účely úplně stačilo, že je možný.

A to je naprosto legitimní námitka, která podle toho, o koho jde, může či nemusí být správná. A moji arugmentaci, že česká legislativa i potřeby firemní praxe jsou takové, že si v podstatě odvážení uhlí vynucují, jste nijak nevyvrátil.
Ta námitka je úplně mimo. Šlo jen o příklad, kdy je možné použít určitou strukturu tabulek. Vy jste se na tom zasekli, místo abyste řešili podstatu, totiž že struktura tabulek neimplikuje, jaký JOIN se má použít.

Ty jsi se to nejprve snažil vyvrátit - a ukázalo se, že o příslušné legislativě a z ní plynoucích potřebách pro praxi příliš nevíš
Já jsem vaše tvrzení nevyvracel, vyvracel jsem tvrzení Miroslava Šilhavého, který napsal něco, co bylo v rozporu se zadáním, aniž by se tím rozporem jakkoli zabýval. Dokonce jsem přešel i vaši neznalost legislativy, kdy si pletete pojem „vedoucí“ (který legislativa nezná) s pojmem „vedoucí zaměstnanec“.

Ty tvrdíš, že jeho best practice je špatná. Tedy říkáš, že best practice je jiná.
Pokud za best practice označujete i tvrzení „tímto způsobem to vůbec neposuzujte, závisí to na úplně jiných parametrech“, pak je to best practice.

Ten, kdo se vyhýbá triggerům a bojí se databázovýho programování a radši tu logiku buďto nacpe až do aplikační vrstvy (čímž vznikne problematická situace, kdy různé constrainy jsou vynucované na různé úrovni aplikace), nebo ji v DB vynutí primitivními a neflexibilními mechanismy (přímo strukturou DB) aby se vyhnul triggerům, jsi jaksi Ty.
Omyl. To Miroslav Šilhavý napsal, že to nejde kontrolovat pomocí cizích klíčů, tudíž to v databázi nejde zkontrolovat vůbec.

Ano, když se člověk vyhýbá nástrojům, které je třeba použít k správnému návrhu databáze, tak tu databázi zkriplí.
Souhlas. Jenže Miroslav Šilhavý se tu tváří, jako kdovíjaký expert na databáze.

Jo, klasika. Tak přesně vznikají ty databáze, kde je hromada šťítků typu: "Novinka", "Novinky", "novinky", "novikny", "novynky", "novikni"..... Kdybych byl vznětlivější typ, tak bych měl chuť zpřerážet hnáty člověku, co tu databázi takhle blbě navrhnul. Todle je i proti základním principům db programování (denormalizovaná struktura).
To je ale záměr. Štítky jsou prostě libovolný text, který si uživatel k objektu přilepí. Jestli má potřebu vytvořit si štítky „Novinka“ i „Novinky“, ať to klidně udělá. Je to na něm, aplikace mu pouze poskytne nástroj, jak se štítky snadno pracovat. Pokud píše „Novi“, aplikace mu našeptává „Novinka“ a on se stejně rozhodne vytvořit nový štítek „Novinky“, asi k tomu má důvod.

Pokud má uživatel možnost štítky libovolně vytvářet a mazat a štítky nenesou žádnou další informaci, nedává smysl vytvořit si tabulku štítků, která bude mít jediný sloupec, a to název štítku. To není denormalizace.

2192
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 22. 10. 2019, 10:53:47 »
Na konkrétních příkladech - dokonce i Tvých - jsem ukázal, že takové zadání v praxi nebude fungovat dobře. Tyto příklady jsi nijak nevyvrátil. Budeme diskutovat způsobem, že kdo víckrát zařve svoji pravdu, tak vyhrál? Nebo budeme argumentovat?
Ukázal jste, že jsou možná i jiná řešení. Že nebude fungovat můj příklad jste neukázal. Pokud je např. jediná funkce vedoucího, že schvaluje dovolenou, bude můj příklad fungovat perfektně.

Jestli jsi to nepochopil, tak právě v těch případech bylo to rozporování implicitně obsaženo: upozorňovali jsme Tě na případ, který Tvé zadání neumí pochytit, ač je potřeba.
Já jsem reagoval především na Miroslava Šilhavého, který zadání prostě ignoroval a řešil něco, co bylo v rozporu se zadáním. To, že vy jste si vymyslel svůj vlastní příklad, který není kompatibilní s mým zadáním, je váš problém – o zadání neříká vůbec nic. Když já potřebuji odvézt tři lidi autem a vy potřebujete odvézt metrák uhlí, nedokážete nefunkčnost mého řešení tím, že je nefunkční pro vás.

že chybu toho zadání nevidíš
Zatím nikdo chybu v zadání neukázal. Akorát jste ukázal jiná zadání.

Pokolikáté budu muset zopakovat, že ŘEŠENÍ NEBYLO V ROZPORU S TVÝM ZADÁNÍM, do navržené datové struktury šlo uložit i data požadovaná dle tvého chybného zadání.
Opakovat to můžete kolikrát chcete, ale pravda to není. Řeč není o datové struktuře. Řeč je o zadání „vedoucí je definován tím, že má podřízené“ a reakcí „co když vedoucí nemá podřízené“. Kolikrát ještě budu muset zopakovat, že není možné, aby vedoucí zároveň měl i neměl podřízené?

Uvědom si, k ČEMU MĚL TEN TVŮJ PŘÍKLAD SLOUŽIT: K DEMONSTRACI BEST PRACTICIES při návrhu databáze.
Nikoli. Příklad měl jen ukázat, že struktura databáze neurčuje, jak se budou v dotazech spojovat tabulky. Nad stejnou strukturou tabulek můžete dělat INNER i OUTER JOIN – výstup pak má jiný význam.

tak by v praxi bylo Tvé řešení chybné, protože dřív či pozdějc by se na omezení toho návrhu narazilo tak jako tak. To je jedna z dalších věcí, která dělá dobrého programátora: když už šéf/klient neuhne a chce blbost, tak SW navrhnout aspoň tak, aby ta blbost vadila co nejméně.
Tohle je častá chyba začínajících programátorů – implementují bez znalosti problematiky jakési obecné řešení, jehož výhoda se má ukázat někdy v budoucnosti. Jenže v budoucnosti se ukáže, že potřeby uživatele jsou úplně jiné, program na potřebné změny připravený není, zato je velmi komplikuje to „obecné řešení“.

Vždyť to bylo vidět i na zdejší diskusi. V zadání bylo, že vedoucí je definován tím, že má podřízené. Zadavatel na to může spoléhat – že mu aplikace ohlídá, že nemá vedoucího bez podřízených. Jenže pak jste společnými silami přišli s tím, že to má být v databázi uložené jako příznak, takže je nutná explicitní kontrola. Jenže pomocí cizích klíčů to nejde, pomocí triggerů to neumíte a v aplikaci to kontrolovat nechcete. Takže tam tu kontrolu mít nebudete. Takže jste se přes „vylepšování pro budoucí použití“, několik hloupých pravidel a neznalost dostali k tomu, že vaše aplikace je sice perfektně připravená na budoucí změny, akorát že nesplňuje současné zadání, protože umožní mít vedoucího, který nemá podřízené.

A je úplně jedno, že se vám nelíbí use-case „vedoucí je definován tím, že má podřízené“ – stejné vztahy mohou existovat v jiných případech, třeba „štítek je definován tím, že existují objekty, které mají daný štítek přiřazen“.

2193
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 21. 10. 2019, 22:08:12 »
Nemusíme jít ani do jednoho extrému. Často úplně stačí, když si databáze udrží konzistenci, referenční integritu. Generování výstupního XML/HTML je sice v databázi možné, ale je to hloupé. Opačně jsem viděl ve výstupní šabloně volat SQL dotazy, což je zpravidla také špatně.
Je tu jeden diskutující, který si nevhodným návrhem databáze zkomplikoval situaci (místo konzistence dané definicí potřeboval nějak udržovat konzistenci), aby následně prohlásil, že pomocí cizích klíčů a check constraints tu konzistenci zaručit neumí. Proto jsem psal, že je možné tu kontrolu dělat i v aplikaci. V tomto případě to sice není vhodné, ale jsou jiné případy, kdy jsou kontroly tak komplexní, že nemá smysl je provádět v databázi.

2194
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 21. 10. 2019, 17:20:06 »
Když správce databáze umí používat GRANT, vložené procedury a triggery, tak se nemusí bát k ní někoho pustit.
Jistě, ale tady jsme se bavili o případu, kdy jeden diskutující triggery používat neumí. Navíc aplikační logiku je možné psát v databázi, ale má to své meze použitelnosti a složitější logiku je lepší psát jinde, než v databázi. To, že někdo umí jenom SELECT * FROM tabulka a vše ostatní – řazení, filtrování, spojování – řeší (typicky) v PHP, je jeden extrém. Ale komplikovaná logika nacpaná v triggerech a uložených procedurách je druhý extrém.

2195
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 21. 10. 2019, 14:47:12 »
Nejlepším databázovým API je SQL.
Ovšem když chcete někoho pustit ke své službě, neznamená to, že nejlepší je zpřístupnit mu databázi.

2196
Server / Re:Postfix - obsahový filtr - regexp - diakritika
« kdy: 21. 10. 2019, 12:36:41 »
Je u nás použitelná, ale tohle není způsob použití, ke kterému by tyhle kontroly byly určené.

2197
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 21. 10. 2019, 12:34:51 »
To je jak besídka zvláštní školy…

Pokud je to kontrola v aplikaci, pak to není možno v pravém smyslu považovat za integritní omezení dat.
Za prvé to stejně tak je možné považovat za v pravém smyslu integritní omezení dat – můžete např. data zpřístupnit jen přes nějaké API, jehož implementace teprve bude komunikovat s databází, nikdo jiný přímo do databáze nepoleze. Za druhé, o integritním omezení dat píšete vy, já jsem psal o zadání. To je pořád ten váš velmi zúžený pohled, kdy se díváte jen na databázi a nevidíte nic okolo.

Triggerem to hlídat můžete pouze za předpokladu, že budete mít nadřízeného v databázi označeného takovým příznakem.
Ano, právě na ten případ, kdy máte nějaký příznak v databázi, jsem reagoval.

Jinak by trigger nemohl vyhodnotit, který nadřízený musí mít podřízené. V tu chvíli jste na půdě návrhu, o kterém hovořil Logik - tedy musíte mít v datech nadřízeného označeného, nikoliv to vyvozovat z existence vazby.
Když to odvozujete online z existence vazby, jak byl můj původní návrh, nemáte zase co kontrolovat, protože ta vazba prostě ten stav „vedoucí“ rovnou definuje.

Vaše komentáře už jsou jenom trapné, snažíte se hledat chyby za každou cenu, ale už je nacházíte akorát u sebe. Já napíšu „původně jsem psal o variantě A, ale vaše varianta B by se řešila takhle“, a vy na to odpovíte, že ale to řeší variantu B a varianta A by se musela řešit jinak.

Jestli na to budete reagovat zase nějakým dalším ještě bláznivějším komentářem, s mojí odpovědí už nepočítejte.

2198
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 21. 10. 2019, 07:43:15 »
Čímž jste se dopustil katastrofální chyby. Vazba bude buďto přímo zaměstnanec => nadřízený, nebo v případě příslušnosti zaměstnance ve více týmech (stává se!) by byla přes dynamickou vazbu zaměstnanec <= vazba => nadřízený. V obou případech vede FK směrem k nadřízenému, tedy na straně entity nadřízeného nemáte jaké pravidlo kontrolovat (maximálně CHECK, který se ovšem nevyvolá při ztrátě vazby - takže je k ničemu), natož aby bylo deferovatelné v době vzniku té vazby. Dál byste musel vyžadovat, aby entita zaměstnance existovala dřív, než entita nadřízeného - což je další úvaha zcela mimo praxi. Sakra, kdo to tu o pár postů výše hlásal, že databáze má zachycovat realitu, nikoliv stav vytvořený rozhodnutím? A jo, Vy. Tím se netrapte, já taky plácám blbosti.
Ano, dopustil jsem se katastrofální chyby, když jsem předpokládal, že vývoji software alespoň trochu rozumíte.

Aplikace musí kontrolovat spoustu dalších věcí, ne jen ty, které lze v databázi vyjádřit jako cizí klíče. A zrovna vazbu „má podřízené“, pokud ji chcete kontrolovat vůči příznaku „je nadřízený“, můžete kontrolovat i v databázi, například pomocí triggeru. V mém příkladu ale nebyla taková kontrola potřeba, protože já jsem nenavrhoval žádný příznak „má nadřízené“ uložený v databázi – já jsem vycházel přímo z definice, že nadřízený je ten, kdo má podřízené, takže ten příznak byl vypočítáván v okamžiku, kdy byl potřeba.

2199
Server / Re:Postfix - obsahový filtr - regexp - diakritika
« kdy: 21. 10. 2019, 07:39:48 »
Myslím, že Postfix hlavičky nedekóduje, pracuje s ASCII znaky tak, jak jsou uvedené v e-mailu. Pokud předmět (nebo jiná hlavička) obsahuje ne-ASCII znaky, je zakódován do ASCII a součástí hlavičky je i kód použitého kódování. Takže obecný regulární výraz pro vaše použití nebude reálné napsat, musel byste vypsat varianty pro všechna možná kódování. Můžete zjistit, že všechny e-maily, které vás zajímají, mají předmět třeba v UTF-8, a napsat regulární výraz jenom pro ně. Ale obecně se na tohle už Postfix nehodí, kontrola hlaviček je určená jen pro úplně základní porovnání – lepší by bylo použít specializovaný filtrovací program.

2200
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 20. 10. 2019, 22:14:06 »
Vyvozujete něco, co tu nezaznělo a podsouváte to.

Programátor by měl mít nastartované kritické myšlení a měl by tyto situace domyslet. Zadavateli by je měl samozřejmě předložit, pokud vybočí ze zadání. Neznám však zadavatele, který by dal tak rigidní pokyn, jako že "vedoucí je pouze ten, který má podřízené". Většinou je zadání obecnou větou: "vedoucí se pozná tak, že má podřízené", což si musíte v obecné mluvě přeložit. Zadavatel je neprogramátor, věta pak znamená "vedoucí (se obvykle) pozná podle toho, že má podřízené".

Na programátorovi (analytikovi) je umět tyto nuance rozlišit. V obou případech, které jsme zde probírali, nevybočuje programátor ze zadání, pouze domyslel existenci hraničních stavů. Následně může přidat filtr, který to omezí na úroveň striktního požadavku - a ve chvíli, kdy se ukáže, že to zadavatel nedomyslel, nemusí celou databázi překopávat a revidovat kód, aby každý dotaz od píky přeformulovál.
Nic vám nepodsouvám. Vy se pořád jen vymlouváte. Že by to takhle normálně zadavatel nezadal? Zaprvé je to jen vaše domněnka, za druhé tady to takhle napsané bylo, tak jste na to měl odpovídajícím způsobem reagovat. Pokud byste zapnul kritické myšlení, musel byste dospět k tomu, že vaše odpověď je v rozporu se zadáním a vy to nijak neřešíte.

Navíc popisujete domýšlivé chování analytika, před kterým je potřeba každého začátečníka varovat. Pokud si analytik není něčím jistý, má se na to zadavatele doptat. Pokud někdo řekne „vedoucí se pozná tak, že má podřízené“, možná také očekává, že to aplikace bude kontrolovat a nedovolí z někoho udělat vedoucího (nebo třeba „šéfa“, ať si to Logik zase neplete s vedoucím zaměstnancem). Ale vy jste mu právě tuhle kontrolu z aplikace odstranil, protože si myslíte, že všechno víte nejlíp a zadání si proto klidně můžete přeformulovat, jak vás napadne.

2201
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 20. 10. 2019, 21:02:24 »
Tak pak se možná zdržujte radit nováčkům. Ti třeba budou ochotní rozumět.
Je možné, že někteří nováčci budou rozumět tomu, že mohou zadání ignorovat a bez varování psát podle jiného zadání, které si sami vytvořili a s nikým ho nekonzultovali. Ovšem pak je potřeba je před takovým počínáním důrazně varovat.

2202
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 20. 10. 2019, 19:23:45 »
Zadání je funkční. Pokud se vám na něm něco nezdá, můžete zadání rozporovat. Pokud proti zadání nemáte žádné námitky, ale navrhnete řešení, které je v rozporu se zadáním, je to vaše chyba. Co na tom nechápete?

Pořád jenom kličkujete. Zadání bylo „vedoucí zaměstnanec je definován tím, že má podřízené“. Na to Miroslav Šilhavý odpověděl: „můžu chtít zobrazit všechny vedoucí, […] co (už) žádné podřízené nemají“. To tvrzení buď je v souladu se zadáním, nebo je s ním v rozporu. Žádná třetí možnost neexistuje. Vy, místo abyste napsal, zda je v souladu nebo v rozporu, pořád jen vymýšlíte další a další výmluvy. Jak chcete hodnotit funkčnost či nefunkčnost zadání, když nedokážete odpovědět ani na takhle jednoduchou otázku?

2203
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 20. 10. 2019, 18:18:59 »
Nikdo NEMĚNIL tvé zadání
Aha, takže „případ, kdy vedoucí nemá žádné podřízené“ je zcela v souladu se zadáním „vedoucí je definován tím, že má podřízené“. Omlouvám se, této vaší logice opravdu nerozumím – a ani rozumět nechci.

2204
Vývoj / Re:MySQL - podmíněný SELECT přes dvě tabulky
« kdy: 20. 10. 2019, 18:17:39 »
V jednom příkladu jsem nedospecifikoval některé stavy, ale účelem bylo upozornit na styl přemýšlení, nikoliv do diskuse napsat definitivní select.
Nikoli. Opakovaně jste se tu pokoušel INNER SELECT přepsat pomocí OUTER SELECTu se spojovací podmínkou přidanou do WHERE, a opakovaně jste tu podmínku do WHERE napsal špatně. Pořád tu píšete o tom, jak je potřeba u začínajících programátorů budovat správné návyky – použít ve WHERE jiný sloupec, než tam má být, s tím, že to v některých specifických případech náhodou bude fungovat, mezi dobré návyky rozhodně nepatří.

V tomto vidíte nějakou chybu?
To, že jste napsal jeden SELECT tak, že by fungoval, neznamená, že jste nemohl udělat chybu v jiném.

Jestli chcete, můžete se dál točit na detailech jako jsou překlepy nebo zjednodušení v zápisu pro účely fóra. Já preferuju diskusi o tom, jak se má k problému přistupovat a proč je jaký postup výhodný. Bohužel, právě tento kontext Vám uniká a úzce se soustředíte na vybraný detail. Ostatně, na toto jsme spolu narazili i při jiných tématech.
Aha, tak použití chybného sloupce v podmínce je překlep a zjednodušení.

Nic mi neuniká. Dávno už jsem vysvětlil, že je ten váš přístup nevýhodný, protože komplikuje a znepřehledňuje kód (o čem svědčí i ten váš „překlep“). Vám uniká, že kód musí být především správný a čitelný, a je nesmysl ho komplikovat s vidinou jakési chimérické univerzálnosti.

2205
Pro mě není slovo optimální dostačující. Je optimální a ještě víc optimální. Optimální může být pro vysokoúrovňového programátora, tzn. dostačující, ale pro perfekcionistu nízkoúrovňového programátora je nutné použít superlativum nejoptimálnější, protože to znamená dokonalý stav, kterého každý pedant touží dosáhnout.
Optimální ale neznamená dostačující, znamená to nejlepší možný, dokonalý. Jak může být něco nejlepší, když existuje něco ještě lepšího?

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