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.