2011-05-25 91 views
1

在Symfony2的文檔「如何使用PdoSessionStorage存儲會話在數據庫」,這表明這樣的會話表:主鍵的UNIQUE KEY約束是什麼意思?

CREATE TABLE `session` (
    `session_id` varchar(255) NOT NULL, 
    `session_value` text NOT NULL, 
    `session_time` int(11) NOT NULL, 
    PRIMARY KEY (`session_id`), 
    UNIQUE KEY `session_id_idx` (`session_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

爲什麼需要主鍵唯一鍵約束?

回答

6

主鍵在定義上是一個唯一的鍵。在這個例子中,它只是一個重複的不必要的密鑰。

在其他情況下,如果主鍵可能是複合的(由兩個或多個字段組成),則此類二級索引將允許單獨處理主鍵的各個組件。

例如:

create table X { 
    a char, 
    b char, 
    primary key (a,b) 
} 

,你做WHERE b=something查詢時,不會使用主鍵索引,因爲B的索引條目被綁定到「A」,和你沒有使用「A」在查詢中。添加一個專用於B的次級索引可以使索引用於此where子句。

+0

+1用於顯示組合主鍵的示例,並分別提及索引組件列。 – 2011-05-25 02:54:03

+0

所以,當主鍵是單一的,沒有必要爲主鍵定義唯一的鍵,不是嗎? – xdazz 2011-05-25 02:58:05

+0

@xdazz:是的,確切的。主鍵是自動定義的唯一鍵,因此在主鍵定義之上添加第二個唯一鍵只是浪費資源 – 2011-05-25 14:13:25

2

主鍵必須是唯一的定義。 (與RDBMS無關)

主鍵是唯一指定行的列組合。