Hoje vou falar alguma coisa sobre constrição de dados em bancos MySQL.
A constrição de dados é uma ferramenta que podemos utilizar quando queremos que um campo da tabela tenha uma lista definida de valores. Por exemplo, o campo sexo de uma tabela pessoa deve receber apenas os valores "M" ou "F".
No MySQL, isso é feito através de um tipo de dado chamado ENUM (enumerador). O funcionamento é similar ao Enumerador de Java, que escrevi aqui há algum tempo.
Vamos criar uma tabela pessoa de exemplo. Os campos são: nome, idade e sexo.
O script de criação fica assim:
CREATE TABLE `test`.`pessoa` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(60) NOT NULL,
`idade` INTEGER UNSIGNED,
`sexo` ENUM ('F','M'),
PRIMARY KEY (`id`)
);
A coluna sexo poderá receber os seguintes valores:
NULL
'M'
'F'
Caso um comando INSERT seja enviado ao banco com um parâmetro diferente dos acima, uma mensagem Data truncated for colunm 'sexo' at row 1 será emitida.
Fiz alguns testes e detectei o seguinte problema: Caso seja enviado um comando INSERT com o parâmetro '0' (zero) na coluna sexo, O banco de dados insere um registro com a coluna sexo vazia (não é o valor NULL, é coma uma String vazia). Ainda não sei porque isso ocorre.
Da mesma forma, um ENUM que aceita valores 0 e 1 - ENUM ('0','1') - quando recebe o valor 2, insere um registro com o valor 1. Estranho né?
Um outro problema é que a ferramenta MySQL Query Browser não cria campos do tipo ENUM. Aparentemente, o problema é que o wizard de criação / edição de tabelas não aceita o caracter ' (aspas simples) e, por isso, não é possível definir os valores do ENUM. Isso pode ser contornado com a inserção manual do script de criação da tabela.
Assim que tiver uma resposta para todas essas dúvidas, coloco um post aqui.
Referência:
http://dev.mysql.com/doc/refman/5.1/en/enum.html
Até breve!
terça-feira, 8 de maio de 2007
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário