Обнуляемые столбцы могут быть от 1 до 5, но не в 6, согласно тому, что я читал.
Только если вы лучше Криса Дейта знаете, «что на самом деле означает первая нормальная форма». Если x и y оба допускают значение NULL, и действительно в некоторой строке x и y оба null
, то WHERE x=y
не уступает true
. Это вне всяких разумных сомнений доказывает, что null не является значением (потому что любое реальное значение всегда равно самому себе). И поскольку RM предписывает, что «в каждой ячейке таблицы должно быть значение», любая вещь, которая может содержать нули, не является реляционной вещью, и поэтому вопрос о 1NF даже не возникает.
Я слышал, как утверждали, что столбцы, допускающие значение NULL, в целом нарушают первую степень нормализации.
См. Выше обоснованную причину этого аргумента.
Но на практике это очень практично.
Только если вы невосприимчивы к головным болям, которые они обычно вызывают во всем остальном мире. Одна из таких головных болей (и она лишь незначительная по сравнению с другими null
явлениями) заключается в том, что WHERE x=y
в SQL фактически означаетWHERE x is not null and y is not null and x=y
, но большинство программистов просто не знают об этом факте и просто читают его. Иногда без вреда, иногда - нет.
Фактически, столбцы, допускающие значение NULL, нарушают одно из самых фундаментальных правил проектирования базы данных: не объединяйте отдельные информационные элементы в один столбец. Нулевые значения делают именно это, потому что они объединяют логическое значение «это поле действительно присутствует / нет» с фактическим значением.