Лучше использовать ПОСЛЕДОВАТЕЛЬНЫЙ ПЕРВИЧНЫЙ КЛЮЧ или ВСЕГДА ГЕНЕРИРОВАТЬСЯ КАК ИДЕНТИФИКАТОР для первичного ключа в PostgreSQL

#postgresql #primary-key #identity-column

#postgresql #первичный ключ #идентификатор-столбец

Вопрос:

Не уверен, какой вариант является последней передовой практикой? Я читал в этом руководстве, что:

https://www.postgresqltutorial.com/postgresql-identity-column/

В PostgreSQL версии 10 введено новое ограничение, ГЕНЕРИРУЕМОЕ КАК ИДЕНТИФИКАТОР, которое позволяет автоматически присваивать столбцу уникальный номер.

Ограничение GENERATED AS IDENTITY — это соответствующий стандарту SQL вариант старого доброго столбца SERIAL .

В примере они используют идентификатор в качестве первичного ключа:

 CREATE TABLE color (
    color_id INT GENERATED ALWAYS AS IDENTITY,
    color_name VARCHAR NOT NULL
);
  

Когда вы ссылаетесь на эту таблицу для ВНЕШНЕГО КЛЮЧА, как указано ниже:

 CREATE TABLE pallet (
    id INT GENERATED ALWAYS AS IDENTITY,
    color_1 REFERENCES color
    color_2 REFERENCES color
);
  

Будет ли он знать, что идентификатор является первичным ключом сейчас?:

Ответ №1:

Будет ли он знать, что идентификатор является первичным ключом сейчас?

Нет (и ни один serial из них этого не сделает).

Вам необходимо явно определить первичный ключ:

 CREATE TABLE color (
    color_id INT  primary key GENERATED ALWAYS AS IDENTITY,
    color_name VARCHAR NOT NULL
);
  

Не уверен, какой вариант является последней передовой практикой?

Рекомендуется использовать identity вместо serial .

Цитата из Postgres Wiki

Для новых приложений вместо этого следует использовать столбцы идентификаторов.

Почему не последовательный?
Последовательные типы имеют некоторые странные особенности поведения, которые делают управление схемой, зависимостями и разрешениями излишне громоздким.

Наконец, столбцы идентификаторов соответствуют стандарту SQL, в то время serial как это диалект PostgreSQL.