Ačkoliv s Vámi v mnohém souhlasím a integrita dat je rozhodně nade vše, přesto musím mírně oponovat.
Asi Vám ušlo, že v mySQL nejsou pouze tabulky myIsam.
Transakční programy uměli psát dobří programátoři už v dávnověku a patří to ke zvládnutí řemesla. Že se o to databáze nestará ještě neznamená, že to nejde. Přinejhorším stejně jako u Oracle - pomocí temporary tabulek. Prostě žádné změny online a pouze opakovatelné akce. (Transakce znamená "včechno nebo nic". Nic to nutně být nemusí. Také si mohu požadovanou posloupnost zapsat a po pádu ji prostě dokončit).
Zachovat datovou integritu (například při kaskádovém mazání a větvení tabulek) dá trochu práce ale jde to.
S joiny na aplikační úrovni si - předpokládám - děláte prdel.
Foreign klíče nejsou podstatné - klíče známe a vhodný join dělá totéž.
DEFAULT hodnoty použít nemusíte.
Kdo nekontroluje vstupní hodnoty není programátor ale blbec.
Primární klíče se požívají běžně.
Triggery v aplikaci nahradit lze. (Aplikace snad ví, co děláte).
Dobře napsaný program v MySQL dá prostě víc práce vež v Oraclu a vyžaduje lepšího progamátora,