Claro que você pode fazer isso, por exemplo, para impor que apenas uma subtabela possa fazer referência a uma determinada linha:
CREATE TABLE Super_Table (
super_id SERIAL PRIMARY KEY,
sub_type CHAR(1) NOT NULL,
UNIQUE KEY (super_id, sub_type)
);
CREATE TABLE Sub_Table_A (
super_id PRIMARY KEY,
sub_type CHAR(1) NOT NULL,
CHECK (sub_type = 'A'),
FOREIGN KEY (super_id, sub_type) REFERENCES Super_Table (super_id, sub_type)
);
CREATE TABLE Sub_Table_B (
super_id PRIMARY KEY,
sub_type CHAR(1) NOT NULL,
CHECK (sub_type = 'B'),
FOREIGN KEY (super_id, sub_type) REFERENCES Super_Table (super_id, sub_type)
);
Agora não há como uma linha em Super_Table ser referenciada por uma linha em ambas as subtabelas. A linha em Super_Table deve ter 'A' ou 'B' e, portanto, apenas uma das subtabelas pode satisfazer a referência de chave estrangeira.
Re seu comentário:
Meu entendimento é que a implementação atual do PostgreSQL de INHERITS permite uma série de anomalias relacionadas a índices, restrições exclusivas e restrições de chave estrangeira. Usar esse recurso é complicado e propenso a erros.
Basicamente, como os índices existem apenas em uma única tabela, se você tiver uma restrição exclusiva em sua tabela pai, como ela pode impor essa exclusividade sobre o pai e todos os seus filhos? Os filhos podem inserir valores em suas tabelas que já existem no pai, ou o pai pode inserir um valor que já existe em um dos filhos.
Da mesma forma, as chaves estrangeiras não podem referenciar a tabela pai e/ou seus filhos porque é ambíguo qual linha é referenciada se várias linhas podem existir em pai/filho com a mesma chave primária ou valor exclusivo.
Estas são limitações conhecidas e não resolvidas de INHERITS no PostgreSQL. O design que mostrei acima resolve o problema da chave primária, mas não das chaves secundárias exclusivas.
http://archives.postgresql.org/pgsql-hackers/2010 -05/msg00285.php