Olá, Dando um pitaco:
Esse negócio de usar ENUM, até que é conceitualmente bonitinho, porém certas questões me fazem duvidar da sua utilidade prática: * E se eu quiser guardar um nome descritivo para cada valor possível nos meus ENUMs-que-deveriam-ser-tabelas? Crio uma tabela com chave primária do tipo ENUM e coloco nela os respectivos campos extras?! * Comparações entre os ENUM e os não-ENUM precisarão de um CAST. Logo, se eu importar dados ou fizer um JOIN com uma tabela não-conceitualmente-perfeita ou simplesmente com definições diferentes das vigentes na minha base teremos de colocar CASTs para comparar texto com texto. Conceitualmente até faz sentido, mas na prática é um trabalho extra difícil de justificar. * E se eu quiser fazer ENUMs de valores numéricos? Colocar CAST para texto num número 1 (que é tratado em toda a documentação como número) só porque no Postgres ele foi definido como ENUM me parece um contra-senso conceitual. Pela documentação, um valor de ENUM ocupa 4 bytes no disco. Um smallint ou char(1) ocupam menos. O desempenho nas consultas que fazem comparações com campos ENUM teoricamente não me parece nada bom neste caso. * Bom, com modelos perfeitos num mundo perfeito isso até parece razoável, mas... voltando ao mundo real do dia-a-dia: e se eu precisar alterar a lista de valores ? Eu não achei jeito de dar UPDATE, INSERT ou DELETE num enum sem recriá-lo. Comparando com um simples comando numa tabela, que script eu preciso fazer para excluir um tipo usado em, digamos, 30 tabelas de milhões de registros cada, garantindo que nem sobrem nem faltem valores válidos em tabela nenhuma durante minha atualização? Numa tabela convencional, adicinar ou excluir registros são operações rápidas e triviais que bloqueiam pouca gente, se é que bloqueiam alguém. Mexer num ENUM não me parece nem de longe tão amigável. Sei não, não si se consigo imaginar uma boa relação custo/benefício em favor dos tipos ENUM. Tabelas me parecem muito mais práticas. Atenciosamente, Mozart Hasse _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral