| Termin | Definicja |
|---|---|
| Kolumna z wartościami NULL | Kolumna z wartościami NULL to pole dopuszczające brak wartości, co wymaga uwzględnienia przy porównaniach i agregacjach. Co oznacza NULL w kolumnie tabeliKolumna z wartościami NULL dopuszcza sytuację, w której dla konkretnego wiersza nie zapisano żadnej wartości. NULL nie jest zwykłym tekstem, liczbą zero ani pustym ciągiem znaków. Oznacza brak informacji albo fakt, że dana wartość nie została ustalona. W relacyjnych bazach danych jest to specjalny stan używany do opisania nieznanej, niepodanej lub nieadekwatnej wartości. Różnica między NULL a pustym tekstem ma znaczenie przy projektowaniu tabel i zapytań. Pusty tekst jest wartością typu tekstowego, natomiast NULL oznacza jej brak. Podobnie liczba 0 jest konkretną liczbą, a NULL nie określa żadnej wartości liczbowej. Data zawierająca NULL nie jest datą zerową ani automatycznie bieżącą datą. Sposób interpretacji braku wartości powinien wynikać z modelu danych, ponieważ ten sam stan może oznaczać na przykład brak pomiaru, nieznany adres albo parametr, który nie ma zastosowania. Porównywanie NULL i logika trójwartościowaPorównanie wartości z NULL nie daje wyniku prawda lub fałsz w zwykłym znaczeniu. W logice SQL pojawia się trzeci wynik: UNKNOWN, czyli nieznane. Z tego powodu warunek kolumna = NULL nie służy do wyszukiwania brakujących wartości. Do tego celu stosuje się predykat IS NULL, a do sprawdzenia, czy wartość istnieje — IS NOT NULL. Trójwartościowa logika wpływa na działanie klauzuli WHERE. Wiersz zostanie zwrócony tylko wtedy, gdy warunek ma wynik TRUE. Wynik FALSE oraz UNKNOWN nie przechodzą przez filtr. Przykładowo wyrażenie kolumna <> 10 nie obejmie rekordów, w których kolumna zawiera NULL, ponieważ nie można stwierdzić, czy nieznana wartość jest różna od 10. Jeżeli zapytanie ma uwzględniać brak wartości, trzeba jawnie dodać warunek IS NULL albo odpowiednio zastosować operator logiczny OR. Także działania arytmetyczne i większość operacji na wyrażeniach zawierających NULL prowadzą do wyniku NULL. Dodanie liczby do NULL nie daje liczby, lecz brak określonego rezultatu. Konkatenacja tekstu z NULL zależy od konkretnego silnika oraz użytej funkcji, dlatego zachowanie należy sprawdzić w dokumentacji używanego systemu. Nie powinno się zakładać, że NULL zawsze działa tak samo jak pusty tekst. NULL w agregacjach, grupowaniu i relacjachFunkcje agregujące wymagają świadomej interpretacji brakujących danych. W typowych implementacjach SQL funkcje takie jak SUM, AVG, MIN i MAX pomijają wartości NULL, ale zwracają NULL, gdy nie mają żadnej niepustej wartości do przetworzenia. SUM dla zbioru zawierającego wyłącznie NULL nie musi więc oznaczać zera. Jeżeli raport ma traktować brak danych jako zero, należy zastosować jawną konwersję, na przykład funkcję COALESCE, i upewnić się, że takie znaczenie jest zgodne z modelem danych. Funkcja COUNT zachowuje się odmiennie zależnie od argumentu. COUNT(*) liczy wiersze, także te, w których wskazana kolumna zawiera NULL. COUNT(nazwa_kolumny) liczy tylko rekordy, w których ta kolumna ma wartość inną niż NULL. Ta różnica może powodować rozbieżności w raportach, gdy jedna część zapytania liczy wszystkie rekordy, a druga wyłącznie uzupełnione pola. Przy GROUP BY wartości NULL są traktowane jako jedna grupa w obrębie grupowania. W złączeniach tabel warunek oparty na znaku równości nie dopasuje dwóch NULL, ponieważ NULL nie jest równy NULL. Może to prowadzić do pozornie brakujących połączeń między rekordami. W definicjach ograniczeń, takich jak klucz obcy, dopuszczalny NULL zwykle oznacza, że powiązanie nie zostało podane, ale dokładne zachowanie zależy od struktury tabeli i reguł integralności zastosowanych w konkretnym systemie bazodanowym. Projektowanie kolumn i diagnostyka skutków NULLPrzed dopuszczeniem NULL w kolumnie należy określić, co oznacza brak wartości i czy taki stan jest potrzebny. Jeżeli pole musi być zawsze uzupełnione, stosuje się ograniczenie NOT NULL. Jeżeli brak danych jest dopuszczalny, dokumentacja modelu powinna rozróżniać sytuację „nieznane” od „nie dotyczy” oraz od pustego tekstu lub wartości domyślnej. Automatyczne zastępowanie NULL zerem, pustym tekstem albo wartością domyślną może uprościć wyświetlanie, ale jednocześnie zatrzeć informację potrzebną do prawidłowych analiz. Podczas diagnozowania nieprawidłowych wyników należy sprawdzić definicję kolumny, ograniczenia, wartości domyślne oraz warunki filtrowania. Warto porównać liczbę wszystkich rekordów z wynikiem COUNT konkretnej kolumny, przeanalizować zapytania z IS NULL i IS NOT NULL oraz zweryfikować działanie agregacji na danych zawierających wyłącznie braki. Należy również ustalić, czy aplikacja przesyła NULL, pusty tekst, zero lub pomija pole podczas zapisu, ponieważ te przypadki mogą być mapowane odmiennie przez sterownik bazy danych i warstwę aplikacji. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów i komputerów PC, w tym diagnostyką problemów z oprogramowaniem, które mogą utrudniać pracę z aplikacjami wykorzystującymi dane tabelaryczne. Sama interpretacja NULL pozostaje jednak regułą modelu danych i zapytań: poprawna diagnoza wymaga ustalenia, czy błąd wynika z danych, warunku SQL, mapowania wartości w aplikacji czy z niewłaściwie przyjętego znaczenia braku informacji. |