Derby

PK 不是自動成為正確的唯一索引鍵嗎

  • December 28, 2021

我正在為我的 Java EE 應用程序檢查 Apache Derby 的一些新特性。IntelliJ 為創建簡單的 DB 模式提供了有用的快捷方式。點擊幾下後,我有

create table "Names"
(
   id int generated always as identity
       constraint NAMES_PK
           primary key
);

對我來說,這應該為 PK 創建一個適當的查找表、散列或映射。

如果我添加 PK 需要唯一的標準(?)

create unique index NAMES_ID_UINDEX
on "Names" (id);

所以我的問題是,這會改變 PK 查找的實現方式嗎?文件對此並不清楚。這是德比 10.15.2.0。

我無法解析您的問題,但我會盡力回答。

PK 不是自動成為正確的唯一索引鍵嗎

您在一個句子中將數據庫模型的邏輯和物理方面混為一談。根據定義,主鍵唯一標識關係中的行——但這是一個邏輯結構。根據特定的 DBMS,PK 可能是純粹的聲明性的,因此引擎不會以任何方式強制執行,或者它可以由強制執行其屬性(沒有空值和唯一性)的東西支持,例如NOT NULL約束和唯一指數。後者是德比的情況,文件似乎對此很清楚:

UNIQUE、PRIMARY KEY 和 FOREIGN KEY 約束生成強製或“支持”約束的索引(有時稱為支持索引)。UNIQUE 和 PRIMARY KEY 約束生成唯一索引。

因此,單獨創建唯一索引是多餘的。某些 DBMS,但不是 Derby,甚至會阻止您創建與現有索引具有相同列列表的索引。

做這個

$$ adding a unique index on the primary key column $$更改 PK 查找的實現方式?

不會。您將擁有兩個相同的索引,優化器將在適當的時候選擇其中一個,並且效果相同。

引用自:https://dba.stackexchange.com/questions/305428