3.6 KiB
3.6 KiB
DB Schema(新架構目標版)
本文件是新架構的目標資料模型,供後端 schema 重建與 migration 依據。 DB 真實來源仍以 backend/scripts/init_schema.sql 為準。
1) companies
idUUID PK defaultgen_random_uuid()company_keyTEXT NOT NULL UNIQUEdisplay_nameTEXT NOT NULLlegal_nameTEXTprovider_group_idTEXTstatusVARCHAR(16) NOT NULL default'active'created_atTIMESTAMPTZ NOT NULL defaultnow()updated_atTIMESTAMPTZ NOT NULL defaultnow()
2) sites
idUUID PK defaultgen_random_uuid()site_keyTEXT NOT NULL UNIQUEcompany_idUUID NOT NULL FK ->companies(id)ON DELETE CASCADEdisplay_nameTEXT NOT NULLdomainTEXTprovider_group_idTEXTstatusVARCHAR(16) NOT NULL default'active'created_atTIMESTAMPTZ NOT NULL defaultnow()updated_atTIMESTAMPTZ NOT NULL defaultnow()
3) systems
idUUID PK defaultgen_random_uuid()system_keyTEXT NOT NULL UNIQUEnameTEXT NOT NULLprovider_client_idTEXT NOT NULL UNIQUEstatusVARCHAR(16) NOT NULL default'active'created_atTIMESTAMPTZ NOT NULL defaultnow()updated_atTIMESTAMPTZ NOT NULL defaultnow()
4) roles
idUUID PK defaultgen_random_uuid()role_keyTEXT NOT NULL UNIQUEsystem_idUUID NOT NULL FK ->systems(id)ON DELETE CASCADEnameTEXT NOT NULLdescriptionTEXTprovider_role_nameTEXT NOT NULLstatusVARCHAR(16) NOT NULL default'active'created_atTIMESTAMPTZ NOT NULL defaultnow()updated_atTIMESTAMPTZ NOT NULL defaultnow()- UNIQUE(
system_id,provider_role_name)
5) site_roles
idUUID PK defaultgen_random_uuid()site_idUUID NOT NULL FK ->sites(id)ON DELETE CASCADErole_idUUID NOT NULL FK ->roles(id)ON DELETE CASCADEcreated_atTIMESTAMPTZ NOT NULL defaultnow()- UNIQUE(
site_id,role_id)
6) users
idUUID PK defaultgen_random_uuid()user_subTEXT NOT NULL UNIQUEprovider_user_idTEXT UNIQUEusernameTEXT UNIQUEemailTEXT UNIQUEdisplay_nameTEXTstatusVARCHAR(16) NOT NULL default'active'is_activeBOOLEAN NOT NULL defaulttruecreated_atTIMESTAMPTZ NOT NULL defaultnow()updated_atTIMESTAMPTZ NOT NULL defaultnow()
7) user_sites
idUUID PK defaultgen_random_uuid()user_idUUID NOT NULL FK ->users(id)ON DELETE CASCADEsite_idUUID NOT NULL FK ->sites(id)ON DELETE CASCADEcreated_atTIMESTAMPTZ NOT NULL defaultnow()updated_atTIMESTAMPTZ NOT NULL defaultnow()- UNIQUE(
user_id,site_id)
8) auth_sync_state
idUUID PK defaultgen_random_uuid()entity_typeVARCHAR(32) NOT NULLentity_idUUID NOT NULLlast_synced_atTIMESTAMPTZsource_versionTEXTlast_errorTEXTupdated_atTIMESTAMPTZ NOT NULL defaultnow()- UNIQUE(
entity_type,entity_id)
9) api_clients
idUUID PK defaultgen_random_uuid()client_keyTEXT NOT NULL UNIQUEnameTEXT NOT NULLstatusVARCHAR(16) NOT NULL default'active'api_key_hashTEXT NOT NULLallowed_originsJSONB NOT NULL default'[]'::jsonballowed_ipsJSONB NOT NULL default'[]'::jsonballowed_pathsJSONB NOT NULL default'[]'::jsonbrate_limit_per_minINTEGERexpires_atTIMESTAMPTZlast_used_atTIMESTAMPTZcreated_atTIMESTAMPTZ NOT NULL defaultnow()updated_atTIMESTAMPTZ NOT NULL defaultnow()
關聯總結
- Company 1:N Site
- System 1:N Role
- Site M:N Role(
site_roles) - User M:N Site(
user_sites) - User 最終角色由 Site 推導,不做 user direct role 指派。