2010-06-10 8 views
6

Umożliwienie wartości NULL na kolumnie jest zwykle wykonywane w celu umożliwienia reprezentacji absensu wartości. Podczas korzystania z NVARCHAR istnieje już możliwość uzyskania pustego ciągu, bez ustawiania kolumny na NULL. W większości przypadków nie widzę różnicy semantycznej między wartością NVARCHAR z pustym łańcuchem a wartością NULL dla takiej kolumny.(NIE) NULL dla kolumn NVARCHAR

Ustawianie kolumny jako NOT NULL ratuje mnie od konieczności zajmowania się możliwością NULL wartości w kodzie i czuje się lepiej, aby nie mieć do różnych przedstawień „bez wartości” (NULL lub pusty ciąg znaków).

Czy napotkasz inne problemy, ustawiając kolumny NVARCHAR na NOT NULL. Wydajność? Rozmiar magazynu? Wszystko, co przeoczyłem na temat wykorzystania wartości w kodzie klienta?

+1

Cóż, Oracle zgadza się z tobą i traktuje puste ciągi jako zero. –

Odpowiedz

3

A NULL wskazuje, że brakuje wartości/nie można jej użyć. Pusty ciąg jest inny, ponieważ jest to wartość rzeczywista. A-NULL technicznie nie ma typu danych, gdzie jako pusty łańcuch, w tym przypadku, jest nvarchar.

Nie widzę żadnych problemów z wartościami domyślnymi zamiast wartościami NULL.

W rzeczywistości, prawdopodobnie byłoby korzystne, ponieważ nie będzie musiał martwić się o wyżywienie dla NULL wartości w dowolnych zapytań

np

Select Sum(TotalPrice) as 'TotalPrice' From myTable Where CountOfItems > 10 

znacznie łatwiejsze niż

Select Sum(IsNull(TotalPrice,0)) as 'TotalPrice' From myTable Where IsNull(CountOfItems,0) > 10 

Powinieneś użyć ograniczeń domyślnych w swoim DDL, aby upewnić się, że w twoich danychach nie pojawią się żadne nieuczciwe wersje.

+3

-1 Jeśli "TotalPrice" ma wartość "NULL", to i tak nie zostanie ono dołączone do agregatu. Jeśli 'CountOfItems' ma wartość' NULL', to i tak nie będzie ono zgodne z predykatem '> 10', więc oba te są redundantne, a drugi sprawia, że ​​wyrażenie jest nieobliczalne. Co się stanie, jeśli użyjesz 'AVG' zamiast" SUM "? Teraz twoje fałszywe wartości spowodują, że wynik będzie niepoprawny. –

3

Pojęcie wartości NULL jest powszechnym źródłem nieporozumień. NULL to , a nie takie samo, jak pusty łańcuch lub wartość zero.

Koncepcyjnie wartość NULL oznacza "brakującą nieznaną wartość" i jest ona traktowana nieco inaczej niż inne wartości. Na przykład, aby przetestować wartość NULL, nie można używać operatorów arytmetycznych porównywania, takich jak =, < lub <>.

Jeśli masz kolumny, które mogą zawierać "brakującą nieznaną wartość", musisz ustawić je tak, aby akceptowały wartości NULL. Z drugiej strony pusty ciąg oznacza po prostu, że wartość jest znana jako, ale jest pusta.

Na przykład: Jeśli pole "Middle Name" w tabeli "Users" ma wartość NULL, powinno to oznaczać, że druga nazwa tego użytkownika nie jest znana. Użytkownik może mieć lub nie mieć drugie imię. Jeśli jednak pole "Middle Name" jest ustawione na pusty ciąg, powinno to oznaczać, że użytkownik nie ma drugiego imienia.

+0

Tak i nie, to zależy od aplikacji. Istnieje wiele przypadków użycia, w których znajdziesz pewne pola, dla których pusty ciąg znaków i pusty łańcuch nie mają/nie potrzebują oddzielnych znaczeń. – Chalky

0

Jeśli cokolwiek, powiedziałbym, że łatwiej będzie używać tabeli, jeśli nie akceptujesz NULL, ponieważ nie będziesz musiał sprawdzać NULL wszędzie w kodzie, więc ustawię tylko kolumnę aby zezwolić na wartości NULL, jeśli potrzebuję obsługiwać nieznane, a nie puste wartości.

0

Co powiedział ho1. Ale nie zaleca się definiowania kolumny NOT NULL, a następnie specjalnej wartości dla "Unknown".

Powiązane problemy