W przypadku relacyjnej bazy danych, takiej jak PostgreSQL, może to być powszechnie uważane za grzech wśród programistów nie aby dołączyć klucz podstawowy do każdej tabeli. Dlatego ważne jest, abyś dołożył wszelkich starań, aby dodać tę najważniejszą kolumnę klucza podstawowego do każdej tabeli i na szczęście Postgres zapewnia dwie metody wykonania tego zadania.
Korzystanie z typu danych szeregowych
Zdecydowanie najprostszą i najczęstszą techniką dodawania klucza podstawowego w Postgresie jest użycie SERIAL
lub BIGSERIAL
typy danych podczas CREATING
nowy stół. Jak wskazano w oficjalnej dokumentacji, SERIAL
nie jest prawdziwym typem danych, ale jest po prostu skróconą notacją, która mówi Postgresowi, aby utworzył automatycznie zwiększany, unikalny identyfikator dla określonej kolumny.
Poniżej stworzymy nasze proste books
tabela z odpowiednim SERIAL
typ danych dla klucza podstawowego.
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100) NULL
);
Po prostu ustawiając nasz id
kolumna jako SERIAL
z PRIMARY KEY
w załączeniu, Postgres poradzi sobie ze wszystkimi skomplikowanymi zakulisowymi pracami i automatycznie zwiększy nasz id
kolumna z unikalną wartością klucza podstawowego dla każdego INSERT
.
Korzystanie z niestandardowej sekwencji
W niektórych rzadkich przypadkach standardowa natura przyrostowa wbudowana w SERIAL
i BIGSERIAL
typy danych mogą nie odpowiadać Twoim potrzebom. W takich przypadkach możesz wykonać tę samą funkcję automatycznego zwiększania klucza podstawowego dla swojej kolumny, tworząc niestandardową SEQUENCE
, podobnie do metody stosowanej w starszej wersji Oracle.
Być może szczególnie lubimy liczby parzyste, ale mamy też silną niechęć do wszystkiego, co jest mniejsze niż 100, więc chcemy, aby nasz klucz podstawowy był zwiększany o dwa, zaczynając od 100 dla każdej wstawki. Można to osiągnąć za pomocą niestandardowej SEQUENCE
tak:
CREATE SEQUENCE books_sequence
start 2
increment 2;
Teraz, gdy INSERT
nowy rekord w naszych books
tabeli, musimy obliczyć następną wartość naszej sekwencji za pomocą nextval('books_sequence')
i użyj go jako naszego id
.
INSERT INTO books
(id, title, primary_author)
VALUES
(nextval('books_sequence'), 'The Hobbit', 'Tolkien');
SEQUENCES
może być jeszcze bardziej urozmaicony w razie potrzeby, z opcjami takimi jak minvalue
i maxvalue
oczywiście wskazywać wartości ekstremalne, a nawet CYCLE
, co pozwala sekwencji „zapętlać się” po osiągnięciu maxvalue
, wracając do start
wartość i rozpoczęcie wspinaczki od nowa. Znacznie więcej informacji można znaleźć w oficjalnej dokumentacji.