| Termin | Definicja |
|---|---|
| Ograniczenie NULL | Dopuszczenie wartości NULL oznacza, że kolumna może pozostać niewypełniona — to stan nieznany, nie zero ani pusty tekst. NULL oznacza brak wartości, a nie pusty zapisOgraniczenie NULL określa, czy w danej kolumnie tabeli można zapisać wartość NULL. W relacyjnej bazie danych NULL oznacza brak znanej lub ustalonej wartości. Nie jest to liczba zero, pusty tekst, wartość logiczna FALSE ani automatycznie wartość domyślna. Różnica ma znaczenie podczas filtrowania danych, wykonywania obliczeń oraz sprawdzania kompletności rekordów. Jeżeli kolumna dopuszcza NULL, rekord może zostać utworzony bez podania informacji w tej kolumnie, o ile nie blokują tego inne ograniczenia. Ograniczenie przeciwne do dopuszczenia NULL jest zwykle zapisywane jako NOT NULL. Wtedy każda nowa wartość w kolumnie musi zawierać konkretny zapis zgodny z typem danych. Dla kolumny tekstowej może to być tekst, dla liczbowej liczba, a dla daty poprawna data. NOT NULL nie sprawdza jednak, czy tekst ma sens biznesowy, czy liczba mieści się w oczekiwanym zakresie albo czy data jest właściwa dla danego procesu. Do takich kontroli służą między innymi ograniczenia CHECK, UNIQUE, klucze oraz reguły zapisane w kodzie aplikacji. Jak NULL wpływa na warunki i obliczeniaWartość NULL zmienia sposób działania porównań. Wyrażenie porównujące kolumnę z NULL za pomocą operatora równości, na przykład „kolumna = NULL”, nie służy do wykrywania brakującej wartości. Do tego celu używa się składni IS NULL, natomiast IS NOT NULL sprawdza, czy wartość została podana. Wynika to z logiki trójwartościowej stosowanej w zapytaniach: warunek może być prawdziwy, fałszywy albo nieznany. Porównanie zwykłą równością z NULL daje wynik nieznany, ponieważ nie można potwierdzić równości nieustalonej wartości z inną wartością. NULL wpływa również na działania arytmetyczne i funkcje agregujące. Dodanie liczby do NULL nie daje konkretnego wyniku liczbowego, lecz NULL, ponieważ wynik zależy od brakującej informacji. Funkcje agregujące często pomijają NULL podczas obliczeń, ale zachowują się inaczej, gdy wszystkie analizowane wartości są NULL albo gdy zbiór nie zawiera żadnych wierszy. Z tego powodu raport pokazujący średnią, sumę lub liczbę wartości powinien jasno rozróżniać brak danych od zera. Zastępowanie NULL zerem bez uzasadnienia może zmienić znaczenie raportu i prowadzić do błędnych wniosków. Projektowanie kolumn z dopuszczalną wartością NULLDopuszczenie NULL powinno wynikać z modelu danych, a nie z wygody podczas tworzenia tabeli. Jest uzasadnione wtedy, gdy dana informacja rzeczywiście może być nieznana, nieustalona albo nie dotyczy konkretnego rekordu. Przykładem może być data zakończenia procesu, którego jeszcze nie zamknięto. W takim przypadku NULL przekazuje informację, że data nie jest obecnie dostępna. Pusty tekst oznacza natomiast tekst o długości zero, a więc inną sytuację: wartość jest znana i celowo zapisana jako pusta. Przy wyborze między NULL a wartością zastępczą trzeba uwzględnić typ kolumny i reguły aplikacji. Wpisywanie specjalnego tekstu, takiego jak „brak” lub „nie dotyczy”, do kolumny przeznaczonej na datę albo liczbę utrudnia sortowanie, walidację i późniejsze zapytania. Z kolei ustawienie NOT NULL na każdej kolumnie może wymusić sztuczne wartości, które tylko pozornie wypełniają rekord. Dobrze zaprojektowany model rozróżnia sytuację, w której informacja nie istnieje, od sytuacji, w której wynosi zero, jest pusta albo nie ma zastosowania. Należy też sprawdzić, czy warstwa aplikacji poprawnie przekazuje brak wartości i nie zamienia przypadkowo NULL na pusty tekst. Rozpoznawanie problemów z NULL w działającej aplikacjiBłędy związane z ograniczeniem NULL pojawiają się najczęściej wtedy, gdy aplikacja wysyła pustą wartość do kolumny oznaczonej NOT NULL albo odwrotnie: traktuje NULL jak zwykły tekst. Typowym objawem jest odrzucenie zapisu rekordu, niepełny wynik wyszukiwania lub pominięcie wierszy w raporcie. Podczas analizy należy porównać definicję tabeli, typ kolumny, ograniczenia oraz rzeczywiste dane przekazywane przez formularz, import lub inne źródło. Warto również sprawdzić zapytania filtrujące, ponieważ warunek „kolumna = wartość” nie wybierze wierszy, w których kolumna zawiera NULL. Diagnostyka powinna obejmować także miejsca, w których dane są łączone, kopiowane albo przekształcane. Operacja łączenia tabel może nie zwrócić rekordu, jeśli warunek opiera się na kolumnach zawierających NULL, a obliczenie wartości pochodnej może zwrócić NULL mimo poprawnego działania samej bazy. Istotne jest odtworzenie przypadku na kopii danych, ustalenie oczekiwanego znaczenia braku wartości i dopiero potem zmiana schematu lub logiki programu. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i ich podzespołów, więc przy problemach z aplikacją działającą na komputerze można rozpocząć od sprawdzenia środowiska systemowego, konfiguracji programu oraz poprawności pracy sprzętu. |