sim. sem metafora. sem exagero. os esquemas do piaget sao literalmente schema de banco de dados (˶˃ ᵕ ˂˶)
ontem eu tava estudando jean piaget pra uma materia e em algum momento meu cerebro de dev simplesmente tiltou. toda vez q a professora explicava um conceito eu so enxergava SQL. e nao eh forçação de barra nao, a parada encaixa perfeitamente.
a programação é a abstração do mundo real. e o piaget, sem saber, descreveu o ciclo de vida de uma migration sql decadas antes do sql existir.
esquemas = schema do banco
piaget fala q a gente nasce com uns esquemas mentais basicos e vai construindo eles ao longo da vida. sao as estruturas q a mente usa pra entender e categorizar tudo q existe.
traduzindo pra dev isso é o DDL do cerebro. as tabelas, as colunas, os tipos, as constraints. tudo q vc conhece e entende do mundo ta mapeado nessa estrutura.
quando vc é bebe vc so tem umas tabelas bem simples tipo "coisa_q_mexe" e "coisa_q_faz_barulho". ai com o tempo vc vai criando mais tabelas e colunas conforme interage com o ambiente. tipo um banco q começa vazio e vai sendo normalizado aos poucos.
e o melhor é q esse schema nunca ta 100% completo. ta sempre evoluindo. igual banco de produção né (¬_¬)
assimilação = INSERT INTO
assimilação é quando vc encontra algo novo e tenta encaixar nos esquemas q ja existem.
tipo, a criança só conhece cachorro. ela vê um cavalo e fala "cachorro grande!"
oq aconteceu no banco?
INSERT INTO cachorro (nome, tamanho, patas, rabo)
VALUES ('cavalo', 'grande', 4, true);
o banco aceitou de boa. pq o schema atual da conta de guardar esse dado provisoriamente sem quebrar a logica. o cavalo tem patas, tem rabo, tem pelos... os campos batem. a info nova foi inserida sem violar constraint nenhuma (≧◡≦)
a assimilação é tipo um INSERT q funciona dentro do schema existente. se os campos encaixam, entra. mesmo q o dado esteja "errado", o banco nao questiona, só armazena.
e é assim q a gente aprende coisas novas no inicio. tenta encaixar no q ja sabe. "ah isso aqui é tipo um X q eu ja conheço". mesma logica.
acomodação = ALTER TABLE
só q uma hora a tabela cachorro começa a dar problema.
a criança percebe q o cavalo faz "iiirrrrí" em vez de latir. e come capim. e tem uma pata q faz pocotó no chao.
a tabela cachorro nao tem coluna pra "relincho" nem pra "come_capim". os dados nao encaixam mais.
o sistema entra em desequilibrio (desconforto cognitivo). as constraints tao gritando. o banco nao aceita mais INSERT simples.
-- era isso q dava erro, a tabela cachorro nao tem esses campos
INSERT INTO cachorro (nome, som, comida, tamanho)
VALUES ('cavalo', 'relincho', 'capim', 'grande');
-- constraint violation! desequilibrio!
ai vc é obrigada a mudar a estrutura.
ALTER TABLE cachorro DROP COLUMN comida;
CREATE TABLE cavalo (
id SERIAL PRIMARY KEY,
nome VARCHAR(100),
som VARCHAR(50),
comida VARCHAR(50),
tamanho VARCHAR(20)
);
INSERT INTO cavalo (nome, som, comida, tamanho)
VALUES ('cavalo', 'relincho', 'capim', 'grande');
a acomodação é exatamente isso. vc modifica o schema mental pra dar conta da informação nova q nao encaixava no schema antigo.
as vezes é só adicionar uma coluna (tipo aprender q cachorro tambem pode ser marrom, nao so preto). as vezes é criar uma tabela inteira nova (cavalo é um animal diferente daqueles). é um ALTER TABLE na mente (˶˃ ᵕ ˂˶)
equilibração = commit da migration
e a equilibração é o momento mais satisfatorio de todos.
depois de criar as tabelas novas e rodar os ALTER TABLE, vc dá o commit da migration.
COMMIT;
o banco sai daquele estado de conflito e volta a ficar estavel e limpo. as querys voltam a funcionar. os dados tao organizados do jeito certo.
a mente da criança entrou em equilibrio de novo. ela entendeu q cachorro e cavalo sao coisas diferentes. aprendeu. o sistema ta pronto pra rodar novas querys sem crashar (ノ´ヮ`)ノ*: ・゚
e é isso q piaget chama de equilibração: o processo de sair do desequilibrio (duvida, conflito gerado pelo novo) e chegar num equilibrio melhor q o anterior. aprendizado efetivo.
é literalmente o ciclo de uma migration bem sucedida.
o ciclo todo junto
se vc pensar no ciclo completo ele fica mais ou menos assim:
-- estado inicial: schema basico, tudo em equilibrio
-- encontra estimulo novo (cavalo)
-- tentativa 1: assimilação
INSERT INTO cachorro (...) VALUES (...);
-- funcionou temporariamente, dado guardado
-- detecta anomalia
SELECT * FROM cachorro WHERE nome = 'cavalo';
-- os dados nao batem com a realidade
-- desequilibrio!
-- acomodação
ALTER TABLE cachorro DROP COLUMN comida;
CREATE TABLE cavalo (...);
INSERT INTO cavalo (...) VALUES (...);
-- equilibração
COMMIT;
-- sistema estavel de novo, pronto pra proxima query
pq isso é tao based
a programação tenta imitar exatamente como a gente processa e organiza as coisas no mundo real.
os bancos de dados relacionais nao surgiram do nada. eles sao uma abstração de como a mente humana categoriza informação. tabelas, colunas, relações, constraints... tudo isso existe na nossa cabeça antes de existir no postgres.
e o piaget, sem nunca ter escrito uma linha de codigo, descreveu o ciclo de vida de uma migration sql. sera q ele manjava de Cobol? ( ̄▽ ̄)
enfim. fica ai o pensamento aleatorio de uma dev q tava estudando numa noite de sexta.