Preferir tabelas STRICT no SQLite
Tabelas STRICT vs. comportamento padrão
- Muitos argumentam que tabelas
STRICTdeveriam ser o padrão, ou até mesmo o único modo em versões futuras. - Outros contrapõem que
STRICTé apenas uma preferência; o comportamento atual do SQLite é intencional e se encaixa no seu nicho. - Alguns sugerem uma pragma global ou “conjuntos padrão”/padrões versionados (por exemplo, “usar os padrões de 2026.1”) para सक्षमitar a rigidez e outras opções mais seguras sem quebrar código antigo.
Filosofia de tipagem e história do SQLite
- O SQLite começou em um mundo de “tudo é string/número” (Tcl, armazenamento no estilo dbm), e sua tipagem dinâmica em grande parte persistiu até o SQLite 3.
- A documentação do projeto defende explicitamente a tipagem flexível; críticos no tópico muitas vezes consideram essas justificativas pouco convincentes ou feitas a posteriori.
- Os defensores enfatizam o SQLite como “concorrência para
fopen”, não Oracle/Postgres, e veem verificações rigorosas em tempo de execução como sobrecarga opcional quando você pode provar a correção no código da aplicação.
Preocupações práticas: tipos, datas, booleanos
- Reclamações comuns:
- Tipos de coluna não são verificados por padrão.
- Falta de tipos nativos
DATE/TIMESTAMP/BOOL, especialmente incômoda no modoSTRICT. - Surpresas como colunas inteiras aceitando texto arbitrário e bytes NUL em strings afetando funções como
length().
- Contornos: armazenar datas como texto ou timestamps Unix; booleanos como inteiros ou bitfields; impor via restrições
CHECK.
Compatibilidade retroativa e padrões
- O SQLite raramente altera padrões (por exemplo, foreign keys desativadas por padrão, WAL desativado por padrão) para evitar quebrar software existente.
- Alguns veem isso como responsabilidade; outros veem isso como forçar novos usuários a aprender e desativar “armadilhas” uma por uma.
- Há debate sobre se a aceitação surpreendente de tipos é um modo de falha pior do que quebrar código antigo durante atualizações.
Migrações, ferramentas e modos
- Migrações de esquema no SQLite são vistas como trabalhosas; ferramentas e padrões de terceiros tentam simplificar isso.
- Tabelas
STRICTnão podem ser alternadas via um simplesALTER; a abordagem típica é recriar e copiar, embora algumas ferramentas automatizem isso. - As opiniões divergem sobre se o modo strict melhora integrações com linguagens de nível mais alto (por exemplo, ORMs em Rust/Go) ou complica o mapeamento de tipos.