Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Tworzenie typów danych i tabel dr inż. Łukasz Piątek Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie Katedra Systemów Ekspertowych i Sztucznej.

Podobne prezentacje


Prezentacja na temat: "Tworzenie typów danych i tabel dr inż. Łukasz Piątek Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie Katedra Systemów Ekspertowych i Sztucznej."— Zapis prezentacji:

1 Tworzenie typów danych i tabel dr inż. Łukasz Piątek Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie Katedra Systemów Ekspertowych i Sztucznej Inteligencji, Instytut Informatyki Biomedycznej (Tworzenie typów użytkownika) (Tworzenie tabel)

2 Typy danych w MS SQL Server 2008 Typy danych w MS SQL Server 2008 obejmują: typy numeryczne, typy tekstowe, typy daty oraz czasu, typy binarne, typy specjalne, oraz inne typy. bigintbinarybitcharCLR cursordatedatetimedatetime2datetimeoffset decimalfloathierarchyidimageint moneyncharntextnumericnvarchar realrowversionsmalldatetimesmallintsmallmoney sql_varianttabletexttimetimestamp tinyintvarbinaryvarcharuniqueidentiferxml

3 Typy numeryczne Liczby całkowite: tinyint (1B), smallint (2B), int (4B), bigint (8B), Liczby niecałkowite (rzeczywiste): numeric, decimal (maksymalnie 38 cyfr) – deklarujemy precyzję oraz skalę, np. numeric(20,4), float, real – niedokładne, Walutowe: money (8B), smallmoney (4B) – obsługa symboli walut.

4 Typy tekstowe Stałej długości: char, nchar – uzupełniane spacjami Zmiennej długości: varchar (do 8000 znaków), nvarchar (do 4000 znaków), Duże typy tekstowe: varchar(max) oraz nvarchar(max) (do 2GB danych), Unicode (UTF-16): nchar, nvarchar, nvarchar(max) – prefiks N do oznaczania literałów w Uni- code

5 Typy daty i czasu Data i czas: datetime (8B), smalldatetime (4B) – stare typy datetime2 (6-8B) – deklarowana dokładność (maksymalnie 7 cyfr w części ułamkowej sekundy) datetimeoffset (8-10B) – deklarowana dokładność, informacja o strefie czasowej Tylko data: Date (3B), Tylko czas: Time (3-5B) – deklarowana dokładność.

6 Typy binarne Stałej długości: binary – maksymalnie 8000B (uzupełniany zerami), Zmiannej długości: varbinary – maksymalnie 8000B, Duży typ binarny: varbinary(max) – do 2GB danych.

7 Typy specjalne xml - przechowuje dane w formacie XML: implementuje kontrolę poprawności formatu, oraz umożliwia walidację dokumentami XML Schema, geometry – geometria na płaszczyźnie, geography – geografia w różnych układach odniesienia, hierarchyid – przechowywanie i obsługa hierarchii.

8 Inne typy bit – logika trójwartościowa: 0,1,NULL, sql_variant – typ ogólny, można do niego konwertować dane pra- wie każdego typu, sysname – nvarchar(128), timestamp, rowversion – znacznik śledzenia zmian w rekordach.

9 Typy przestarzałe text – używać varchar(max), ntext – używać nvarchar(max), image – używać varbinary(max).

10 Hierarchia typów Typy CLR, SQL_VARIANT, XML, DATETIMEOFFSET, DATETIME2, DATETIME, SMALLDATETIME, DATE, TIME.

11 Niejawna: nie zawsze możliwa, jeżeli zachodzi, to zawsze rzutowanie następuje na typ danych znajdujący się najwyżej w hierarchii, Jawna: CAST – prostsza, oraz CONVERT – dająca więcej możliwości zalecana, by uniknąć przypadkowych błędów, czasem nie można jej uniknąć Konwersja

12 Typy bazujące na typach systemowych: polecenie CREATE TYPE, brak polecenia ALTER TYPE, Typy tabelaryczne: polecenie CREATE TYPE … AS TABLE, wykorzystywane przez zmienne tabelaryczne i parametry obiektów proceduralnych (READONLY), Typy CLR: Tworzone w technologii.NET. Typy danych użytkownika

13 Nowe typy daty/czasu w MS SQL Server 2008: date, time, datetime2, oraz datetimeoffset. Typ hierarchiczny: Przykłady

14 Typ hierarchiczny Zapytanie, które wyświetli informacje o pracownikach firmy Adventu- reWorks. Każdy z pracowników posiada unikalny identyfikator zapisany w ko- lumnie EmployeeID oraz identyfikator przełożonego (w kolumnie ManagerID). Osoba, która w kolumnie ManagerID ma zapisaną wartość NULL, jest właścicielem firmy, czyli nie posiada przełożonego: use AdventureWorks GO SELECT EmployeeID,ManagerID,LoginID FROM HumanResources.Employee Wynik:

15 Typ hierarchiczny (c.d.) Utworzenie hierarchii pracowników przy wykorzystaniu Common Table Expression: WITH CTE_Employee AS ( SELECT EmployeeID,ManagerID,LoginID, 0 as POZIOM FROM HumanResources.Employee WHERE ManagerID IS NULL UNION ALL SELECT HR.EmployeeID,HR.ManagerID,HR.LoginID, POZIOM+1 FROM HumanResources.Employee HR JOIN CTE_Employee C ON HR.ManagerID = C.EmployeeID ) SELECT * FROM CTE_Employee ORDER BY POZIOM,ManagerID,EmployeeID Wynik:

16 Typ hierarchiczny (c.d.2) Zmienna POZIOM określa, na jakim poziomie drzewa znajduje się aktualny pracownik. W tym przypadku drzewo ma pięć poziomów. Na pierwszym jest właściciel (ken0), jego można uznać za korzeń drzewa. Na ostatnim poziomie znajduje się 190 pracowników, którzy są liśćmi. Można to sprawdzić wykonując poniższe zapytanie: WITH CTE_Employee AS ( SELECT EmployeeID,ManagerID,LoginID, 0 as POZIOM FROM HumanResources.Employee WHERE ManagerID IS NULL UNION ALL SELECT HR.EmployeeID,HR.ManagerID,HR.LoginID, POZIOM+1 FROM HumanResources.Employee HR JOIN CTE_Employee C ON HR.ManagerID = C.EmployeeID ) SELECT COUNT(EmployeeID) as [Liczba pracownikow],POZIOM FROM CTE_Employee GROUP BY POZIOM ORDER BY POZIOM Wynik:

17 Typ hierarchiczny (c.d.3) Omawiane rozwiązanie charakteryzuje się zwięzłym zapisem i czytel- nością kodu, Brakuje w nim jednak informacji o ścieżce od każdego pracownika do właściciela firmy, Mianowicie pracownik adventure-works\ben0 o identyfikatorze 261 ma przełożonego o numerze 274 (adventure-works\sheela0), który z kolei jest podwładnym pracownika o numerze 71 (adventure-works\wendy0). Ten ma przełożonego o numerze 140 (adventure-works\laura1), który jest bezpośrednim podwładnym właściciela firmy, Istotna byłaby więc informacja zapisana przy pierwszym z wymienio- nych pracowników: 1/140/71/274/261.

18 Typ hierarchiczny (c.d.4) W poniższym zapytaniu ścieżka została zbudowana dynamicznie (założenia z poprzedniego slajdu): AS INT; = 1; WITH CTE_Employee AS ( SELECT EmployeeID, ManagerID,LoginID, 0 AS poziom, CAST('.' + CAST(EmployeeID AS VARCHAR(10)) + '. AS VARCHAR(MAX)) AS sciezka FROM HumanResources.Employee WHERE ManagerID IS NULL UNION ALL SELECT HR.EmployeeID, HR.ManagerID,HR.LoginID, poziom + 1, CAST(C.sciezka + CAST(HR.EmployeeID AS VARCHAR(10)) + '. AS VARCHAR(MAX)) AS sciezka FROM HumanResources.Employee HR JOIN CTE_Employee AS C ON HR.ManagerID = C.EmployeeID ) SELECT * FROM CTE_Employee ORDER BY POZIOM,ManagerID,EmployeeID,sciezka; Wynik:

19 Typ hierarchiczny (c.d.5) Podobne operacje dotyczące hierarchii pracowników w firmie mogą być wykonane przy pomocy typu danych HIERARCHYID. Utworzyć tabelę dbo.Organizacja, korzystając z podanego niżej kodu. Informacje o hierarchii pracowników będą w niej przecho- wywane w polu EmployeeID typu HIERARCHYID: use AdventureWorks GO CREATE TABLE dbo.Organizacja ( Pracownik hierarchyid NOT NULL, Nazwa nvarchar(50) NOT NULL ) Do tabeli należy dodać kolumnę Poziom, w której przechowywane będą informacje o poziomie pracownika w hierarchii: : ALTER TABLE dbo.Organizacja ADD Poziom AS Pracownik.GetLevel()

20 Typ hierarchiczny (c.d.6) Dodać klucz główny do tabeli dbo.Organizacja, który utworzony jest na polu Pracownika. Operacja ta jest konieczna, ponieważ w następnym kroku będzie tworzona kolumna wyliczeniowa Przelozony: use AdventureWorks ALTER TABLE dbo.Organizacja ADD CONSTRAINT PK_Organizacja PRIMARY KEY ( Pracownik ) Utwórzyć kolumnę wyliczeniową Przelozony, która będzie kolumną wyliczeniową trwałą (jej wartość będzie przechowywana w tabeli). Wartość w tej kolumnie jest pobierana z metody GetAncestor(), umożliwiającej obliczenie osoby nadrzędną w hierarchii i jako parametr przyjmuje liczbę poziomów, o którą należy się przesunąć w górę, żeby uzyskać wynik: : ALTER TABLE dbo.Organizacja ADD Przelozony AS Pracownik.GetAncestor(1) PERSISTED REFERENCES dbo.Organizacja(Pracownik)

21 Typ hierarchiczny (c.d.7) Zapytanie: WITH CTE_Hierarchia AS ( SELECT EmployeeID, LoginID, hierarchyid::GetRoot() AS Pracownik FROM HumanResources.Employee WHERE ManagerID IS NULL UNION ALL SELECT HR.EmployeeID, HR.LoginID, C.Pracownik.GetDescendant(null, null) FROM HumanResources.Employee AS HR INNER JOIN CTE_Hierarchia AS C ON HR.ManagerID= C.EmployeeID ) Select * From CTE_Hierarchia Wynik: Dane w kolumnie Pracownik nie są unikalne i nie mogą posłużyć do zbudowania klucza głównego w tabeli dbo.Organizacja, w której ten klucz miał być oparty tylko na kolumnie Pracownik. Można jednak zmienić sposób wyznaczania kolumny Pracownik, dodając do niej informację o kolumnie EmployeeID, która na pewno zawiera dane unikalne:

22 Typ hierarchiczny (c.d.8) Zapytanie: WITH CTE_Hierarchia AS ( SELECT EmployeeID, LoginID, hierarchyid::GetRoot() AS Node FROM HumanResources.Employee WHERE ManagerID IS NULL UNION ALL SELECT HR.EmployeeID, HR.LoginID, hierarchyId::Parse(c.Node.ToString() + Cast(HR.EmployeeID as varchar(5)) + '/') FROM HumanResources.Employee AS HR INNER JOIN CTE_Hierarchia AS C ON HR.ManagerID= C.EmployeeID ) INSERT INTO dbo.Organizacja(Pracownik,Nazwa) Select Node, LoginID From CTE_Hierarchia

23 Typ hierarchiczny (c.d.9) Sprawdźmy zatem uzyskane wyniki. Należy zwrócić uwagę, że dane typu HIERARCHYID są rzeczywiście w zapisane w formacie binarnym – kolumny Pracownik i Przelozony. Jeśli chcesz zobaczyć, jak wygląda taka informacja w formacie tekstowym, wywołaj na odpowiedniej kolumnie metodę ToString(): : SELECT Pracownik,Nazwa,Poziom,Przelozony,Pracownik.ToString() as Sciezka FROM dbo.Organizacja ORDER BY Poziom Wynik:

24 Typ hierarchiczny (c.d.10) Zapytanie zwracające szefa firmy: SELECT * FROM dbo.Organizacja WHERE Pracownik = HIERARCHYID::GetRoot(); Wynik:

25 Wyższa Szkoła Informatyki i Zarządzania ul. Sucharskiego 2, Rzeszów, Polska Dziękuję za uwagę…


Pobierz ppt "Tworzenie typów danych i tabel dr inż. Łukasz Piątek Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie Katedra Systemów Ekspertowych i Sztucznej."

Podobne prezentacje


Reklamy Google