2016-03-15 90 views
1

出於安全原因,我使用MD5編碼的隨機字符串(由PHP)作爲數據庫中的句柄,因此HTML表單字段不易被破壞(auto_increment隱藏的輸入值或URL可以簡單地手動遞增)。表也​​有,我用純粹爲了表連接ID字段,所以表看起來有點像這樣:哪個標識字段在MySQL數據庫中用作主鍵?

CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`handle` varchar(32) NOT NULL, 
`email` varchar(100) NOT NULL, 
`password` varchar(100) NOT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `email` (`email`), 
UNIQUE KEY `handle` (`handle`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 
  1. 這是一個合適的解決方案?
  2. 在牢記手柄領域的客戶端安全功能和ID場的內部數據庫功能,這些是最適合成爲主要指標,它應該是唯一的(指數)?

回答

0

從MySQL手冊:

一個表的主鍵代表列或一組您在最重要的查詢中使用的列。它有一個關聯索引,用於快速查詢性能。查詢性能受益於NOT NULL優化,因爲它不能包含任何NULL值。藉助InnoDB存儲引擎,表格數據在物理上組織成可以基於主鍵列或多列進行超快速查找和排序。

如果您的表格很重要,但沒有明顯的列或一組列作爲主鍵,那麼您可以創建一個帶有自動增量值的單獨列作爲主鍵。當您使用外鍵連接表時,這些唯一ID可用作指向其他表中相應行的指針。

https://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html

從你說的話自然的候選人是在表的主是將用於內部連接的ID。您的聲明正確地使其他鍵。