Las columnas que aceptan valores NULL pueden estar en 1NF a 5NF, pero no en 6NF según lo que he leído.
Solo si sabes mejor que Chris Date "lo que realmente significa la primera forma normal". Si xey son ambos anulables, y de hecho en alguna fila xey son ambos null
, entonces WHERE x=y
no cede true
. Esto prueba más allá de toda duda razonable que nulo no es un valor (porque cualquier valor real es siempre igual a sí mismo). Y dado que la RM prescribe que "debe haber un valor en cada celda de una tabla", cualquier cosa que posiblemente contenga nulos, no es una cosa relacional, y por lo tanto la cuestión de 1NF ni siquiera surge.
He oído decir que las columnas que aceptan valores NULL en general rompen el primer grado de normalización.
Consulte más arriba la sólida razón que subyace a ese argumento.
Pero en la práctica es muy práctico.
Solo si eres inmune a los dolores de cabeza que suele provocar en todo el resto del mundo. Uno de esos dolores de cabeza (y es solo uno menor, en comparación con otros null
fenómenos) es el hecho de que WHERE x=y
en SQL realmente significaWHERE x is not null and y is not null and x=y
, pero que la mayoría de los programadores simplemente no son conscientes de ese hecho y simplemente lo leen. A veces sin ningún daño, otras veces no.
De hecho, las columnas que aceptan valores NULL violan una de las reglas de diseño de bases de datos más fundamentales: no combine elementos de información distintos en una columna. Los nulos hacen exactamente eso porque combinan el valor booleano "este campo está / no está realmente presente" con el valor real.