#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
.
Для новых приложений вместо этого следует использовать столбцы идентификаторов.
Почему не последовательный?
Последовательные типы имеют некоторые странные особенности поведения, которые делают управление схемой, зависимостями и разрешениями излишне громоздким.
Наконец, столбцы идентификаторов соответствуют стандарту SQL, в то время serial
как это диалект PostgreSQL.