Tworzenie tabeli z wykorzystaniem graficznego narzędzia projektowania

Tworzenie tabeli z wykorzystaniem graficznego narzędzia projektowania

Autor: Krzysztof Kapustka

Opublikowano: 4/5/2017, 12:00 AM

Liczba odsłon: 5318

Aby móc przechowywać w bazie danych jakiekolwiek informacje, należy utworzyć w tej bazie odpowiednie tabele. Od struktury tworzonych tabel zależeć będzie, czy tworzona baza danych okaże się przystępna w obsłudze, oraz czy umożliwi nam skuteczne i efektywne wydobywanie zgromadzonych w niej informacji.

W systemie SQL Server 2016 nową tabelę możemy utworzyć na dwa różne sposoby - z poziomu narzędzia projektowania dostępnego w ramach SQL Server Management Studio oraz za pomocą standardowych poleceń języka T-SQL. W niniejszym artykule zapoznamy się z procesem tworzenia nowej tabeli z wykorzystaniem graficznego narzędzia projektowania tabel.

Aby utworzyć nową tabelę w istniejącej bazie danych użytkownika z wykorzystaniem narzędzia SQL Server Management Studio, po podłączeniu się do konkretnej instancji serwera bazy danych w oknie Object Explorer należy rozwinąć reprezentujący tę bazę węzeł, kliknąć prawym przyciskiem podwęzeł Tables, a następnie wybrać opcję Table. W głównej części programu Management Studio wyświetli się specjalny formularz wprowadzania danych, za pomocą którego będziemy mogli precyzyjnie zaprojektować każdą z kolumn tabeli i nadać jej w ten sposób określoną strukturę.

Definiowanie kolumn

Proces definiowania składowych kolumn tabeli jest bardzo prosty i sprowadza się do określenia w ramach poszczególnych wierszy formularza nazw dla każdej z kolumn (wartości w kolumnie Column Name), typów danych jakie będą one przechowywać (wartości w kolumnie Data Type) oraz określenia, czy w danej kolumnie dopuszczalne będą wartości typu NULL (pola wyboru Allow Nulls). Jak pamiętamy, wartość zdefiniowana jako NULL wskazuje, że dana wartość nie istnieje, jest nieznana, lub też nie ma w danym przypadku zastosowania. Tak więc poprzez zaznaczenie pola Allow Nulls w dowolnej kolumnie decydujemy o tym, czy wartości tej kolumny będą wymagane, czy też nie (innymi słowy, czy podczas wstawiania danych do tabeli pola w tej kolumnie będą mogły pozostawać puste, czy też nie).

W pierwszej kolumnie pierwszego wiersza definiujemy więc nazwę pierwszej kolumny tabeli. Zgodnie z przyjętą konwencją nazwy zapisywane są zwyczajowo z wykorzystaniem notacji Camel Case, a więc nie stosujemy w nich nazw odstępu, zaś każde słowo rozpoczynamy dużą literą. W drugiej kolumnie pierwszego wiersza definiujemy rodzaj danych, jakie przechowywane będą w pierwszej kolumnie tabeli. Do wyboru mamy kilkadziesiąt różnych typów danych, które szczegółowo omówiliśmy w jednym z poprzednich artykułów. W trzeciej kolumnie pierwszego wiersza formularza określamy, czy pierwsza kolumna tworzonej tabeli dopuszczać będzie wartości NULL. Aby sprecyzować to ograniczenie, należy odpowiednio odznaczyć lub zaznaczyć dostępne pole wyboru. Po zdefiniowaniu pierwszej kolumny w ramach pierwszego wiersza formularza możemy przystąpić do definicji kolejnej kolumny tabeli w kolejnym wierszu formularza, powtarzając ten proces aż do zakończenia formułowania struktury nowej tabeli. Jak widać proces definicji poszczególnych kolumn tabeli jest stosunkowo prosty i sam w sobie raczej nie rodzi żadnych problemów, jednak w procesie tworzenia nowej tabeli musimy również wziąć pod uwagę kilka innych rzeczy.

Określanie klucza podstawowego

Zgodnie z podstawowymi zasadami projektowania tabel w relacyjnej bazie danych, każda tabela powinna zawierać kolumnę, której wartości jednoznacznie identyfikować będą każdy wiersz (rekord danych) w tej tabeli. Kolumnę taką nazywami formalnie kluczem podstawowym (ang. primary key). Aby lepiej zrozumieć konieczność istnienia takiego klucza, rozważmy przykład, w którym tworzymy tabelę danych do przechowywania informacji o klientach. Tabelę taką możemy nazwać przykładowo Customer lub Customers, zależnie od wybranej przez nas konwencji nazewnictwa tabel. Na potrzeby tego przykładu tabela ta składać się będzie z kolumn FirstName i LastName, w których przechowywane będą odpowiednio imiona i nazwiska klientów naszej firmy, plus dowolne inne kolumny dodatkowe, które nas w tej chwili nie interesują. Przypuśćmy, że pewnego dnia zachodzi potrzeba wysłania lub wystawienia faktury klientowi o imieniu i nazwisku John Smith. Aby było to możliwe, musimy być w stanie precyzyjnie okreslić, który z klientów w naszej bazie jest klientem docelowym.

Z przykładu tego jasno wynika, że kluczem podstawowym tabeli Customers nie może być pole FirstName, jako że w kolumnie tej mogą się potencjalnie znaleźć dwie lub więcej identycznych wartości (tych samych imion), które odnosić się będą do różnych klientów. Nie możemy więc rozróżniać naszych klientów wyłącznie po imieniu, gdyż rozróżnienie takie może w pewnym przypadku okazać się niemożliwe. Nie jest ważne, że w danym momencie istnienia bazy danych wartości te nie powtarzają się, tj. w bazie danych nie ma dwóch takich samych osób o imieniu John. Zadaniem ograniczenia Primary Key jest zabezpieczenie nas przed wystąpieniem takiej sytuacji.

Podobnie jest z kolumną LastName. Kolumna ta również nie może być kluczem podstawowym w tabeli Customers, bowiem jest całkiem możliwe, że w tabeli pojawią się kiedyś dwie takie same osoby o identycznym nazwisku. W takim przypadku kolumna LastName również nie mogłaby pełnić funkcji klucza podstawowego, bo za pomocą przechowywanych w niej wartości nie bylibyśmy w stanie odróżniać od siebie klientów.

W zasadzie na upartego można by stwierdzić, że żadna z kolumn tabeli Customers opisująca poszczególne własności klientów nie może pełnić funkcji klucza podstawowego, jako że praktycznie każda z tych wartości może się kiedyś powtórzyć i uniemożliwić nam jednoznaczną identyfikację osób. Dlatego też w celu uniknięcia tego problemu stosować będziemy na ogół pewne obejście, polegające na zdefiniowanu w tabeli dodatkowej kolumny do przechowywania liczbowych identyfikatorów klientów. Taka kolumna ze zdefiniowanym ograniczeniem klucza podstawowego nie ma w zasadzie żadnego odzwierciedlenia w rzeczywistości, więc istnieje tylko na potrzeby identyfikacji konkretnych wierszy w tabelach. Jako że jej wartości definiujemy całkowicie bez wpływu na dane naszych klientów i jednocześnie zgodnie z wymaganiem unikalności klucza podstawowego, rozwiązanie to spełnia wszystkie nasze potrzeby.

W przypadku tabeli Customers kolumnę tę nazwiemy po prostu CustomerID. Wartości w kolumnie CustomerID będą liczbami całkowitymi, które dzięki swojej prostocie i unikalności umożliwią nam jednoznaczną identyfikację każdego z klientów, bez względu na to, jak ten klient się nazywa i jakie posiada własności. Od tej pory możemy więc mieć 10 klientów o imieniu i nazwisku John Smith, a mimo to każdy z nich będzie łatwy do rozróżnienia w bazie danych za pomocą nadanego mu identyfikatora. Kolumna identyfikatora przechowywać będzie wartości liczbowe, toteż jako typ danych jej wartości wybieramy zazwyczaj typ INT. Aby wartości w tej kolumnie nie mogły się powtórzyć, a jednocześnie zawsze były wprowadzane do bazy bez ich pomijania, odznaczamy dla niej pole wyboru Allow Nulls (Zezwól na wartości NULL), co spowoduje, że system nie zezwoli nam na wprowadzenie do bazy nowego klienta, dla którego nie określiliśmy odpowiedniego identyfikatora.

Swoją drogą, to czy dla danej kolumny powinniśmy zaznaznaczyć pole wyboru Allow Nulls zależeć będzie od wielu różnych czynników. Jeśli na kolumnie tej zdefiniowaliśmy ograniczenie wymuszające unikalność danych, takie jak ograniczenie Primary Key lub Unique, wówczas nie będziemy mieć wyboru i będziemy zmuszeni odznaczyć to pole, aby kolumna ta zawsze zawierała unikatowe, niepowtarzające się informacje. Dla pozostałych kolumn sytuacja ta nie jest już taka oczywista i wymagać będzie odpowiednich przemyśleń. Należy przy tym wziąć pod uwagę nie tylko przydatność i konieczność istnienia takich danych, ale też to, czy nasi klienci w ogóle zechcą się nimi z nami podzielić. Jeśli więc jakąś kolumnę zdefiniujemy z odznaczonym polem Allow Nulls, a później przy dodawaniu klienta zorientujemy się, że nie podał nam on tej jednej konkretnej informacji, wówczas nie zdołamy zapisać tego klienta w bazie danych.

Aby na kolumnie identyfikatora (w naszym przykładzie CustomerID) wymusić ograniczenie klucza podstawowego, należy kliknąć przycisk Primary Key dostępny na głównym pasku narzędzi ulokowanym powyżej okna projektowania tabeli. Po kliknięciu tego przycisku przy nazwie wskazanej przez nas kolumny pojawi się symbol klucza, który wskazywać będzie, że kolumna ta jest kluczem podstawowym w tabeli, określającym tożsamość każdego wiersza danych.

Automatyczny przyrost tożsamości

Na tym etapie silnik bazy danych wie już, że w tabeli Customers kluczem podstawowym jest kolumna CustomerID. Tym samym wprowadzane do niej wartości nie mogą się już nigdy powtórzyć, ani też zostać pominięte. Jeśli później do tabeli tej zaczniemy wprowadzać informacje o naszych klientach i dla jednego z nich w kolumnie tej wprowadzimy wartość liczbową identyfikatora, która została już wcześniej przypisana innemu klientowi, system nie pozwoli nam wprowadzić takiej osoby do bazy.

Z tego względu zamiast zawracać sobie głowę ręcznym przypisywaniem identyfikatorów każdemu z klientów, możemy zlecić tę pracę silnikowi bazy danych. Aby tego dokonać, należy zaznaczyć zdefiniowaną przez nas kolumnę klucza podstawowego - w tym wypadku CustomerID - i przejść do okna Column Properties (Właściwości kolumny), widocznego poniżej formularza projektowania tabeli. W oknie właściwości kolumny należy rozwinąć sekcję ustawień Identity Specification (Specyfikacja tożsamości), po czym wartość właściwości (Is Identity) zmienić na wartość Yes. Spowoduje to uaktywnienie dwóch kolejnych ustawień dla tej kolumny. Właściwość Identity Increment (Przyrost tożsamości) wskazuje wartość liczbową, o jaką wzrastać będą tworzone kolejno identyfikatory klientów. Domyślnie jest to wartość 1, tak więc jeśli identyfikatorem trzeciego klienta jest 3, to czwarty dodany przez nas do bazy klient otrzyma identyfikator o jeden większy, czyli 4. Z kolei właściwość Identity Seed (Inicjator tożsamości) wskazuje identyfikator początkowy, od którego rozpoczyna się zliczanie rekordów. Jeśli więc właściwość tą ustawimy na wartość 201, wówczas przy inkrementacji wynoszącej 1, pierwszych trzech klientów otrzyma automatycznie identyfikatory 201, 202 i 203.

Zapisywanie tabeli w bazie danych

Aby zapisać i wprowadzić nową tabelę do bazy danych, wystarczy kliknąć przycisk Save dostępny na pasku narzędzi, lub po prostu zamknąć kartę z projektem bieżącej tabeli za pomocą dedykowanego jej przycisku X. W obu tych przypadkach przed zapisaniem zaprojektowanej tabeli zostaniemy poproszeni o podanie dla niej nazwy. Aby nowa tabela została wyświetlona w oknie Object Explorer, należy odświeżyć zawartość tego okna za pomocą przycisku Refresh.

Gdy mamy już nową i poprawnie zaprojektowaną tabelę do przechowywania interesujących nas danych, możemy przystąpić do wypełniania jej odpowiednimi wartościami. Aby to zrobić, wystarczy kliknąć prawym przyciskiem nazwę pustej tabeli w oknie Object Explorer, po czym wybrać opcję Edit Top 200 Rows (Edytuj 200 pierwszych wierszy), co spowoduje otwarcie edytora danych, z poziomu którego będziemy mogli zmodyfikować lub rozszerzyć tabelę o dodatkowe rekordy.

Jeśli którąkolwiek z kolumn tabeli zdefiniowaliśmy jako klucz podstawowy, będziemy musieli pamiętać, aby wprowadzane do niej wartości były unikalne dla wszystkich wierszy. Jeśli w kolumnie tej skorzystaliśmy z funkcji automatycznego ustalania tożsamości wierszy, wówczas w czasie wprowadzania danych nie będziemy do niej mogli wstawiać żadnych wartości, gdyż system sam będzie wypełniał tę kolumnę odpowiednimi liczbami. Wszystkie pozostałe kolumny tabeli wypełniamy zgodnie z przeznaczeniem, zważając na obowiązujące ograniczenia związane z określonym typem danych. Zapis pełnego wiersza (rekordu) danych w bazie ma miejsce dopiero po wprowadzeniu wartości we wszystkich kolumnach tego wiersza. Po zakończeniu wprowadzania wartości w ostatniej kolumnie wiersza możemy albo wciśnąć klawisz Enter, albo kliknać przycisk oznaczony ikoną długopisu widoczną po lewej stronie pierwszej kolumny wiersza. W obu tych przypadkach wiersz zostanie w całości zapisany w tabeli, zaś system przejdzie do edycji kolejnego wiersza.

Jeśli podczas wprowadzania danych do tabeli okaże się, że tabela wymaga przeprojektowania, wystarczy kliknąć tę tabelę prawym przyciskiem w oknie Object Explorer, wybrać opcję Design i powtórnie przystąpić do procesu projektowania kolumn tabeli.

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

Wydarzenia