我有一个搜索表,它有一个生成的主键 PK_ID,并且在 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
);
例如,当 OBJ_TYPE = 1 时,对于 OBJ_TYPE 的值,每个 FK_ID 都应该是唯一的。
我想我可以使用基于函数的索引来做到这一点,但是 Tom Kyte 对此讨论的链接在一些网站上被破坏了,我不确定如何。
(甲骨文 9.2.0.8)
复合索引将完成这项工作。如果可以将基于函数的索引用作其他表的外键,那将是一个好处。这可能吗?
我不完全确定我理解你所说的“每个人都
FK_ID
应该是独一无二的OBJ_TYPE
”。如果您要说每个
FK_ID
必须在每个 中都是唯一的OBJ_TYPE
,那么听起来您只需要 (OBJ_TYPE
,FK_ID
) 上的复合索引。另一方面,如果您试图说 if
OBJ_TYPE
= 1 thenFK_ID
必须是唯一的,但FK_ID
如果是别的东西,您可以有重复的值OBJ_TYPE
,那么您需要一个基于函数的唯一索引。