Eu tenho um formulário em um site que possui vários campos diferentes. Alguns dos campos são opcionais, enquanto outros são obrigatórios. No meu banco de dados, tenho uma tabela que contém todos esses valores. É melhor inserir um valor NULL ou uma string vazia nas colunas do banco de dados em que o usuário não colocou nenhum dado?
230
Uma coisa a considerar, se você já está pensando em mudar bases de dados, é que a Oracle não suporta cadeias vazias . Eles são convertidos para NULL automaticamente e você não pode consultá-los usando cláusulas como
WHERE somefield = ''
.fonte
Steve B.
: veja esta pergunta: stackoverflow.com/questions/1171196/…Uma coisa a ter em mente é que NULL pode tornar seus caminhos de código muito mais difíceis. No Python, por exemplo, a maioria dos adaptadores de banco de dados / ORMs é mapeada
NULL
paraNone
.Então, coisas como:
pode resultar em "Olá, nenhum Joe Doe!" Para evitá-lo, você precisa de algo como este código:
O que pode tornar as coisas muito mais complexas.
fonte
Melhor inserir
NULL
para consistência no seu banco de dados no MySQL. Chaves estrangeiras podem ser armazenadas como,NULL
mas NÃO, como cadeias vazias.Você terá problemas com uma string vazia nas restrições. Pode ser necessário inserir um registro falso com uma string vazia exclusiva para satisfazer uma restrição de Chave Estrangeira. Má prática, eu acho.
Consulte também: Uma chave estrangeira pode ser NULL e / ou duplicada?
fonte
Não sei qual seria a melhor prática aqui, mas geralmente erro em favor do nulo, a menos que você queira que nulo signifique algo diferente de cadeia vazia, e a entrada do usuário corresponde à sua definição de cadeia vazia.
Observe que estou dizendo que você precisa definir como deseja que sejam diferentes. Às vezes faz sentido tê-los diferentes, às vezes não. Caso contrário, basta escolher um e ficar com ele. Como eu disse, tendem a favorecer o NULL na maioria das vezes.
Ah, e lembre-se de que, se a coluna for nula, é menos provável que o registro apareça em praticamente qualquer consulta que seleciona (possui uma cláusula where, em termos de SQL) baseada nessa coluna, a menos que a seleção seja para uma coluna nula claro.
fonte
Se você estiver usando várias colunas em um índice exclusivo e pelo menos uma dessas colunas for obrigatória (ou seja, um campo de formulário obrigatório), se você definir as outras colunas no índice como NULL, poderá terminar com linhas duplicadas. Isso ocorre porque os valores NULL são ignorados em colunas exclusivas. Nesse caso, use cadeias de caracteres vazias nas outras colunas do índice exclusivo para evitar linhas duplicadas.
Aqui estão alguns códigos:
Agora insira isso para ver se isso permitirá as linhas duplicadas:
Agora insira isso e verifique se não é permitido:
Portanto, não há certo ou errado aqui. Cabe a você decidir o que funciona melhor com suas regras de negócios.
fonte