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

Responder a