我是否需要包含Oracle标识列的主键?

我是否需要包含Oracle标识列的主键?,oracle,oracle12c,Oracle,Oracle12c,我使用的是Oracle 12c,我有一个始终生成的标识列 由于ID是自动从序列中提取的,因此它将始终是唯一的 我是否需要ID列上的PK,如果需要,是否会影响性能? 索引是否会产生相同的结果并在插入时具有更好的性能?是的,如果ID列确实是唯一的,并且应该是唯一的,则始终应该具有唯一性约束,ID列上很少有例外,无论填充的方法是什么-值是由应用程序代码提供的还是通过标识列提供的。是的,如果ID列确实是且应该是唯一的,则应该始终具有唯一性约束,很少有例外,无论填充数据的方法是什么—无论该值是由应用程序代

我使用的是Oracle 12c,我有一个始终生成的标识列

由于ID是自动从序列中提取的,因此它将始终是唯一的

我是否需要ID列上的PK,如果需要,是否会影响性能?
索引是否会产生相同的结果并在插入时具有更好的性能?

是的,如果ID列确实是唯一的,并且应该是唯一的,则始终应该具有唯一性约束,ID列上很少有例外,无论填充的方法是什么-值是由应用程序代码提供的还是通过标识列提供的。

是的,如果ID列确实是且应该是唯一的,则应该始终具有唯一性约束,很少有例外,无论填充数据的方法是什么—无论该值是由应用程序代码还是通过标识列提供。

否,您不必使用主键,但应始终向优化人员提供尽可能多的数据信息—尽可能包括唯一约束

对于像您的ID这样的代理键,将其声明为主键几乎总是合适的,因为它是引用约束的最可能候选项

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

no,你不一定需要一个主键,但你应该总是向优化者提供尽可能多的关于你的数据的信息——包括一个唯一的约束条件

对于像您的ID这样的代理键,将其声明为主键几乎总是合适的,因为它是引用约束的最可能候选项


您可以在ID上使用普通索引,根据数据量的不同,查找的性能也会有可比性-但在这种情况下,实际上没有充分的理由使用非唯一索引而不是唯一索引-在这种情况下,也没有充分的理由避免约束,因为约束无论如何都需要索引。

实际上,无法插入到生成的始终标识列中。但是,您关于唯一性约束的观点是正确的。@jefry您没有理解我的观点。意思是说pk列不需要标识,你可以插入键值。没问题,我编辑了它以使你的意思更清楚。实际上,你不能插入生成的始终标识列。但是,您关于唯一性约束的观点是正确的。@jefry您没有理解我的观点。意思是说,pk列不需要标识,您可以插入键值。如果没有问题,我已经对其进行了编辑,以使您的意思更清楚。
CREATE TABLE Customers
(
   id            NUMBER GENERATED ALWAYS AS IDENTITY,
   customerName  VARCHAR2(30) NULL,

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