Запомнить меня таблицы индексов - PullRequest
0 голосов
/ 19 сентября 2018

Я создаю таблицу в MariaDB для хранения значений «запомнить меня»:

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 для индексирования).

1 Ответ

0 голосов
/ 30 сентября 2018

Я думаю, вы не выяснили, что зависит от чего.

Связана ли lookup_key (произвольная строка) с одним пользователем?Если это так, PRIMARY KEY(lookup_key) и избавьтесь от token_hash.

Если пользователь может подключаться из разных браузеров и , вы хотите, чтобы произошло что-то другое, то вы не указали никаких данных, которые будутотличается.

...