我正在MariaDB中创建一个表来存储“记住我” -cookie值:
CREATE TABLE u_remember_me (
u_user_common_id INT UNSIGNED NOT NULL,
lookup_key VARCHAR(30) NOT NULL,
token_hash VARCHAR(30) NOT NULL,
created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX (u_user_common_id),
FOREIGN KEY (u_user_common_id) REFERENCES u_user_common (id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (lookup_key),
UNIQUE KEY (lookup_key, token_hash)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci ENGINE InnoDB;
我总是要通过lookup_key字段进行查找,因此选择了它作为主键(随机字符串)。不能将u_user_common_id列设置为主键,因为由于多个浏览器或计算机,一个用户可以分配多个(lookup_key,token_hash)。对于主键(性能,插入等),lookup_key是一个错误的选择吗?另外,是否应该将主键设置为(lookup_key,token_hash)并删除UNIQUE约束?我之所以选择不具有代理键,是因为它永远不会被使用,但是我不确定这是否是一个好的决定(无论如何我都需要对lookup_key进行索引)。
最佳答案
我认为您还没有弄清楚什么取决于什么。lookup_key
(随机字符串)是否与单个用户关联?如果是这样,请PRIMARY KEY(lookup_key)
并删除token_hash。
如果用户可以从不同的浏览器进行连接,并且您希望发生一些不同的事情,那么您尚未指定任何不同的数据。
关于mysql - 记住我表索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52410343/