Definiowanie kolumny jako klucza głównego w tabeli – SQL Server 2012

Niemal każda tabela w relacyjnej bazie danych posiada klucz główny – indeks, dzięki któremu wyszukiwanie rekordów jest szybsze i który identyfikuje każdy rekord. Najczęściej klucz główny stanowi kolumna o typie danych liczby całkowitej.

Jak zdefiniować kolumnę jako klucz podstawowy?  Wystarczy użyć słowa PRIMARY KEY zaraz po typie danych.

create table osoby
(
  id_osoby int PRIMARY KEY,
  nazwisko varchar(150) not null
);

Spotykam często w projektach baz danych praktykę dodawania do kolumny z kluczem jeszcze ograniczenia NOT NULL. Nie jest ono potrzebne w SQL Server, ponieważ PRIMARY KEY zawiera już w sobie dwa ograniczenia: UNIQUE  oraz NOT NULL. Stosowanie więc dodatkowo tych ograniczeń jest zbędne. Po wejściu w Management Studio do okna projektowania tabeli osoby, w jej właściwościach Allow Nulls jest ustawione na ograniczenie NOT NULL.

Natomiast unikalność zapewnia sam klucz główny, którego wartość musi być niepowtarzalna.

Innym sposobem na definiowanie w tabeli klucza podstawowego jest skorzystanie z wyrażenia constraint. Wtedy dla danej kolumny określamy tylko nazwę i typ danych, natomiast po wymienieniu wszystkich kolumn po przecinku podajemy wyrażenie constraint (ograniczenie) podając jego dowolną nazwę oraz klauzulę PRIMARY KEY, po której w nawiasach zwykłych podajemy nazwę kolumny, na którą ma być to ograniczenie nałożone.

create table osoby
(
  id_osoby int,
  nazwisko varchar(150) not null,
  constraint pk_osoba PRIMARY KEY( id_osoby )
);

I jeszcze jeden sposób na zdefiniowanie klucza podstawowego. W tym przypadku wystarczy tylko podać PRIMARY KEY, po którym podajemy nazwę kolumny mającej stanowić klucz.

create table osoby
(
  id_osoby int,
  nazwisko varchar(150) not null,
  PRIMARY KEY( id_osoby )
);

Klucz podstawowy może być definiowany również na kilku kolumnach tabeli. Poniżej przedstawiam przykład tworzenia tabeli z kluczem podstawowym.

create table lista
(
  nr int,
  nazwisko varchar(150),
  imie varchar(100) not null,
  PRIMARY KEY(nr, nazwisko)
);

Tabela może posiadać tylko jeden klucz podstawowy.