Typy danych niestandardowe (alias types) definiuje się na bazie typów wbudowanych dla większej spójności schematu.
Alias type jako nazwany wariant typu wbudowanego
Typ danych niestandardowy typu alias w Microsoft SQL Server jest nazwą utworzoną dla istniejącego typu bazowego. Nie wprowadza nowego sposobu przechowywania wartości, lecz pozwala nadać typowi znaczenie związane z konkretnym zastosowaniem. Przykładowo alias oparty na int może reprezentować identyfikator klienta, a alias oparty na nvarchar(100) — nazwę oddziału. Kolumna nadal korzysta z właściwości typu bazowego, ale w schemacie pojawia się dodatkowa, jednoznaczna nazwa.
W SQL Server alias tworzy się instrukcją CREATE TYPE wskazującą schemat, nazwę aliasu oraz typ bazowy, na przykład CREATE TYPE dbo.CustomerId FROM int NOT NULL;. Typ aliasu można następnie wykorzystać przy definiowaniu kolumn tabel, zmiennych i parametrów procedur składowanych. Zastosowanie tej samej nazwy w wielu miejscach ułatwia utrzymanie spójnego modelu danych, zwłaszcza gdy jeden rodzaj wartości występuje w wielu tabelach.
Definiowanie aliasu i kontrola jego właściwości
Definicja aliasu jest związana z konkretnym typem bazowym, dlatego należy uwzględnić jego pełną charakterystykę: rodzinę danych, długość, precyzję, skalę oraz ustawienie dopuszczalności wartości NULL. Alias utworzony na bazie decimal(12,2) nie jest równoważny aliasowi opartemu na decimal(18,4), ponieważ oba typy dopuszczają inną dokładność i zakres zapisu. Podobnie alias dla nvarchar(50) ma inną pojemność niż alias dla nvarchar(200).
Alias nie zastępuje ograniczeń integralności, takich jak PRIMARY KEY, FOREIGN KEY, CHECK czy UNIQUE. Jeżeli określona wartość ma dodatkowe wymagania biznesowe, należy wyrazić je w definicji tabeli lub za pomocą odpowiedniego ograniczenia. Sam alias opisuje przede wszystkim typ oraz podstawowe parametry przechowywania. Warto również umieszczać aliasy w schemacie, na przykład dbo, ponieważ pełna nazwa schemat.typ jednoznacznie identyfikuje obiekt i ogranicza ryzyko kolizji nazw.
Alias types w katalogu systemowym SQL Server
Informacje o typach aliasowych są dostępne w katalogu systemowym SQL Server, między innymi w widoku sys.types. Dla aliasu można tam sprawdzić jego nazwę, schemat, właściwości typu oraz powiązanie z typem bazowym. Kolumna is_user_defined pozwala odróżnić typy zdefiniowane przez użytkownika od typów systemowych, natomiast system_type_id i user_type_id pomagają rozpoznać relację między identyfikatorem typu systemowego a identyfikatorem typu używanego w schemacie.
Podczas analizy tabel warto sprawdzić zarówno nazwę typu widoczną dla użytkownika, jak i parametry typu bazowego. Przydatne są zapytania do sys.columns, sys.tables oraz sys.schemas, ponieważ pozwalają ustalić, które kolumny korzystają z danego aliasu. Nie należy opierać diagnostyki wyłącznie na tekście definicji kolumny. Dwie kolumny mogą przechowywać wartości o podobnym formacie, ale używać różnych aliasów, a zmiana aliasu w jednej tabeli nie zmienia automatycznie definicji pozostałych obiektów.
Skutki użycia aliasu w istniejącym schemacie
Alias typu jest elementem schematu bazy danych, dlatego jego usunięcie lub modyfikacja może być niemożliwa, dopóki korzystają z niego kolumny, zmienne albo parametry. Przed zmianą trzeba ustalić zależności między typem a obiektami bazy. W praktyce oznacza to sprawdzenie tabel, procedur składowanych, funkcji oraz innych definicji, w których występuje nazwa aliasu. Próba usunięcia używanego typu może zakończyć się błędem zależności, a niekontrolowane zastąpienie go typem bazowym może utrudnić dalsze utrzymanie schematu.
Podczas diagnostyki problemu z niezgodnością typów należy porównać nazwę aliasu, typ bazowy, długość, precyzję, skalę i obsługę wartości NULL po obu stronach operacji. Szczególnej uwagi wymagają parametry procedur oraz wartości przekazywane z aplikacji, ponieważ zgodność tekstowej reprezentacji nie gwarantuje zgodności definicji SQL Server. W przypadku problemów z oprogramowaniem można rozpocząć od sprawdzenia definicji połączenia, komunikatów błędów oraz konfiguracji aplikacji korzystającej z bazy.