Vou falar da minha experiência. No início, quando eu estava aprendendo, me parecia muito mais natural programar orientado ao banco, tanto que eu começava pelo banco, era mais fácil pensar assim. Hoje em dia, depois de estudar mais, arquitetura limpa, arquitetura em camadas, etc, é o contrário. O banco, eu vejo apenas como uma tecnologia de persistência e acaba sendo uma das últimas coisas que faço no projeto. Antes disso, o código é todo orientado ao negócio, o famoso DDD. O core de tudo é o que o código faz, quais regras de negócio ele tem, quais validações, quais entidades(entidades de código, não de banco) fazem parte do negócio. O código funciona independentemente do banco. O banco apenas persiste e recupera os dados. Se amanhã, eu quiser deixar de usar um banco relacional pra usar um no-sql, eu simplesmente troco o adaptador do banco e uso outro, sem afetar o propósito da aplicação. O banco é apenas uma ferramenta, uma tecnologia de persistência. Mais do que isso até, a própria API, libs externas, infra, seu eu quiser eu troco por outra, eu troco sem grandes dificuldades. Toda a tecnologia que permeia o código, são mais detalhes de implementação do que algo que tenha a ver com que o código ou negócio, que é o principal.
E porque seria assim? O banco é "descartável", as coisas só estão ali porque a aplicação(quando tem uma aplicação), colocou. Poderia ser esse banco ou qualquer outro, as coisas, se fossem orientadas ao banco, seriam sempre diferentes. Mas o banco só serve pra persistir dados e nada mais. Já as regras de negócio da sua aplicação, elas só mudam se o negócio mudar, assim como o banco também deveria mudar. Por exemplo, você modela na aplicação que um usuário pra realizar determinada tarefa no seu site deveria ser maior de idade, isso é uma regra de negócio. Você então determina isso na aplicação, faz as validações implementando essa regra. Essa regra pertence ao domínio porque é uma ideia, uma regra de negócio, ela pertence ao "código" porque a regra é primária, ela não depende de como os dados são salvos. As restrções dos bancos devem servir apenas pra manter a normalização dos dados, aintegridade, a consistência dos dados, etc. Não interessa AO BANCO se um número tem que ser maior de "18 anos" ou não, aliás, o banco só trata um número, o conceito de restrição de IDADE, se trata de negócio/código.
Então se fosse pra ser curto e grosso, eu diria que o código é orientado ao negócio e vem antes de pensar sobre como os dados serão modelados ou salvos, o banco não é orientado a nada, só serve pra persistir. No seu caso, é como se o "código" estivesse na sua cabeça, você pensa que orientou algo aos dados, mas não, você orientou o banco à sua necessidade. O código faz isso, ele modela a sua necessidade, agora se é o banco A, B, com tecnologia X ou Y, se vai salvar na nuvem, na memória, no disco ou onde for, isso não interessa.
De fato não interessa o banco. Em parte.
E você já fez essas coisas todas que diz aí?
A minha experiÊncia de mais de 40 anos é que as pessoas acreditam nisso mesmo, mas elas não sabem na prática como é. E acaba acontecendo duas coisas:
a) o sistema era tão simples que qualquer coisa serve e nunca haverá necessidade real de trocar nada, qualquer porcaria que a pessoa fizer vai dar conta, até tudo errado. b) o sistema precisa ser muito bem arquitetado para aguentar o traco, e na rara ocasião que precisará trocar o banco de dados especialmente, mas pode valer para outras coisas em menor grau, significa que já está ruim por ter criado camadas desnecessárias e não otmizadas para acessar o DB, a tal da arquitetura limpa é extremamente s uja, e justamente por ter feito isso é que pode ter surgido a necessidade de trocar algo. E se trocar não vai melhorar muito a não ser alguma questão pontual, e um dia vai aparecer questões novas que mostrará que a troca não foi perfeita. E para arrumar e deixar bom mesmo a silução será arracar essa camada que abstrai o banco de dados e usá-lo da forma correta a ser definida por um profissional competente nisso.
Na ausência de alguém competente o que acaba acontecendo é a adoção de aruiteturas mais complexas ainda, por exemplo o uso de microsserviços para resolver um problema que nem deveria estar ali. Eu já dei consultoria que fizeram tudo isso para dar perfomance, e eu só mandei tirar, fazer o simples e a performance veio.
Essencialmente nenhum caso precisa trocar de banco de dados, todos os mais conhecidos dão conta do recado nas mãos de quem sabe o que está fazendo, não importante o tamanho da bronca que está segurando. Até o SQLite, agora com tecnologias prontas pode dar conta em grande parte dos cenários (ele já dava no básico em muitos deles, pra quem sabia usá-lo).
O banco de dados é só uma forma de armazenamento quando está atrás de uma aplicação. Tem usos diretos que é diferente. Mas não quer dizer que ele não deva ser otimizado.
Uma boa estrutura resiste a mudanças de negócios mais facilmente, se o banco for modelado pensando no que o negócio precisa dá muito mais trabalho, e foge da ideia de que ele é só um meio de armazenamento. Ele deve se preocupar em armazenar bem, não modelar o negócio bem. Quem tem que modelar o negócio é a aplicação.
Todas essas técnicas "modernas" como DDD, CA , etc., tem lá seu valor e cabe em alguns cenários, mas as pessoas precisam estar cientes dos custos que isso tráz, e quase ninguém analisa isso, usa porque "todo mundo" está usando (segredo: só uma minoria está usando mas só bem vocais), ou seja, apesar da ferramenta ter algum valor, a forma como se decide usar é modinha, é "boa prática" 9que está virando um vídeo no meu canal que estreará em breve e texto no meu blog, porque provavelmente é problema mais grave e frequente que se comete e "ninguém" fala dele.
S2
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).