| Termin | Definicja |
|---|---|
| Ograniczenie NOT NULL | NOT NULL to ograniczenie wymuszające podanie wartości w kolumnie przy każdym wstawieniu wiersza. Ograniczenie NOT NULL — czym jest i do czego służyOgraniczenie NOT NULL jest regułą przypisaną do kolumny w tabeli bazy danych. Jego zadaniem jest niedopuszczenie do zapisania wartości pustej w rozumieniu SQL, czyli wartości NULL. Dzięki temu można określić, że dana informacja jest wymagana dla każdego rekordu. Jeżeli kolumna opisuje na przykład nazwę produktu, identyfikator zgłoszenia, datę utworzenia albo status zamówienia, brak takiej wartości może utrudniać wyszukiwanie danych, raportowanie oraz wykonywanie kolejnych operacji. Zastosowanie NOT NULL pozwala przenieść część kontroli poprawności z poziomu aplikacji do samej bazy danych. Warto odróżnić NULL od pustego tekstu, zera, wartości FALSE oraz ciągu zawierającego spacje. NULL oznacza brak znanej albo dostępnej wartości. Pusty tekst jest natomiast konkretną wartością tekstową o długości równej zero. Podobnie liczba zero nie jest brakiem liczby, lecz prawidłową liczbą. Ograniczenie NOT NULL zablokuje NULL, ale samo w sobie nie musi zablokować pustego tekstu, wartości zero ani ciągu spacji. Jeżeli wymagane są bardziej szczegółowe zasady, należy połączyć je z odpowiednim typem danych, ograniczeniem CHECK, walidacją aplikacyjną lub inną regułą integralności. Ograniczenie NOT NULL w tabeli i w kontekście technicznymNajczęściej NOT NULL zapisuje się podczas tworzenia tabeli. Przykładowa definicja może wyglądać następująco:
W takim układzie kolumny W praktycznym projekcie należy zadać pytanie, czy wartość rzeczywiście musi istnieć w każdym wierszu. Zbyt wiele ograniczeń NOT NULL może utrudnić obsługę danych, które pojawiają się etapami. Zbyt mało takich ograniczeń prowadzi natomiast do rekordów niepełnych i niejednoznacznych. Przykładowo numer telefonu może być nieznany w chwili rejestracji osoby, natomiast identyfikator rekordu, data utworzenia oraz podstawowy status mogą być wymagane od początku. Decyzja powinna wynikać z procesu biznesowego, a nie wyłącznie z przyzwyczajenia do jednej konstrukcji składniowej. NOT NULL często występuje obok klucza głównego. Klucz główny z założenia nie może być pusty i musi jednoznacznie wskazywać rekord, dlatego wiele systemów bazodanowych traktuje tę właściwość jako nieodłączną cechę klucza głównego. Nie należy jednak utożsamiać obu pojęć. NOT NULL tylko zabrania wartości NULL. Nie zapewnia unikalności, nie tworzy relacji z inną tabelą i nie sprawdza, czy wpis ma sens biznesowy. Do tych zadań służą odpowiednio klucz główny, UNIQUE, klucz obcy, CHECK oraz reguły zapisane w aplikacji. Ograniczenie NOT NULL a typowe problemy z danymiNajczęstszym skutkiem niedopasowania aplikacji do struktury tabeli jest błąd podczas INSERT albo UPDATE. Jeżeli kolumna ma NOT NULL, a pole nie zostanie przekazane w zapytaniu, baza może odrzucić operację. Podobna sytuacja wystąpi wtedy, gdy aplikacja przekaże jawnie NULL. Taki komunikat nie oznacza zwykle awarii samej bazy danych. Wskazuje raczej, że warstwa aplikacyjna nie dostarczyła wartości wymaganej przez model danych. Problem może pojawić się także po dodaniu NOT NULL do już istniejącej kolumny. Jeżeli tabela zawiera rekordy z NULL, zmiana definicji zakończy się błędem albo wymaga wcześniejszego uzupełnienia danych. Bezpieczny proces obejmuje rozpoznanie rekordów niekompletnych, ustalenie właściwych wartości zastępczych, jednorazową migrację oraz dopiero późniejsze włączenie ograniczenia. Warto zachować ostrożność przy automatycznym wpisywaniu wartości domyślnej, ponieważ technicznie poprawny wpis może być merytorycznie fałszywy. Inny kłopot wynika z wartości domyślnych. Kolumna może być oznaczona jako NOT NULL i jednocześnie mieć DEFAULT. Wtedy pominięcie kolumny w INSERT może nie spowodować błędu, ponieważ baza samodzielnie zastosuje wartość domyślną. Jawne przesłanie NULL nadal może zostać odrzucone. To rozróżnienie jest istotne przy analizowaniu zapytań, procedur importu oraz formularzy, które przesyłają puste pola jako NULL zamiast je pomijać. W systemach korzystających z różnych baz danych trzeba również sprawdzić szczegóły składni i zachowania konkretnego silnika. Sposób modyfikacji tabeli, komunikaty błędów, obsługa wartości domyślnych oraz możliwości zmiany istniejącej kolumny mogą się różnić. Sama idea pozostaje jednak podobna: określone pole nie może pozostać nieznane w żadnym rekordzie objętym daną regułą. Ograniczenie NOT NULL — praktyczne wskazówki projektowePrzed dodaniem NOT NULL warto przeanalizować pełny cykl życia rekordu. Należy sprawdzić, które pola są znane przy pierwszym zapisie, które są uzupełniane później, a które mogą pozostać nieznane z uzasadnionego powodu. Przydatne jest przejrzenie istniejących danych, zapytań INSERT, aktualizacji, importów oraz testów aplikacji. Dobrą praktyką jest także opisanie znaczenia NULL w dokumentacji, ponieważ brak wartości może oznaczać różne rzeczy: informacja nie została podana, nie dotyczy rekordu, nie została jeszcze obliczona albo nie jest znana. Nie należy zastępować wszystkich wartości NULL arbitralnymi tekstami takimi jak „brak”, „nie podano” lub „nie dotyczy”. Takie wpisy mieszają brak danych z konkretną informacją i utrudniają filtrowanie. Jeżeli rozróżnienie między tymi stanami jest potrzebne, lepiej zaprojektować je jawnie, na przykład za pomocą dodatkowego pola statusu, wartości logicznej albo osobnej tabeli słownikowej. Warto też kontrolować kolejność zmian struktury. Gdy nowa kolumna ma być obowiązkowa, można najpierw dodać ją z wartością domyślną albo tymczasowo dopuścić NULL, uzupełnić dane, sprawdzić wyniki i dopiero potem wymusić NOT NULL. Przy większych tabelach trzeba uwzględnić czas operacji, blokady oraz wpływ migracji na działające zapytania. Po wdrożeniu należy przetestować zarówno poprawny zapis, jak i sytuację braku wymaganej wartości.
Kiedy sprawdzić ograniczenie NOT NULL w serwisieDo analizy warto zgłosić się wtedy, gdy program odrzuca formularz mimo wypełnienia części pól, import nie zapisuje rekordów, aktualizacja kończy się błędem albo dane znikają z widoków zależnych od konkretnej kolumny. Pomocna jest wtedy informacja o nazwie tabeli, kolumny, rodzaju wykonywanej operacji oraz pełnym komunikacie błędu. Nie powinno się usuwać NOT NULL bez ustalenia, dlaczego zostało wprowadzone. Takie działanie może tylko ukryć problem i doprowadzić do powstania niepełnych rekordów. Warszawskie Pogotowie Komputerowe 24/7 może pomóc w uporządkowaniu podstawowej diagnostyki komputera, gdy problemy z programem bazodanowym wynikają z nieprawidłowego działania urządzenia, systemu albo środowiska pracy. Przed przekazaniem sprzętu warto przygotować kopię danych, opis objawów oraz informacje o tym, kiedy problem wystąpił. W przypadku baz danych szczególne znaczenie ma zabezpieczenie plików, kopii zapasowych i danych dostępowych, ponieważ sama naprawa techniczna nie zastępuje prawidłowej ochrony informacji. Jeżeli błąd pojawia się tylko w jednej aplikacji, a pozostałe programy działają poprawnie, przyczyna może tkwić w zapytaniu, migracji lub konfiguracji połączenia z bazą. Jeżeli natomiast występują także samoczynne zamknięcia programów, problemy z odczytem plików, spowolnienia całego systemu albo błędy dysku, warto rozszerzyć diagnozę o stan urządzenia i systemu. Takie rozdzielenie pomaga ustalić, czy ograniczenie NOT NULL jest prawidłową regułą ujawniającą błąd danych, czy tylko komunikatem towarzyszącym szerszemu problemowi technicznemu. |