-- user_identity stores the linkage between an external identity subject and a local user. -- (provider, extern_uid) is unique across the table; provider stores the idp.uid. -- Each local user can link at most one external account per provider. CREATE TABLE `user_identity` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `user_id` INT NOT NULL, `provider` VARCHAR(256) NOT NULL, `extern_uid` VARCHAR(256) NOT NULL, `created_ts` BIGINT NOT NULL DEFAULT (UNIX_TIMESTAMP()), `updated_ts` BIGINT NOT NULL DEFAULT (UNIX_TIMESTAMP()), UNIQUE (`provider`, `extern_uid`), UNIQUE (`user_id`, `provider`) ); CREATE INDEX `idx_user_identity_user_id` ON `user_identity`(`user_id`);