Podobně jako u MySQL, PostgreSQL, Oracle a mnoha dalších relačních databází je SQL Server nejlépe využitelný při přiřazování jedinečných primárních klíčů většině databázových tabulek.
Výhody použití numerických, automaticky inkrementovaných primárních klíčů jsou četné, ale nejpůsobivějšími výhodami jsou vyšší rychlost při provádění dotazů a nezávislost na datech při prohledávání tisíců záznamů, které mohou obsahovat často pozměněná data jinde v tabulce. Díky konzistentnímu a jedinečnému číselnému identifikátoru mohou aplikace využívat výhod těchto rychlejších a spolehlivějších dotazů.
Základní vytváření tabulky
Po připojení k serveru SQL byste normálně začali CREATING
novou tabulku, která obsahuje pole, které chcete použít jako svůj inkrementovaný primární klíč. V našem příkladu se budeme držet osvědčeného id
pole:
CREATE TABLE books (
id INT NOT NULL,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100),
);
Problém je v tom, že nemáme žádný způsob, jak ovládat naše id
pole. Při vkládání nového záznamu musíme nejen ručně zadat hodnotu pro id
, ale musíme provést dotaz předem, abychom se pokusili ověřit toto id
hodnota již neexistuje (při řešení mnoha současných připojení je to téměř nemožné).
Použití omezení identity a primárního klíče
Ukázalo se, že řešení využívá dvě možnosti omezení poskytované serverem SQL.
První je PRIMARY KEY
, který, jak název napovídá, nutí zadaný sloupec, aby se choval jako zcela jedinečný index pro tabulku, což umožňuje rychlé vyhledávání a dotazy.
Zatímco SQL Server umožňuje pouze jeden PRIMARY KEY
omezení přiřazené jedné tabulce, tedy PRIMARY KEY
lze definovat pro více než jeden sloupec. Ve scénáři s více sloupci mohou jednotlivé sloupce obsahovat duplicitní, nejedinečné hodnoty, ale PRIMARY KEY
omezení zajišťuje, že každá kombinace omezených hodnot bude ve skutečnosti jedinečný vzhledem ke každé jiné kombinaci.
Druhým kouskem skládačky je IDENTITY
omezení, které informuje SQL Server, aby automaticky zvýšil číselnou hodnotu v zadaném sloupci, kdykoli je nový záznam INSERTED
. Zatímco IDENTITY
může přijmout dva argumenty numerického seed
kde budou hodnoty začínat a také increment
, tyto hodnoty obvykle nejsou specifikovány pomocí IDENTITY
omezení a místo toho jsou ponechány jako výchozí (obě výchozí 1
).
S těmito novými znalostmi na dosah ruky můžeme přepsat naši předchozí CREATE TABLE
přidáním našich dvou nových omezení.
CREATE TABLE books (
id INT NOT NULL IDENTITY PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100),
);
To je vše. Nyní id
sloupec našich books
tabulka bude automaticky zvýšena po každém INSERT
a id
pole je také zaručeno, že bude jedinečnou hodnotou.