Кажете това {Author, Title, Edition}
уникално идентифицира книга, тогава важи следното:
-
Това е суперключ - уникално идентифицира кортеж (ред).
-
Не може да се намали – премахването на някоя от колоните вече не я прави ключ.
-
Това е ключ-кандидат - нередуцируемият суперключ е кандидат-ключ.
Сега нека разгледаме ID (цяло число)
Мога да разсъждавам, че Book
ключът на таблицата ще се покаже в няколко други таблици като външен ключ, а също и в няколко индекса. Така че ще отнеме доста място – да речем три колони x 40 знака (или каквото и да е...) – във всяка от тези таблици плюс съответстващи индекси.
За да направя тези "други" таблици и индекси по-малки, мога да добавя колона с уникално цяло число към Book
таблица, която да се използва като ключ, който ще бъде препратен като външен ключ. Кажете нещо като:
alter table Book add BookID integer not null identity;
С BookID
като (трябва да бъде) уникален също, Book
таблицата вече има два кандидат-ключа.
Сега мога да избера BookID
като първичен ключ.
alter table Book add constraint pk_Book primary key (BookID);
Въпреки това, {Author,Title,Edition}
трябва остане ключ (уникален), за дапредотврати нещо подобно:
BookID Author Title Edition
-----------------------------------------------
1 C.J.Date Database Design 1
2 C.J.Date Database Design 1
За да обобщим, добавяме BookID
-- и избирането му като основно -- не спря {Author, Title, Edition}
като (кандидат) ключ. Все пак трябва да има свое собствено уникално ограничение и обикновено съответстващ индекс.
Също така имайте предвид, че от гледна точка на проектиране това решение е направено на „физическо ниво“. Като цяло, на логическо ниво на дизайн, това ID
не съществува - въведен е по време на разглеждането на размерите на колоните и индексите. И така, физическата схема е получена от логическата. В зависимост от размера на DB, RDBMS и използвания хардуер, нито едно от тези разсъждения за размера може да има измерим ефект - така че използвайте {Author, Title, Edition}
като PK може да бъде идеално добър дизайн - докато не се докаже различно.