Задать вопрос
@pavel_the_man

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

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

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

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

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

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

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

Похожие вопросы