我是否需要具有Oracle标识列的主键?

时间:2016-09-13 15:19:22

标签: oracle oracle12c

我使用的是Oracle 12c,我将IDENTITY列设置为GENERATED ALWAYS

CREATE TABLE Customers
(
   id            NUMBER GENERATED ALWAYS AS IDENTITY,
   customerName  VARCHAR2(30) NULL,

   CONSTRAINT "CUSTOMER_ID_PK" PRIMARY KEY ("ID")
);

由于ID自动来自序列,因此它将始终是唯一的。

我是否需要在ID列上使用PK,如果是,它是否会影响性能? 索引是否会在INSERT上产生相同的结果且效果更好?

2 个答案:

答案 0 :(得分:2)

是的,你总是应该在ID列上有一个唯一性约束(极少数例外),如果确实它(并且应该是)唯一的,无论它的填充方法是什么 - 值是否由你的应用程序提供代码或通过IDENTITY列。

答案 1 :(得分:1)

不,您不一定需要主键,但应该始终为优化程序提供尽可能多的有关数据的信息 - 包括唯一的尽可能限制。

对于代理键(例如您的ID),将其声明为主键几乎总是合适的,因为它最有可能成为引用约束的候选者。

可以ID上使用普通索引,并且查找的性能可以根据数据量进行比较 - 但在这种情况下使用非唯一索引而不是唯一索引 - 在这种情况下没有充分理由避免需要索引的约束。