0Pricing
SQL Academy · Lekcja

Klucze główne i unikatowość

Poznaj klucze główne, klucze zastępcze i naturalne, klucze złożone oraz dowiedz się, dlaczego każdy wiersz potrzebuje wiarygodnego unikatowego identyfikatora.

Klucze główne i unikatowość to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Dlaczego każdy wiersz potrzebuje unikalnego identyfikatora

Aby bezpiecznie zaktualizować lub usunąć konkretny wiersz, trzeba móc jednoznacznie go wskazać.

  • Może istnieć dwóch użytkowników o imieniu i nazwisku "Alice Adams"
  • Nie może jednak istnieć dwóch użytkowników z id = 42
  • Unikalny identyfikator nazywa się kluczem głównym

Deklarowanie klucza głównego

Kolumnę oznacza się jako klucz główny podczas tworzenia tabeli:

CREATE TABLE products (
  id    BIGSERIAL PRIMARY KEY,
  sku   VARCHAR(50) NOT NULL,
  name  VARCHAR(200) NOT NULL,
  price NUMERIC(10,2) NOT NULL
);

PRIMARY KEY = NOT NULL + UNIQUE

PRIMARY KEY automatycznie wymusza:

  • NOT NULL — wartości klucza głównego nie mogą być puste
  • UNIQUE — żadne dwa wiersze nie mogą mieć tej samej wartości klucza głównego

Baza danych tworzy również unikalny indeks klucza głównego, dzięki czemu wyszukiwanie po identyfikatorze jest szybkie.

Klucze zastępcze a naturalne

W przypadku klucza głównego są dwa możliwe rozwiązania:

  • Zastępczy — sztuczny identyfikator generowany przez bazę danych (BIGSERIAL, UUID). Najczęściej stosowany we współczesnych aplikacjach.
  • Naturalny — identyfikator pochodzący ze świata rzeczywistego (adres e-mail, ISBN). Ryzykowny, ponieważ adresy e-mail mogą się zmieniać.

Dobra praktyka: używać zastępczego identyfikatora i dodać ograniczenie UNIQUE dla klucza naturalnego.

BIGSERIAL: liczby całkowite zwiększane automatycznie

W PostgreSQL BIGSERIAL tworzy 64-bitową kolumnę zwiększaną automatycznie, opartą na sekwencji.

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL,
  total NUMERIC(10,2) NOT NULL
);

-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);

Klucze główne UUID

Alternatywą jest 128-bitowy identyfikator UUID, przydatny, gdy identyfikatory muszą być unikalne w wielu systemach lub generowane po stronie klienta.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE sessions (
  id    UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id BIGINT NOT NULL,
  ip    INET
);

Złożone klucze główne

Czasami naturalny identyfikator jest kombinacją kolumn:

CREATE TABLE order_items (
  order_id  BIGINT NOT NULL,
  product_id BIGINT NOT NULL,
  quantity  INT NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per order

Ograniczenia UNIQUE a klucz główny

Można zadeklarować inne kolumny jako unikalne, nie czyniąc ich kluczem głównym:

CREATE TABLE users (
  id    BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  username VARCHAR(50) UNIQUE
);

-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob');  -- ERROR

Co się dzieje przy wstawieniu duplikatu

Jeśli spróbują Państwo wstawić zduplikowany klucz główny, baza danych odrzuci całą instrukcję:

ERROR:  duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(42) already exists.

To dobrze — zapobiega niejawnemu uszkodzeniu danych.

Wyszukiwanie wierszy po kluczu głównym jest szybkie

Unikalny indeks klucza głównego zapewnia wyszukiwanie w czasie O(log n), nawet w tabelach zawierających miliardy wierszy.

-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;

Nie używaj ponownie identyfikatorów

Nawet po usunięciu wiersza NIE należy ponownie używać jego klucza głównego. Inne tabele lub systemy zewnętrzne mogą nadal się do niego odwoływać. Należy pozwolić sekwencji nadal zwiększać wartości — identyfikatory są tanie.

Podsumowanie

Klucze główne zapewniają każdemu wierszowi stabilny, unikalny identyfikator.

  • Preferuj klucze zastępcze (BIGSERIAL lub UUID)
  • Używaj UNIQUE dla kluczy naturalnych, które nie mogą się powtarzać
  • Złożone klucze główne odwzorowują regułę „ta para musi być unikalna”

Szybkie sprawdzenie

Co jest niejawnie wymuszane przez PRIMARY KEY?

Często zadawane pytania

Czy lekcja „Klucze główne i unikatowość” jest bezpłatna?

Tak — pełny tekst „Klucze główne i unikatowość” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Klucze główne i unikatowość”?

Poznaj klucze główne, klucze zastępcze i naturalne, klucze złożone oraz dowiedz się, dlaczego każdy wiersz potrzebuje wiarygodnego unikatowego identyfikatora. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Klucze główne i unikatowość”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Czym jest RDBMS i dlaczego tabele mają znaczenie
  2. Klucze główne i unikatowość
  3. NULL: trzecia wartość logiczna
  4. Przegląd typów danych: INT VARCHAR DATE BOOLEAN
← Powrót do SQL Academy