-- +goose Up CREATE TABLE IF NOT EXISTS user_roles ( id BINARY(16) NOT NULL, user_id BINARY(16) NOT NULL, role_id BINARY(16) NOT NULL, created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), created_by BINARY(16) NULL, updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), updated_by BINARY(16) NULL, PRIMARY KEY (id), UNIQUE KEY ux_user_role (user_id, role_id), KEY idx_user_roles_user_id (user_id), KEY idx_user_roles_role_id (role_id), CONSTRAINT fk_user_roles_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_user_roles_role FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO user_roles (id, user_id, role_id, created_at, updated_at) SELECT UNHEX(REPLACE(UUID(), '-', '')), users.id, users.role_id, CURRENT_TIMESTAMP(6), CURRENT_TIMESTAMP(6) FROM users WHERE users.role_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM user_roles WHERE user_roles.user_id = users.id AND user_roles.role_id = users.role_id ); -- +goose Down DROP TABLE IF EXISTS user_roles;