É possível criar uma chave estrangeira a partir de uma tabela que tenha uma chave primária comporta? PostgreSQL

Possuo duas tabelas:

create table comunicacao(
	item_fk bigint not null,
	usuario_fk bigint not null,
	primary key (item_fk, usuario_fk)
);

create table mensagem(
	id bigserial not null,
	texto text,
	data_hora timestamp not null,
	comunicacao_fk bigint not null,
	usuario_fk bigint not null,
	primary key(id)
);

Como adicionar uma chave estrangeira na tabela mensagem, a partir da chave primária de comunicação?

Sim, vc só precisa referenciar os dois campos…
Sua tabela mensagem ficaria algo assim:

create table mensagem(
...outras colunas
item_fk bigint not null,
usuario_fk bigint not null,
...
primary key(id),
constraint <nome da fk> foreign key (item_fk, usuario_fk) references comunicacao(item_fk, usuario_fk)
);

Detalhe: eu nunca fui com a cara de chave primárias compostas e dou sempre preferência a um id único. Até agora não me causou problemas.

1 curtida