@pavel_the_man

Должен ли тип данных внешнего ключа совпадать с типом данных первичного ключа?

В первой таблице, у меня первичный ключ на поле с типом данных serial.
Во второй таблице, я хочу на одно поле повесить ссылку, но не знаю какой тип данных должен быть у этого поля: serial или integer?

Если использовать integer, то Postgres отрабатывает корректно, и это меня сбивает с толку. Я ожидал увидеть ошибку, тогда я бы сразу понял, что надо serial. А Postgres оказывается в обоих случаях даёт создать таблицы.

Собственнно, в этом и вопрос, должен ли тип данных совпадать, или можно разные.

Вообще, я в первой таблице использовал serial исключительно чтобы руками не прописывать айдишники в INSERT INTO. На сколько это было правильное решение? Может стоило в первую таблицу поставить тип данных integer?
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
serial - это и есть integer, а типа данных serial вообще не существует. Это просто синтаксический сахар вокруг неявного создания sequence из времён, когда GENERATED ALWAYS AS IDENTITY не было ни в стандарте ни в postgresql.

Обратно к вопросу: тип данных может не совпадать. Но обычно это ошибка схемы данных, нежели запланированное различие.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы