Neměla by být ale databázová vrstva spíš od aplikace oddělená tak, aby naopak nezáleželo na tom, jakou databázi použiju?
Pokud „databází“ myslíte to, že má být jedno, jestli to bude SQL relační databáze, dokumenová databáze, grafová databáze, XML databáze nebo souborový systém, pak to rozhodně jedno není. Pokud vám tohle je jedno, pak nejspíš žádnou databázi nepotřebujete…
Ve chvíli, kdy relační databáze umožní uložit libovolný dokument (json) do jednoho sloupce, tak v tom okamžiku se na ni můžu dívat jako implementaci dokumentové databáze, a v tomto ohledu jsou ekvivalentní v tom smyslu, že nemůžu říct, která je vhodnější, nebo není. Prostě jsou na tom stejně. Pochopitelně jedna implementace bude rychlejší v tom, jedna pomalejší v onom, ale jako koncept umí totéž. Ale proč bych kvůli změně měl přepisovat aplikaci?
Auto, letadlo i loď jako koncepty také umí totéž – dopravovat náklad z místa na místo. Jenže když začnete vyvíjet s autem, skončíte nakonec s tím, že budete i tu loď a letadlo tahat po zemi.
Myslím, že se na to totiž díváte z opačné strany. Pro aplikaci není důležité, co databáze umožňuje, ale co neumožňuje.Tomu, co neumožňuje, se budete v aplikaci snažit vyhnout. A tím se vaše aplikace přizpůsobí konkrétní databázové technologii – protože bude obcházet to, v čem je slabá, a využívat toho, v čem je silná. Takže klidně můžete ukládat dokumenty do PostgreSQL, ale nezískáte tím žádnou výhodu relační databáze, ale přijdete o výhody dokumentové databáze.