36 lines
1.6 KiB
SQL
36 lines
1.6 KiB
SQL
-- 修正認證系統架構
|
||
-- 方案 A: 保留 dt_users 的 username 和 display_name,都使用 API 回傳的 name (姓名+email)
|
||
-- 使用 email 作為主要唯一識別碼,sys_user 表專門記錄登入資訊
|
||
-- Created: 2025-10-01
|
||
|
||
-- 1. 確保 dt_users 表的 email 唯一約束
|
||
-- 先檢查是否有重複的 email,如果有則需要手動處理
|
||
-- 因為有外鍵約束,不能直接刪除
|
||
-- 先顯示重複的 email 記錄讓管理員確認
|
||
-- SELECT email, COUNT(*) as count FROM dt_users GROUP BY email HAVING COUNT(*) > 1;
|
||
|
||
-- 添加 email 唯一約束
|
||
ALTER TABLE dt_users
|
||
ADD CONSTRAINT uk_dt_users_email UNIQUE (email);
|
||
|
||
-- 2. 調整現有欄位註解,說明新的使用方式
|
||
ALTER TABLE dt_users
|
||
MODIFY COLUMN username VARCHAR(255) NOT NULL COMMENT 'API name (姓名+email格式)',
|
||
MODIFY COLUMN email VARCHAR(255) NOT NULL COMMENT '電子郵件 (主要識別鍵)';
|
||
|
||
-- 3. 保持 sys_user 表結構,但調整為專門記錄登入資訊
|
||
-- sys_user 表通過 email 與 dt_users 關聯
|
||
-- (保留現有的 sys_user 表,因為它是專門用於登入記錄)
|
||
|
||
-- 4. 重新命名 login_logs 為 dt_login_logs (配合專案命名規則)
|
||
RENAME TABLE login_logs TO dt_login_logs;
|
||
|
||
-- 5. 更新 dt_login_logs 表結構 (配合 dt_users 的主鍵)
|
||
ALTER TABLE dt_login_logs
|
||
ADD COLUMN user_id INT COMMENT '關聯到 dt_users.id',
|
||
ADD INDEX idx_user_id (user_id),
|
||
ADD FOREIGN KEY fk_dt_login_logs_user_id (user_id) REFERENCES dt_users(id) ON DELETE SET NULL;
|
||
|
||
-- 6. 建立使用者識別索引 (支援 email 和 username 快速查詢)
|
||
ALTER TABLE dt_users
|
||
ADD INDEX idx_username_email (username, email); |