Columns
| Column | Type | Size | Nulls | Auto | Default | Children | Parents | Comments | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| user_id | uuid | 2147483647 | null |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| company_id | uuid | 2147483647 | null |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| varchar | 254 | null |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| normalized_email | varchar | 254 | null |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| password_hash | varchar | 255 | null |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| role | varchar | 20 | null |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| status | varchar | 20 | null |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| created_at | timestamptz | 35,6 | CURRENT_TIMESTAMP |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| updated_at | timestamptz | 35,6 | CURRENT_TIMESTAMP |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| version | int8 | 19 | 0 |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| display_name | varchar | 80 | '사용자'::character varying |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| phone | varchar | 30 | √ | null |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| password_changed_at | timestamptz | 35,6 | CURRENT_TIMESTAMP |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| failed_login_attempts | int4 | 10 | 0 |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| locked_until | timestamptz | 35,6 | √ | null |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| last_failed_login_at | timestamptz | 35,6 | √ | null |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| phone_ciphertext | text | 2147483647 | √ | null |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| phone_key_version | varchar | 60 | √ | null |
|
|
Indexes
| Constraint Name | Type | Sort | Column(s) |
|---|---|---|---|
| pk_user_account | Primary key | Asc | user_id |
| idx_user_account_company | Performance | Asc | company_id |
| uq_user_account_normalized_email | Must be unique | Asc | normalized_email |
| uq_user_account_user_company | Must be unique | Asc/Asc | user_id + company_id |
Check Constraints
| Constraint Name | Constraint |
|---|---|
| ck_user_account_password_hash_not_blank | ((char_length(TRIM(BOTH FROM password_hash)) > 0)) |
| ck_user_account_phone_cipher_pair | ((((phone_ciphertext IS NULL) AND (phone_key_version IS NULL)) OR ((phone_ciphertext IS NOT NULL) AND (phone_key_version IS NOT NULL)))) |
| ck_user_account_phone_single_storage | (((phone IS NULL) OR (phone_ciphertext IS NULL))) |
| ck_user_account_email_not_blank | ((char_length(TRIM(BOTH FROM email)) > 0)) |
| ck_user_account_normalized_email | (((normalized_email)::text = lower(TRIM(BOTH FROM email)))) |
| ck_user_account_normalized_email_not_blank | ((char_length(TRIM(BOTH FROM normalized_email)) > 0)) |
| ck_user_account_version | ((version >= 0)) |
| ck_user_account_failed_login_attempts | ((failed_login_attempts >= 0)) |
| ck_user_account_updated_at | ((updated_at >= created_at)) |
| ck_user_account_display_name_not_blank | ((char_length(TRIM(BOTH FROM display_name)) > 0)) |
| ck_user_account_role | (((role)::text = ANY ((ARRAY['ADMIN'::character varying, 'HR'::character varying, 'VIEWER'::character varying])::text[]))) |
| ck_user_account_status | (((status)::text = ANY ((ARRAY['ACTIVE'::character varying, 'SUSPENDED'::character varying, 'DISABLED'::character varying])::text[]))) |



