niedziela, 28 lipca 2013

Tworzenie tabel - MSSQL 2008 Server cz.4

Tak jak w każdym innym przypadku musimy w jakiś sposób przechowywać dane w tabelach. W tym celu musimy zapoznać się z dostępnymi typami danych:

1) Dostępne liczbowe typy danych:


Nazwa typu


Zakres
Potrzebna pamięć




TINYINT


0 do 255


1 bajt


SMALLINT -32,768 do 32,767 2 bajty
INT -231 do 231-1 4 bajty
BIGINT -263 do 263-1 8 bajty
DECIMAL(P,S) / NUMERIC (P,S) -1038+1 do 1038-1 5-17 bajtów
SMALLMONEY -214,748.3648 do 214,748.3647 4 bajty
MONEY


-922,337,203,685,477.5808 do
922,337,203,685,477.5807
8 bajtów
REAL -3.40E38 do -1.18E38, 0 oraz 1.18E38 to 3.40E38 4 bajty
FLOAT(N)


-1.79E308 do -2.23E-308, 0, oraz 2.23E-308 do
1.79E308
4 lub 8 bajtów



Poza standardowymi typami danych, mamy również takie wskazujące na zapisywanie wartości pieniężnych - MONEY oraz SMALLMONEY.

Poza typami reprezentującymi dane numeryczne, znajdują się również takie które pozwalają na przechowywanie danych tekstowych:

-CHAR(n) - przechowuje do 8000 znaków (inne niż Unicode),
-VARCHAR(n | max) - przechowuje do 8000 znaków max. 2GB (inne niż Unicode),
-NCHAR(n) - przechowuje do 4000 znaków (Unicode),
-NVARCHAR(n | max) -  przechowuje do 4000 znaków max. 2GB (Unicode)

Posiadamy również możliwość nadzoru nad datami w naszej bazie, do tego służą poniższe typy:

Nazwa typu


Zakres
Dokładność / Potrzebna pamięć


SMALLDATETIME 01/01/1900 do 06/06/2079 1 minuta / 4 bajty
DATETIME 01/01/1753 do 12/31/9999 0.00333 sekundy / 8 bajtów
DATETIME2 01/01/0001 do 12/31/9999 100 nanosekund / 6 do 8 bajtów
DATETIMEOFFSET 01/01/0001 do 12/31/9999 100 nanosekund / 8 do 10 bajtów
DATE 01/01/0001 do 12/31/9999 1 dzień / 3 bajty
TIME


00:00:00.0000000 do
23:59:59.9999999
100 nanosekund / 3 do 5 bajtów

Na koniec mamy jeszcze dane binarne:

-BIT - Null / 0 oraz 1, który zajmuje  bit,
-BINARY - stała długość, do 8000 bajtów,
-VARBINARY - zmienna długość, do 8000 bajtów


Dodatkowo do tabeli możemy wstawić kolumnę będącą identyfikatorem (IDENTITY) oraz kolumny rozrzedzonej (SPARCE), dzięki której możemy przechowywać wartości NULL bez powiększenia zajętości miejsca na dysku.Utworzymy testowy schemat dla naszej bazy oraz tabelę wykorzystującą ten mechanizm:

USE nazwa_naszej_bazy
GO
CREATE SCHEMA test AUTHORIZATION dbo
GO

CREATE TABLE test.Customer
(CustomerID     INT         IDENTITY(1,1),
LastName        VARCHAR(50) NOT NULL,
FirstName       VARCHAR(50) NOT NULL,
CreditLine      MONEY       SPARSE NULL,
CreationDate    DATE        NOT NULL)

GO

Możemy również utworzyć tabelkę, w której poza "normalnymi " rekordami będą takie, których wynikiem jest suma innych ((1) kolumna wyliczeniowa) , oraz dodatkowo w celu zaoszczędzenia miejsca możemy użyć kompresji:

CREATE TABLE test.OrderHeader
(OrderID        INT         IDENTITY(1,1),
CustomerID      INT         NOT NULL,
OrderDate       DATE        NOT NULL,
OrderTime       TIME        NOT NULL,
SubTotal        MONEY       NOT NULL,
ShippingAmt     MONEY       NOT NULL,
OrderTotal      AS (SubTotal + ShippingAmt)) -- (1)
WITH (DATA_COMPRESSION = ROW) -- kompresja wiersza
GO 

Kompresji nie możemy użyć dla kolumn rozrzedzonych.



Brak komentarzy:

Prześlij komentarz