08. Co to jest typ danych? Jakie typy danych dostarcza nam SQL Server 2005.

08. Co to jest typ danych? Jakie typy danych dostarcza nam SQL Server 2005.

Autor: Grzegorz Chuchra

Opublikowano: 1/18/2006, 12:00 AM

Liczba odsłon: 118448

W kursie tym chciałbym przybliżyć wszystkim pojęcie typu danych oraz wymienić typy danych, jakie występują w nowym Microsoft SQL Server 2005. Szczególną uwagę zwrócimy na nowości jakie zostały wprowadzone w najnowszej wersji serwera.

Typy danych charakteryzują daną komórkę w wierszu. Mówią, jakiego rodzaju informacje możemy umieścić w danej kolumnie. Przykładowo innego typu danych użyjemy, gdy będziemy chcieli przechowywać imię użytkownika, innego dla daty jego urodzin, a jeszcze innego, gdy będziemy chcieli przechowywać jego zdjęcie.

Poszczególne typy danych można zakwalifikować do różnych grup. Ponieważ dokładny opis i wynikający z tego podział znacznie wykracza poza ramy tego artykułu, zastosujemy tu dość ogólną segmentację ze względu na funkcjonalność. Poniżej przedstawiony jest podział na grupy funkcjonalności:

Dane tekstowe

char, varchar, nchar, ntext, nvarchar

Liczbowe

int, smallint, bigint, tinyint, float, real, decimal, numeric

Data i czas

datetime, smalldatetime

Binarne

binary, varbinary

Waluta

money, smallmoney

Specjalne

text, image, xml, bit

Typy tekstowe

Typy tekstowe składają się z dwóch podtypów. Pierwszy to typ łańcuchowy: char, varchar, drugi zaś, unicode: ntest, nvarchar. Łańcuchy znaków mogą zawierać litery, liczby i symbole. W zależności od zadeklarowanej długości(np.: char(16)) mamy możliwość przechowywania określonej ilośći znaków. Jeśli pole zadeklarowane na 16 znaków nie zostanie całkowicie wypełnione (wpisany tekst ma mniej niż 16 znaków) reszta znaków zostanie uzupełniona spacjami. Jeśli zaś ma więcej niż zadeklarowana liczba, wyraz zostanie obcięty na granicy szesnastego znaku. Zaleca się stosowanie typów o zmiennej ilość (varchar(n)), w przeciwieństwie do poprzednich nie są one dopełniane spacjami, co w dość jasny sposób przyczynia się do efektywniejszego zarządzania zasobami pamięci serwera. Kolejne typy danych, które służą do zapisywania tekstów mają zupełnie inną strukturę fizyczną aniżeli char. Typ nchar, bo o nim tutaj mowa, jest zapisany w standardzie unicode. Standard ten gwarantuje nam skuteczną pracę z serwerem obsługującym aplikacje wielojęzyczne. Jeśli chcielibyśmy aby nasza aplikacja działała zarówno w języku włoskim, polskim jak i w angielskim, pola zawierające tekst muszą być zadeklarowane jako nchar, w przeciwnym wypadku dojdzie do przekłamań. Kosztem wprowadzenia typu nchar, jest zwiększenie fizycznej objętości. Standard unicode zapisuje pojedynczy znak na dwóch bajtach podczas gdy ANSI używa do tego jednego bajtu. Tak więc powinniśmy dokładnie przemyśleć, czy nasza aplikacja ma działać w środowisku wielojęzycznym lub czy w niedalekiej przyszłości jest prawdopodobne, aby w takim otoczeniu działała.
Dodatkowym, dość ważnym ograniczeniem jest maksymalna ilość znaków, które mogą być składowane w jednym polu. Jego objętość nie jest nieograniczona. Jeśli chcemy przechowywać tekst o dużej długości, lepiej użyć typu ntext, do którego możemy wstawiać nawet tekst o wielkości 2 GB!

Typy liczbowe

Typy całkowite

Typy liczbowe dzielimy na całkowite, przybliżone i dokładne. Jeśli w projekcie mamy możliwość wyboru pomiędzy typem całkowitym, a pozostałymi, powinniśmy zawsze użyć całkowitego. Dzięki temu zwiększymy wydajność i efektywność pracy naszego serwera. Typy całkowite różnią się tylko wielkością zajętej powierzchni i ilością bajtów, na których są składowane, a co za tym idzie zakresem liczb jaki można w nich umieszczać. Poniższa tabele przedstawia typy danych całkowitych i towarzyszące im zakresy.

Tinyint

0 do 255

Smallint

-32,767 do 32,767

Int

-2,147,483,657 do 2,147,483,657

Bigint

-2^63 do 2^63

Typy całkowite

Jeśli w bazie chcemy przechowywać liczby z dokładnością do najmniej znaczącej cyfry powinniśmy użyć typów decimal lub numeric. Dla typu numeric konieczne jest określenie dwóch parametrów: precyzji i skali. Jeśli ich nie podamy, zostanie to zrobione za nas automatycznie i wyniesie kolejno 18, 0. Pierwszy parametr określa, ile cyfr znajduje się przed przecinkiem, drugi zaś mówi, ile cyfr znajduje się po przecinku. Dla przykładu: w celu przechowywania w wartości nie większej niż tysiąc z dokładnością do dwóch miejsc po przecinku użylibyśmy następującego typu numeric(3, 2). Jeśli pewnego dnia zmienilibyśmy zdanie i chcielibyśmy przechowywać liczby z dokładnością do czwartego miejsca po przecinku, należałoby zmienić typ danych na numeric(3, 4).
Przybliżone typy danych to float i real. Liczby przechowywane za pomocą tych typów używane są do składowania danych statystycznych, gdzie dokładność nie jest najważniejszą sprawą, a najważniejsza jest sama rozpiętość liczb, jakie można składować. Generalnie należy unikać używania typów przybliżonych. Jeżeli mamy możliwość przechowywania potrzebnych informacji przy użyciu decimal i numeric, należy je stosować.

Data i czas

MS SQL Server 2005 udostępnia nam dwa typy danych służące do przechowywania dat. Pierwszym z nich jest typ datetime. Za pomocą niego możemy z dokładnością do milisekundy zapisać informacje w repozytorium. A oto jak wygląda standardowy format pola datetime 2005-08-06 14:24:09.433. Na ogół nie jest nam potrzebna aż tak dokładna data. Jeśli chcemy przechowywać datę urodzin użytkownika, w zupełności wystarczy nam pole typu smalldatetime. Określa ono czas z dokładnością do jednej minuty. Przykład tej samej daty która została wygenerowana dla pola datetime po przekonwertowaniu na smalldatetime 2005-08-06 14:24:00.
Nie zawsze najtrafniejszym sposobem przechowywania daty jest pole datetime czy smalldatetime. Jeśli chcielibyśmy przechowywać tylko rok urodzin użytkownika aplikacji, wystarczy nam pole int. Dzięki takiej operacji zaoszczędzimy znaczną ilość miejsca, a przy tym zyskamy na efektywności poprzez uniknięcie kosztownych operacji parsowania daty.

Typy binarne

Jak sama nazwa wskazuje służą do przechowywania danych binarnych. Dane reprezentowane są za pomocą par heksadecymalnych, czyli w postaci szesnastkowej tworzonej ze znaków od 0-9 i A-F. Pozostałe własności są analogiczne jak przy typach znakowych binarychar, i varbinaryvarchar. Z tą subtelną różnicą iż tu uzupełniamy znakami 0x20.

Typy walutowe

Walutowe typy danych to money, smallmoney. Typy te mogą oczywiście przechowywać wartości inne niż wartości dolarowe, aczkolwiek sam serwer nie posiada standardowych funkcji konwersji walutowych. Zarwno money jak i smallmoney mają skalę równą cztery. Oznacza to, iż mogą przechowywać czety cyfry po przecinku dziesiętnym.

Typy specjalne

Dwa typy danych: text i image służą do składowania dużych plików. Mogą przechowywać do 2GB danych na pojedynczą deklaracje. Jeśli jednak w grę wchodzi przechowywanie tak dużych ilości informacji powinniśmy wziąć pod uwagę możliwość umieszczenia plików poza serwerem, a w bazie danych przetrzymywać jedynie ścieżkę do pliku.

Kolejnym typem danych jest BIT. Jest to logiczny typ danych, służący do składowania informacji w postaci 0 lub 1. Może być używany do przechowywania informacji o zdarzeniu potwierdzone/niepotwierdzone, włączone/wyłączone tak/nie. Przykładem może być sytuacja potwierdzenia wpłaty za czesne lub informacja o płci użytkownika itp.

Ostatnim typem jaki chciałbym omówić jest XML. Pole to zostało wprowadzone dopiero w tej wersji serwera. Umożliwia nam utworzenie kolumny w której będziemy przechowywać dane jako pliki w formacie XML. Dodatkowo załączony został język XQuery za pomocą którego możemy przeszukiwać tak składowany plik.

Podsumowanie

Niestety, aby zacząć praktyczne działanie z SQL Server 2005 konieczne jest przyswojenie znacznej ilości wiedzy o strukturze, projektowaniu i sposobie w jaki działają repozytoria danych. W tym kursie poznaliśmy typy danych, jakie występują w najnowszym serwerze oraz w jakich sytuacjach należy je wykorzystywać. Wiedza taka jest niezbędna do poprawnego projektowania i korzystania ze wszystkich serwerów baz danych.

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia