Kolumny dopuszczające wartość null mogą znajdować się w przedziałach od 1NF do 5NF, ale nie w 6NF, zgodnie z tym, co przeczytałem.
Tylko wtedy, gdy wiesz lepiej niż Chris Date "co naprawdę oznacza pierwsza normalna forma". Jeśli x i y są dopuszczalne wartości null, a rzeczywiście w pewnym wierszu x i y są oba null
, to WHERE x=y
nie daje true
. Dowodzi to ponad wszelką wątpliwość, że null nie jest wartością (ponieważ każda rzeczywista wartość jest zawsze sobie równa). A ponieważ RM nakazuje, że „musi istnieć wartość w każdej komórce tabeli”, każda rzecz, która prawdopodobnie zawiera wartości null, nie jest rzeczą relacyjną, a zatem kwestia 1NF nawet się nie pojawia.
Słyszałem, jak argumentował, że kolumny dopuszczające wartość zerową generalnie przerywają pierwszy stopień normalizacji.
Zobacz powyżej rozsądny powód leżący u podstaw tego argumentu.
Ale w praktyce jest to bardzo praktyczne.
Tylko jeśli jesteś odporny na bóle głowy, które zwykle powoduje w całej reszcie świata. Jednym z takich problemów (i to tylko nieznacznym, w porównaniu do innych null
zjawisk) jest fakt, że WHERE x=y
w SQL faktycznie oznacza WHERE x is not null and y is not null and x=y
, ale większość programistów po prostu nie jest tego świadoma i po prostu czyta. Czasami bez szkody, innym razem nie.
W rzeczywistości kolumny dopuszczające wartość null naruszają jedną z najbardziej fundamentalnych zasad projektowania baz danych: nie łącz różnych elementów informacji w jednej kolumnie. Wartości null robią dokładnie to, ponieważ łączą wartość logiczną „to pole jest / nie jest naprawdę obecne” z wartością rzeczywistą.