Configurando chave estrangeira com diferentes tipos de dados

Se eu criar duas tabelas e desejar definir uma coluna como chave estrangeira para outra coluna da tabelapor que diabos posso definir o tipo de dados da coluna de chave estrangeira?

Isso simplesmente não faz sentido ou estou perdendo alguma coisa? Existe algum cenário em que a coluna com chaves estrangeiras possui tipos de dados diferentes de propósito?

Um pouco mais profundo sobre minhas preocupações, tentei usar o pgadmin para criar um banco de dados simples do Postgres. Eu fiz a primeira tabela com chave primáriaserial tipo de dados. Então eu tentei criar chave estrangeira, mas que tipo de dados? Eu vi em algum lugarserial ébigint unsigned. Mas essa opção nem existe no pgadmin. Claro que eu poderia usar o sql, mas por que estou usando o gui? Então, tentei o Navicat, o mesmo problema. Sinto que, a cada escolha, cometo outro erro no meu design de banco de dados ...

EDITAR:

Talvez eu tenha feito a pergunta de maneira errada. Eu estava autorizado a fazer estrutura de construção:

CREATE TABLE user
(
  id bigint NOT NULL,
  CONSTRAINT user_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

CREATE TABLE book
(
  user integer,
  CONSTRAINT dependent_user_fkey FOREIGN KEY (user)
      REFERENCES user (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);

Eu insiro alguns dados no usuário da tabela:

INSERT INTO user(id)
    VALUES (5000000000);

Mas não consigo transmitir a seguinte inserção:

INSERT INTO book(user)
    VALUES (5000000000);

comERROR: integer out of range o que é compreensível, mas é óbvio erro de design.

E minha pergunta é: Por que quando montamosCONSTRAINT, os tipos de dados não estão sendo validados. Se eu estiver errado, a resposta deve conter um cenário em que é útil ter tipos de dados diferentes.

questionAnswers(1)

yourAnswerToTheQuestion