vzdy bude cast logiky v aplikaci a jina cast v databazi, nikdy nebude vse v databazi, neznamena to, ze se neco duplikuje.
Neduplikuje se do té doby, než zjistíš, že v nějakých SQL dotazech potřebuješ použít tu logiku, jejíž část je v APP. Protože ji tam prostě nemáš. V takovém případě prostě buďto tu logiku obcházíš (což je budoucí průšvih), nebo ji duplikuješ (což je opět budoucí průšvih).
Třetí - správná cesta - je přesun té logiky do DB, ale to může být netriviální refaktor a klient Tě umlátí, že chceš za z jeho pohledu primitivní úpravu aplikace nehoráznou sumu. Takže to tak neuděláš a volíš jedno z řešení výše... To není teorie, to je praxe...
Nejhorší na tom ale je, že ve větším projektu
nevíš jaká logika je v APP a jaká v DB. Takže když chceš pracovat na DB vrstvě, tak prostě
nevíš, jestli náhodou neobcházíš nějakou logiku na APP vrstvě. V lepším případě to jsi schopen ověřit kontrolou zdrojových kódů APP popř. projitím dokumentace a stojí Tě to jen nemálo času. V horším případě je dokumentace nekompletní (kdo máte v projektech dokumentaci 100%?) anebo danej kus kódu s danou logikou nenajdeš/špatně pochopíš a vyrobils problém.
proc bych psal SQL update rucne? Jeste jednou, kazde ORM umi vygenerovat validni batch update dotaz.
Jak píšou kolegové, pokud máš logiku v APP, tak to prostě není možné, protože na APP vrstvě je aplikační logika postavená nad ORM a tedy ji ORM nevidí a neumí použít.
Leda, že bys psal APP logiku ve vrstvě pod ORM jako nějakou konfiguraci ORM - jenže v čem? Nějaký "user-friendly" deklarativní způsob nebude ani vzdáleně turingovsky úplný, a tedy v něm většinu APP bussines logiky prostě nenapíšeš. A jakýkoli složitější jazyk? Pak je otázka, proč vymešlet kolo: pokud to bude komplexní, tak to nebude o tolik jednodušší než SQL, aby to ospravedlnilo veškeré nevýhody z toho plynoucí (další jazyk v projektu, problémy vzniklé mapováním toho jazyka na SQL atd... atd....).
Jako teoreticky si dokážu představit ORM, které by bylo např. v Pythonu, a kde by definice objektů byla napsaná tak, že by se z ní automaticky vytvářely PL/Python stored procedury, ale takový ORM imho neexistuje a napsat něco takovýho by byla hodně netriviální věc.
Navíc, takový přístup by vlastně nebyl nic jiného, než dublování funkcionality, o kterém píšu více, jen díky "strojovému generování" s menším rizikem desynchronizace implementací.