Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Banco de dados:Posso ter atributos anuláveis ​​em um terceiro banco de dados de forma normal?


A maneira como os nulos são definidos no SQL - como não valores que não podem ser comparados com valores de domínio - significa que eles violam 1NF (e todas as formas normais superiores). Uma relação (a estrutura matemática representada por tabelas normalizadas) deve ter um único valor para cada coluna para cada linha. Nulos significam que não temos valor, e uma coluna anulável significa que temos duas relações em uma tabela - uma relação de supertipo que inclui todas as colunas, exceto a anulável, e uma relação de subtipo que tem a mesma chave primária e a coluna anteriormente anulável, por que podemos registrar apenas linhas para as quais o atributo é conhecido. O objetivo da normalização é fatorar um conjunto de dados em fatos elementares sem perder informações, portanto, ter duas relações em uma única tabela contradiz o objetivo e torna coisas como álgebra/cálculo relacional mais complicadas.

As formas normais são estruturas formais logicamente definidas, não melhores práticas industriais que podem ser adaptadas à situação, então não vejo muito espaço para controvérsias. Se devemos usá-los e como eles devem ser manuseados é um tópico mais interessante.

Embora nulos violem as formas normais, isso não significa que você não possa usar nulos em seu banco de dados SQL. Eles têm riscos, bem como benefícios. Eu também os uso, mas com consideração.