Usos válidos para a cláusula DEFAULT em uma definição de coluna de tabela, além de nextvalue de sequência ()

5

Em um recente pergunta , há um debate se ou não um valor padrão arbitrário na definição de uma coluna em uma tabela é considerado ter lógica de negócios no banco de dados. Como sabemos, se uma instrução de inserção falhar em fornecer um valor para uma determinada coluna, esse padrão será inserido em vez de nulo.

Minha pergunta é, além de atribuir uma sequência nextvalue () a um PK (substituto ou não), que não é um valor literal literal:

  • Quais usos da cláusula padrão ao definir uma coluna não são considerados como tendo lógica de negócios no banco de dados?
por Tulains Córdova 02.11.2016 / 19:47
fonte

3 respostas

2

Se o padrão for apenas isso, um valor padrão, que não seja "lógica de negócios". Se você inserir um registro e definir um inteiro para zero, essa lógica? A maioria das linguagens modernas (por exemplo, praticamente qualquer coisa baseada em C) seria padronizada como zero de qualquer maneira. Será que realmente importa se você o padronizar em vez disso?

Do jeito que eu vejo, "lógica de inserção" entra em um gatilho "depois da inserção". O código é executado, calcula um valor e o define no novo registro. Por exemplo: na inserção, o campo C é definido como a soma dos campos A e B, em vez de algum valor fixo, como zero. Isso é "lógica de inserção".

"Cada novo registro recebe um valor de 'baz' no campo 'foo' se ainda não foi especificado" não é realmente uma lógica em nada além do sentido mais trivial da palavra, certamente não em um programa complexo.

What uses of the default clause when defining a column are not considered having business logic in the database?

Como você menciona especificamente "cláusula padrão", que significa "não é um acionador", digo que todos os usos da cláusula padrão não adicionam lógica ao banco de dados.

Como um aparte, a maioria dos bancos de dados trata os valores padrão como restrições padrão . Em outras palavras, " null está fora dos valores aceitáveis para este campo, então defina-o como algo dentro do conjunto de valores aceitáveis." Se você olhar dessa maneira, um valor padrão é quase o mesmo que especificar um intervalo de valores para um campo. Defina-o fora desse intervalo ( null ) e, em vez disso, você receberá um valor padrão.

    
por 02.11.2016 / 20:03
fonte
2

Acho que um dos usos mais valiosos dos valores padrão é definir um registro de data e hora para a criação de registros. Muitas vezes, esses timestamps são fornecidos, mas isso significa que há diferentes relógios envolvidos, portanto, você pode acabar com registros com timestamps que sugerem que eles foram adicionados antes dos registros que estavam lá primeiro. O banco de dados é um grande árbitro da questão 'que horas são / foram?'

    
por 02.11.2016 / 20:20
fonte
2

O campo pode não ser usado por uma lógica de negócios (ou seja, aplicativo), mas por processo de negócios (ou seja, pessoas). Por exemplo, a coluna INSERTED_WHEN ou INSERTED_BY com o registro de data e hora atual ou o usuário como padrão. Principalmente para suporte e manutenção.

Eu não concordo com a suposição por trás da pergunta de que um valor é uma lógica. A lógica é um processo, o valor não é. O valor do campo não faz parte da lógica de negócios, o campo é.

    
por 02.11.2016 / 20:19
fonte