# DB Schema(現行) ## 真實來源 - `backend/scripts/init_schema.sql` - 線上增量:`backend/scripts/migrate_add_users_username.sql` - 欄位重命名增量:`backend/scripts/migrate_rename_identity_columns.sql` ## 主要表 - `users` - `user_sub` UNIQUE - `idp_user_id` VARCHAR(128) - `username` UNIQUE - `email` UNIQUE - `display_name` - `is_active`, `status`, timestamps - `companies` - `sites`(`company_id -> companies.id`) - `systems` - `modules`(`system_key -> systems.system_key`) - `permission_groups` - `permission_group_members`(group + user_sub) - `permission_group_permissions`(group + site/system/module/action) - `user_scope_permissions`(相容保留) - `api_clients`(保留給機器對機器用途) ## 權限規則 - `scope_type='site'` - `action in ('view','edit')` ## 會員與 IdP 對齊(Keycloak 優先) - `users.user_sub` 對應 IdP 主體識別 - `users.username` 對應 IdP `username` - `users.display_name` 對應 IdP 顯示名稱 ## 快速檢查 SQL ```sql SELECT column_name, data_type FROM information_schema.columns WHERE table_name='users' ORDER BY ordinal_position; SELECT COUNT(*) FROM users WHERE username IS NULL; ```