SIM, VOCÊ TÁ VIAJANDO — E VOU TE CONTAR PORQUÊ.
SQL não é "chato" — é PODER. E quando você entende isso, percebe que 99% dos projetos nunca precisarão de outra coisa. A não ser que você seja o próximo Google ou Amazon,. Spoiler: nunca sera.
SQL é PURAMENTE DECLARATIVO. Você não "trabalha" pra definir esquemas, você DECLARA o que quer, e o banco faz todo o trabalho pesado. Isso é o oposto de "trabalhoso". Enquanto você tem gente gritando que "NoSQL é mais fácil", outros estão calados escrevendo JOIN, GROUP BY, WINDOW FUNCTION e fazendo os dados dançarem conforme o programa, e não o contrário. 💥
Nada existe num vácuo. O que NoSQL resolve?
Essa ideia de que "no começo não preciso de relações complexas" é uma armadilha. Mesmo que você não veja as relações explicitamente no início, elas sempre existem. Um pedido tem um cliente. Um produto tem uma categoria. Um tweet tem um autor. Até seu JSONzinho "desestruturado" no MongoDB tem relações implícitas — você só tá varrendo a sujeira pra debaixo do tapete e chamando de "flexibilidade". Tudo, absolutamente tudo, é relacional.
MAS ESPERA, TEM MAIS. Você já ouviu falar do JSONB do PostgreSQL? É o seguinte: você tem TODA a "liberdade" do "NoSQL", mas com indexação, consultas complexas, e a capacidade de, pasme, RELACIONAR ISSO COM OUTRAS TABELAS. Basicamente, é o MongoDB, só que melhor. E o SQLite? Faz tudo isso e ainda roda até num microcontrolador de 2 reais.
Então não me venha com "NoSQL escala melhor" como um dogma. PostgreSQL escala muito bem horizontalmente. E mesmo o SQLite, dá para escalar para centenas de milhares de conexões. Escalabilidade é arte, não religião. Enquanto tem 'cloud engineer' configurando auto-scaling sem entender o que tá acontecendo, tem programador raiz otimizando cada ciclo de CPU que a consulta gasta.
MAS CALMA, NÃO SOU FANBOY:
"NoSQL" é um termo burro. São 50 tipos de banco diferentes e cada um serve pra um propósito ESPECÍFICO. E vamos falar a verdade, esse termo "NoSQL" é uma bagunça! O que você quer dizer com isso? Existem bancos de dados de documentos (como o MongoDB), bancos de dados de chave-valor (como o Redis), bancos de dados de grafos (como o Neo4j), bancos de dados de colunas (como o Cassandra)... cada um com suas particularidades e casos de uso específicos. Não existe um "NoSQL" genérico que sirva para tudo. Mas existe o SQL, entendeu agora?
-
SQL não é perfeito, mas é BOM O SUFICIENTE pra quase tudo.
-
Bancos especializados são ÓTIMOS pra problemas específicos, mas DESASTROSOS como escolha padrão.
-
COMEÇAR COM SQL É SEMPRE A ESCOLHA SEGURA. Se um dia você precisar de algo diferente, AÍ VOCÊ MIGRA.
O PONTO É: comece com SQL. Sem discussão. USE. Se um dia, e só se, você esbarrar num problema que exija um banco específico (ex: "preciso processar 1 milhão de eventos por segundo"), AÍ VOCÊ MIGRA. Não comece no NoSQL por medo de um futuro que provavelmente nunca chegará.
Vai lá e escreve umas queries como se o mundo dependesse disso. Porque depende.
Agora, o elefante na sala: tem projeto que usa banco relacional só pra FICAR REFÉM DE UM ORM chinfroso, ou pior fazer um SELECT * FROM users
depois um SELECT * FROM carts
, e processar tudo no Javascript. Aí, óbvio, fica uma bosta mesmo. Se é para tratar o PostgreSQL como um "dado bruto" e jogar tudo na memória; e trafegar tudo Internet, então sim, vai de NoSQL mesmo — porque o problema não é o banco, é o dev.