Podobnie jak MySQL, PostgreSQL, Oracle i wiele innych relacyjnych baz danych, SQL Server najlepiej nadaje się do przypisywania unikalnych kluczy podstawowych do większości tabel baz danych.
Korzyści z używania numerycznych, automatycznie zwiększanych kluczy podstawowych jest wiele, ale najbardziej znaczące korzyści to szybsza szybkość wykonywania zapytań i niezależność od danych podczas przeszukiwania tysięcy rekordów, które mogą zawierać często zmieniane dane w innych miejscach w tabeli. Dzięki spójnemu i niepowtarzalnemu identyfikatorowi numerycznemu aplikacje mogą korzystać z tych szybszych i bardziej niezawodnych zapytań.
Podstawowe tworzenie tabeli
Po połączeniu z serwerem SQL zwykle zaczynasz od CREATING
nową tabelę zawierającą pole, którego chcesz użyć jako zwiększony klucz podstawowy. W naszym przykładzie pozostaniemy przy wypróbowanym i prawdziwym id
pole:
CREATE TABLE books (
id INT NOT NULL,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100),
);
Problem polega na tym, że nie mamy możliwości kontrolowania naszego id
pole. Po wstawieniu nowego rekordu musimy nie tylko ręcznie wprowadzić wartość dla id
, ale musimy wykonać zapytanie z wyprzedzeniem, aby spróbować zweryfikować ten id
wartość już nie istnieje (prawie niemożliwa w przypadku wielu jednoczesnych połączeń).
Korzystanie z ograniczeń tożsamości i klucza podstawowego
Okazuje się, że rozwiązanie korzysta z dwóch opcji ograniczeń dostarczanych przez SQL Server.
Pierwszy to PRIMARY KEY
, co jak sama nazwa wskazuje wymusza zachowanie określonej kolumny jako całkowicie unikalnego indeksu dla tabeli, pozwalającego na szybkie wyszukiwanie i zapytania.
Podczas gdy SQL Server zezwala tylko na jeden PRIMARY KEY
ograniczenie przypisane do pojedynczej tabeli, która PRIMARY KEY
można zdefiniować dla więcej niż jednej kolumny. W scenariuszu z wieloma kolumnami poszczególne kolumny mogą zawierać zduplikowane, nieunikalne wartości, ale PRIMARY KEY
ograniczenie zapewnia, że każda kombinacja ograniczonych wartości będzie w rzeczywistości unikalnych w stosunku do każdej innej kombinacji.
Drugim elementem układanki jest IDENTITY
ograniczenie, które informuje SQL Server o automatycznym zwiększaniu wartości liczbowej w określonej kolumnie za każdym razem, gdy nowy rekord jest INSERTED
. Podczas gdy IDENTITY
może zaakceptuj dwa argumenty liczbowego seed
skąd zaczną się wartości, a także increment
, te wartości zazwyczaj nie są określone w IDENTITY
ograniczenie i zamiast tego są pozostawione jako domyślne (oba domyślnie to 1
).
Mając tę nową wiedzę na wyciągnięcie ręki, możemy przepisać naszą poprzednią CREATE TABLE
oświadczenie, dodając nasze dwa nowe ograniczenia.
CREATE TABLE books (
id INT NOT NULL IDENTITY PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100),
);
To wszystko. Teraz id
kolumna naszych books
tabela będzie automatycznie zwiększana po każdym INSERT
i id
pole gwarantuje również unikalną wartość.