Eu tenho uma tabela de pesquisa que possui uma chave primária PK_ID gerada e também possui chaves primárias de três ou quatro outras tabelas na coluna FK_ID
CREATE TABLE METADATA
(
PK_ID NUMBER(10) NOT NULL,
OBJ_OWNER VARCHAR2(35 BYTE) NOT NULL,
OBJ_PACKAGE VARCHAR2(35 BYTE),
OBJ_NAME VARCHAR2(35 BYTE) NOT NULL,
OBJ_TYPE NUMBER(10) NOT NULL,
FK_ID NUMBER(10) NOT NULL
);
Por exemplo, quando OBJ_TYPE = 1, cada FK_ID deve ser exclusivo para esse valor de OBJ_TYPE.
Acho que posso fazer isso com um índice baseado em função, mas o link para a discussão de Tom Kyte sobre isso está quebrado em alguns sites e não tenho certeza de como.
(Oráculo 9.2.0.8)
Um índice composto fará o trabalho. Um bônus seria se um índice baseado em função pudesse ser usado como uma chave estrangeira para as outras tabelas. Isso é possível?
Não tenho certeza se entendi o que você quer dizer com "todos
FK_ID
devem ser exclusivos para esse valor deOBJ_TYPE
".Se você está tentando dizer que cada um
FK_ID
deve ser único dentro de cadaOBJ_TYPE
, parece que você deseja apenas um índice composto em (OBJ_TYPE
,FK_ID
).Se, por outro lado, você está tentando dizer que if
OBJ_TYPE
= 1, então deve ser único, mas você pode ter valoresFK_ID
duplicados se for outra coisa, então você deseja um índice exclusivo baseado em função.FK_ID
OBJ_TYPE