| Termin | Definicja |
|---|---|
| Ograniczenie UNIQUE | UNIQUE to ograniczenie wymuszające niepowtarzalność wartości w kolumnie, dopuszczające jedną wartość NULL. Rola ograniczenia UNIQUE w tabeliOgraniczenie UNIQUE wymusza niepowtarzalność wartości zapisanych w jednej kolumnie albo w określonym zestawie kolumn tabeli. Dzięki temu baza danych może odrzucić próbę dodania drugiego wiersza z takim samym identyfikatorem użytkownika, adresem e-mail, numerem seryjnym urządzenia lub inną wartością, która w danym modelu danych powinna wystąpić tylko raz. Reguła jest egzekwowana przez silnik bazy danych, a nie wyłącznie przez kod aplikacji, dlatego działa również wtedy, gdy dane są wprowadzane przez inny program, import, skrypt lub bezpośrednie zapytanie SQL. Ograniczenie może obejmować pojedynczą kolumnę, na przykład Jak baza reaguje na powtórzoną wartośćPo utworzeniu ograniczenia UNIQUE silnik zwykle buduje powiązany indeks unikalny albo wykorzystuje istniejącą strukturę indeksową. Przy operacji UNIQUE nie zastępuje klucza głównego. Klucz główny identyfikuje wiersz, nie dopuszcza wartości NULL i w tabeli może być tylko jeden. Ograniczeń UNIQUE może być natomiast kilka, a kolumny objęte takim ograniczeniem mogą pełnić funkcję alternatywnych identyfikatorów. Przykładowo tabela może mieć klucz główny NULL, puste wartości i reguły silnika SQLWartość NULL oznacza brak znanej wartości i nie jest tym samym co pusty tekst, zero ani napis zawierający spacje. Z tego powodu sposób traktowania NULL przez UNIQUE zależy od konkretnego silnika bazy danych. W PostgreSQL standardowe ograniczenie UNIQUE zazwyczaj pozwala na wiele wartości NULL, ponieważ NULL nie jest porównywany jako równy innemu NULL; w nowszych wersjach można użyć klauzuli Jeżeli aplikacja ma zezwalać na brak danych, ale wymagać niepowtarzalności po wpisaniu wartości, należy sprawdzić dokumentację używanego silnika i sposób tworzenia indeksu. Pusta wartość tekstowa nie jest NULL, więc dwa puste napisy mogą naruszyć UNIQUE, nawet jeśli wiele rekordów z NULL jest dozwolonych. W PostgreSQL można zastosować indeks częściowy, na przykład unikalny tylko dla wierszy, w których kolumna nie jest NULL. Niezależnie od rozwiązania warto wcześniej ustalić, czy kolumna jest opcjonalna, czy brak wartości powinien być reprezentowany przez NULL, oraz czy porównanie tekstu ma uwzględniać wielkość liter i reguły sortowania. Dobór unikalności przy naprawie problemu z zapisemKomunikat o naruszeniu ograniczenia UNIQUE wskazuje, że baza odrzuciła duplikat, ale nie zawsze oznacza błąd samej bazy. Przyczyną może być podwójne wysłanie formularza, ponowienie żądania po przekroczeniu limitu czasu, brak sprawdzenia istniejącego rekordu albo nieprawidłowa obsługa operacji aktualizacji jako nowego wstawienia. Podczas diagnostyki należy ustalić nazwę ograniczenia, kolumny, których dotyczy, oraz wartości przesłane w konkretnym żądaniu. Następnie trzeba sprawdzić istniejący rekord i prześledzić transakcję, która próbowała zapisać dane. Nie należy usuwać ograniczenia tylko po to, aby zapisy zaczęły się udawać. Mogłoby to dopuścić sprzeczne rekordy i utrudnić późniejsze powiązanie danych. Bezpieczniejsze rozwiązanie polega na poprawieniu logiki aplikacji, użyciu właściwej operacji aktualizacji lub kontrolowanym mechanizmie upsertu, jeśli jest zgodny z wymaganiami. Warto również rozważyć indeks obejmujący właściwe kolumny, sprawdzić wpływ wartości NULL oraz zweryfikować kolację tekstową. Przy problemach z laptopem lub komputerem, na którym działa lokalna aplikacja bazodanowa, Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów i komputerów PC, obejmującą także diagnostykę oprogramowania oraz podzespołów. |