Entity Relationship Diagram (ERD)
ระบบผู้ดูแลระบบ (System Administrator Management System)
โรงพยาบาลค่ายธนรัชน์
เอกสารเลขที่: SRS-1.2.21-ERD
เวอร์ชัน: 1.0
วันที่: 7 ตุลาคม 2568
ผู้จัดทำ: ทีมพัฒนาระบบ
ผู้อนุมัติ: ผู้อำนวยการโรงพยาบาลค่ายธนรัชน์
การปรับปรุง: ใหม่ - เน้น Identity and Access Management ตามแนวทาง AWS IAM
ภาพรวม Entity Relationship Diagram
เอกสารนี้แสดง ERD สำหรับระบบผู้ดูแลระบบ ที่ออกแบบตามแนวทาง AWS IAM (Identity and Access Management) เพื่อให้มีความปลอดภัยสูงและสามารถจัดการสิทธิ์การเข้าถึงได้อย่างละเอียดและยืดหยุ่น
การจัดกลุ่มตาราง (Table Categories)
🎨 คำอธิบายสีในแผนภาพ:
- 🔐 สีน้ำเงินเข้ม (Identity & Access Management): ตารางหลักสำหรับการจัดการตัวตนและการเข้าถึง
USERS,GROUPS,ROLES- การจัดการผู้ใช้งาน, กลุ่ม, และบทบาทPOLICIES,PERMISSIONS- นโยบายและสิทธิ์การเข้าถึง-
USER_SESSIONS,ACCESS_TOKENS- การจัดการเซสชันและ Token -
🟡 สีเหลือง (System Configuration): ตารางการตั้งค่าและจัดการระบบ
SYSTEM_CONFIG,HN_VN_AN_CONFIG- การตั้งค่าระบบและหมายเลขต่างๆMASTER_DATA_CATEGORY,MASTER_DATA_ITEMS- ข้อมูลพื้นฐาน-
DATABASE_CONFIG,BACKUP_JOBS- การจัดการฐานข้อมูลและสำรองข้อมูล -
🟢 สีเขียว (Communication & Monitoring): ตารางการสื่อสารและติดตามระบบ
NEWS_ANNOUNCEMENTS,NOTIFICATIONS- ประกาศข่าวและการแจ้งเตือนUSER_ACTIVITY_LOG,ONLINE_USERS- การติดตามผู้ใช้งานและกิจกรรม-
AUDIT_TRAIL,SECURITY_EVENTS- บันทึกการตรวจสอบและเหตุการณ์ความปลอดภัย -
🟠 สีส้ม (Reporting & Analytics): ตารางการรายงานและการวิเคราะห์
REPORT_TEMPLATES,REPORT_INSTANCES- เทมเพลตและอินสแตนซ์รายงานREPORT_SCHEDULES,REPORT_CACHE- การกำหนดเวลาและแคชรายงาน-
ANALYTICS_DATA,PERFORMANCE_METRICS- ข้อมูลวิเคราะห์และประสิทธิภาพ -
🔴 สีแดง (Security & Compliance): ตารางความปลอดภัยและการปฏิบัติตามกฎระเบียบ
MFA_CREDENTIALS,PASSWORD_HISTORY- การยืนยันตัวตนและประวัติรหัสผ่านSECURITY_POLICIES,COMPLIANCE_RULES- นโยบายความปลอดภัยและกฎปฏิบัติ-
THREAT_DETECTION,INCIDENT_RESPONSE- การตรวจจับภัยคุกคามและการตอบสนอง -
🟣 สีม่วง (Integration & API): ตารางการเชื่อมโยงและ API
HIS_SYSTEMS,API_ENDPOINTS- ระบบ HIS และจุดเชื่อมต่อ APIINTEGRATION_LOGS,API_USAGE_STATS- บันทึกการเชื่อมต่อและสถิติการใช้ APIEXTERNAL_SYSTEMS,SYNC_JOBS- ระบบภายนอกและงานซิงค์ข้อมูล
1. แผนภาพแบบง่าย (Simplified Diagram)
แผนภาพนี้แสดงความสัมพันธ์ระหว่างกลุ่มตารางหลักๆ ของระบบผู้ดูแลระบบ
graph TD
subgraph "🔐 Identity & Access Management (IAM) - การจัดการตัวตนและการเข้าถึง"
U[USERS<br/>ผู้ใช้งาน]
G[GROUPS<br/>กลุ่มผู้ใช้]
R[ROLES<br/>บทบาท]
POL[POLICIES<br/>นโยบายการเข้าถึง]
PERM[PERMISSIONS<br/>สิทธิ์การเข้าถึง]
US[USER_SESSIONS<br/>เซสชันผู้ใช้]
AT[ACCESS_TOKENS<br/>โทเค็นการเข้าถึง]
end
subgraph "🟡 System Configuration - การตั้งค่าระบบ"
SC[SYSTEM_CONFIG<br/>การตั้งค่าระบบ]
HVA[HN_VN_AN_CONFIG<br/>การตั้งค่า HN/VN/AN]
MDC[MASTER_DATA_CATEGORY<br/>หมวดหมู่ข้อมูลพื้นฐาน]
MDI[MASTER_DATA_ITEMS<br/>รายการข้อมูลพื้นฐาน]
DBC[DATABASE_CONFIG<br/>การตั้งค่าฐานข้อมูล]
BJ[BACKUP_JOBS<br/>งานสำรองข้อมูล]
end
subgraph "🟢 Communication & Monitoring - การสื่อสารและติดตาม"
NA[NEWS_ANNOUNCEMENTS<br/>ประกาศข่าว]
NOT[NOTIFICATIONS<br/>การแจ้งเตือน]
UAL[USER_ACTIVITY_LOG<br/>บันทึกกิจกรรมผู้ใช้]
OU[ONLINE_USERS<br/>ผู้ใช้งานออนไลน์]
AT_LOG[AUDIT_TRAIL<br/>บันทึกการตรวจสอบ]
SE[SECURITY_EVENTS<br/>เหตุการณ์ความปลอดภัย]
end
subgraph "🟠 Reporting & Analytics - การรายงานและวิเคราะห์"
RT[REPORT_TEMPLATES<br/>เทมเพลตรายงาน]
RI[REPORT_INSTANCES<br/>อินสแตนซ์รายงาน]
RS[REPORT_SCHEDULES<br/>การกำหนดเวลารายงาน]
RC[REPORT_CACHE<br/>แคชรายงาน]
AD[ANALYTICS_DATA<br/>ข้อมูลวิเคราะห์]
PM[PERFORMANCE_METRICS<br/>ตัวชี้วัดประสิทธิภาพ]
end
subgraph "🔴 Security & Compliance - ความปลอดภัยและการปฏิบัติตาม"
MFA[MFA_CREDENTIALS<br/>ข้อมูลการยืนยันหลายปัจจัย]
PH[PASSWORD_HISTORY<br/>ประวัติรหัสผ่าน]
SP[SECURITY_POLICIES<br/>นโยบายความปลอดภัย]
CR[COMPLIANCE_RULES<br/>กฎการปฏิบัติตาม]
TD[THREAT_DETECTION<br/>การตรวจจับภัยคุกคาม]
IR[INCIDENT_RESPONSE<br/>การตอบสนองเหตุการณ์]
end
subgraph "🟣 Integration & API - การเชื่อมโยงและ API"
HIS[HIS_SYSTEMS<br/>ระบบ HIS]
AE[API_ENDPOINTS<br/>จุดเชื่อมต่อ API]
IL[INTEGRATION_LOGS<br/>บันทึกการเชื่อมต่อ]
AUS[API_USAGE_STATS<br/>สถิติการใช้ API]
ES[EXTERNAL_SYSTEMS<br/>ระบบภายนอก]
SJ[SYNC_JOBS<br/>งานซิงค์ข้อมูล]
end
%% Core Relationships - IAM
U --> G
U --> R
U --> US
US --> AT
G --> POL
R --> POL
POL --> PERM
U --> MFA
U --> PH
%% System Configuration Relationships
U --> SC
SC --> HVA
SC --> MDC
MDC --> MDI
SC --> DBC
DBC --> BJ
%% Communication & Monitoring Relationships
U --> NA
U --> NOT
U --> UAL
US --> OU
UAL --> AT_LOG
SE --> AT_LOG
%% Reporting Relationships
U --> RT
RT --> RI
RI --> RS
RI --> RC
UAL --> AD
OU --> PM
%% Security Relationships
U --> SP
SP --> CR
SE --> TD
TD --> IR
%% Integration Relationships
HIS --> AE
AE --> IL
AE --> AUS
ES --> SJ
U --> IL
%% Styling
classDef iam fill:#1e3a8a,stroke:#1e40af,stroke-width:2px,color:#ffffff
classDef config fill:#eab308,stroke:#ca8a04,stroke-width:2px,color:#000000
classDef comm fill:#16a34a,stroke:#15803d,stroke-width:2px,color:#ffffff
classDef report fill:#ea580c,stroke:#c2410c,stroke-width:2px,color:#ffffff
classDef security fill:#dc2626,stroke:#b91c1c,stroke-width:2px,color:#ffffff
classDef integration fill:#9333ea,stroke:#7c3aed,stroke-width:2px,color:#ffffff
class U,G,R,POL,PERM,US,AT iam
class SC,HVA,MDC,MDI,DBC,BJ config
class NA,NOT,UAL,OU,AT_LOG,SE comm
class RT,RI,RS,RC,AD,PM report
class MFA,PH,SP,CR,TD,IR security
class HIS,AE,IL,AUS,ES,SJ integration
2. แผนภาพ ERD แบบละเอียด (Detailed ERD)
2.1 กลุ่ม Identity & Access Management (IAM) Tables
erDiagram
USERS {
uuid user_id PK "รหัสผู้ใช้งาน"
varchar username UK "ชื่อผู้ใช้งาน (unique)"
varchar email UK "อีเมล (unique)"
varchar password_hash "รหัสผ่านที่เข้ารหัส"
varchar display_name "ชื่อที่แสดง"
varchar first_name "ชื่อจริง"
varchar last_name "นามสกุล"
varchar employee_id "รหัสพนักงาน"
varchar phone_number "เบอร์โทรศัพท์"
uuid department_id FK "แผนกงาน"
varchar position "ตำแหน่งงาน"
enum user_type "ประเภทผู้ใช้งาน (SUPER_ADMIN, SYS_ADMIN, DEPT_ADMIN, SEC_ADMIN, END_USER)"
enum status "สถานะ (ACTIVE, INACTIVE, SUSPENDED, LOCKED)"
boolean is_first_login "เข้าใช้งานครั้งแรก"
boolean force_password_change "บังคับเปลี่ยนรหัสผ่าน"
datetime last_login_at "เข้าใช้งานล่าสุด"
varchar last_login_ip "IP ที่เข้าใช้งานล่าสุด"
datetime password_changed_at "เปลี่ยนรหัสผ่านล่าสุด"
datetime expires_at "วันหมดอายุบัญชี"
varchar timezone "เขตเวลา"
varchar language "ภาษา"
json user_preferences "การตั้งค่าผู้ใช้งาน"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
GROUPS {
uuid group_id PK "รหัสกลุ่ม"
varchar group_name UK "ชื่อกลุ่ม (unique)"
varchar group_code UK "รหัสกลุ่ม (unique)"
text description "คำอธิบายกลุ่ม"
enum group_type "ประเภทกลุ่ม (MEDICAL, ADMINISTRATIVE, TECHNICAL)"
uuid parent_group_id FK "กลุ่มแม่"
varchar group_path "เส้นทางกลุ่ม"
json group_attributes "คุณลักษณะกลุ่ม"
enum status "สถานะ (ACTIVE, INACTIVE)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
ROLES {
uuid role_id PK "รหัสบทบาท"
varchar role_name UK "ชื่อบทบาท (unique)"
varchar role_code UK "รหัสบทบาท (unique)"
text description "คำอธิบายบทบาท"
enum role_type "ประเภทบทบาท (FUNCTIONAL, DEPARTMENTAL, SYSTEM)"
json role_attributes "คุณลักษณะบทบาท"
varchar trust_policy "นโยบายความเชื่อถือ (JSON)"
int max_session_duration "ระยะเวลาเซสชันสูงสุด (วินาที)"
boolean require_mfa "ต้องการ MFA"
text permission_boundary "ขอบเขตสิทธิ์"
enum status "สถานะ (ACTIVE, INACTIVE)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
POLICIES {
uuid policy_id PK "รหัสนโยบาย"
varchar policy_name UK "ชื่อนโยบาย (unique)"
varchar policy_arn UK "ARN นโยบาย (unique)"
text description "คำอธิบายนโยบาย"
enum policy_type "ประเภทนโยบาย (MANAGED, CUSTOMER_MANAGED, INLINE)"
varchar policy_version "เวอร์ชันนโยบาย"
text policy_document "เอกสารนโยบาย (JSON)"
boolean is_default_version "เป็นเวอร์ชันเริ่มต้น"
json policy_metadata "ข้อมูลเมตาดาต้า"
datetime policy_created_date "วันที่สร้างนโยบาย"
datetime policy_updated_date "วันที่แก้ไขนโยบาย"
enum status "สถานะ (ACTIVE, INACTIVE)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
PERMISSIONS {
uuid permission_id PK "รหัสสิทธิ์"
varchar permission_name UK "ชื่อสิทธิ์ (unique)"
varchar resource_type "ประเภททรัพยากร"
varchar resource_arn "ARN ทรัพยากร"
varchar action "การกระทำ"
enum effect "ผลการกระทำ (ALLOW, DENY)"
json condition "เงื่อนไข"
text description "คำอธิบายสิทธิ์"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
USER_GROUPS {
uuid user_group_id PK "รหัสการเป็นสมาชิก"
uuid user_id FK "รหัสผู้ใช้งาน"
uuid group_id FK "รหัสกลุ่ม"
datetime joined_at "วันที่เข้าร่วม"
datetime expires_at "วันหมดอายุสมาชิกภาพ"
enum membership_type "ประเภทสมาชิกภาพ (PERMANENT, TEMPORARY)"
uuid assigned_by FK "ผู้มอบหมาย"
datetime created_at "วันที่สร้าง"
}
USER_ROLES {
uuid user_role_id PK "รหัสการมีบทบาท"
uuid user_id FK "รหัสผู้ใช้งาน"
uuid role_id FK "รหัสบทบาท"
datetime assigned_at "วันที่ได้รับมอบหมาย"
datetime expires_at "วันหมดอายุบทบาท"
enum assignment_type "ประเภทการมอบหมาย (PERMANENT, TEMPORARY, ASSUMED)"
json assignment_conditions "เงื่อนไขการมอบหมาย"
uuid assigned_by FK "ผู้มอบหมาย"
datetime created_at "วันที่สร้าง"
}
GROUP_POLICIES {
uuid group_policy_id PK "รหัสนโยบายกลุ่ม"
uuid group_id FK "รหัสกลุ่ม"
uuid policy_id FK "รหัสนโยบาย"
enum attachment_type "ประเภทการแนบ (ATTACHED, INLINE)"
datetime attached_at "วันที่แนบ"
uuid attached_by FK "ผู้แนบ"
datetime created_at "วันที่สร้าง"
}
ROLE_POLICIES {
uuid role_policy_id PK "รหัสนโยบายบทบาท"
uuid role_id FK "รหัสบทบาท"
uuid policy_id FK "รหัสนโยบาย"
enum attachment_type "ประเภทการแนบ (ATTACHED, INLINE)"
datetime attached_at "วันที่แนบ"
uuid attached_by FK "ผู้แนบ"
datetime created_at "วันที่สร้าง"
}
USER_SESSIONS {
uuid session_id PK "รหัสเซสชัน"
uuid user_id FK "รหัสผู้ใช้งาน"
varchar session_token UK "โทเค็นเซสชัน (unique)"
varchar ip_address "ที่อยู่ IP"
varchar user_agent "User Agent"
varchar device_fingerprint "ลายนิ้วมืออุปกรณ์"
varchar location "ตำแหน่งที่ตั้ง"
datetime login_at "เวลาเข้าสู่ระบบ"
datetime last_activity_at "กิจกรรมล่าสุด"
datetime expires_at "เวลาหมดอายุ"
enum status "สถานะ (ACTIVE, EXPIRED, TERMINATED)"
varchar logout_reason "เหตุผลการออกจากระบบ"
json session_data "ข้อมูลเซสชัน"
decimal risk_score "คะแนนความเสี่ยง"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
ACCESS_TOKENS {
uuid token_id PK "รหัสโทเค็น"
uuid user_id FK "รหัสผู้ใช้งาน"
uuid session_id FK "รหัสเซสชัน"
varchar token_value UK "ค่าโทเค็น (unique)"
enum token_type "ประเภทโทเค็น (ACCESS, REFRESH, API_KEY)"
varchar scope "ขอบเขตการใช้งาน"
datetime issued_at "เวลาที่ออก"
datetime expires_at "เวลาหมดอายุ"
varchar issuer "ผู้ออก"
varchar audience "ผู้รับ"
boolean is_revoked "ถูกยกเลิก"
datetime revoked_at "เวลาที่ยกเลิก"
varchar revoked_reason "เหตุผลการยกเลิก"
json token_claims "ข้อมูลในโทเค็น"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
%% Relationships
USERS ||--o{ USER_GROUPS : "has memberships"
GROUPS ||--o{ USER_GROUPS : "contains users"
USERS ||--o{ USER_ROLES : "has roles"
ROLES ||--o{ USER_ROLES : "assigned to users"
GROUPS ||--o{ GROUP_POLICIES : "has policies"
POLICIES ||--o{ GROUP_POLICIES : "attached to groups"
ROLES ||--o{ ROLE_POLICIES : "has policies"
POLICIES ||--o{ ROLE_POLICIES : "attached to roles"
USERS ||--o{ USER_SESSIONS : "has sessions"
USER_SESSIONS ||--o{ ACCESS_TOKENS : "generates tokens"
USERS ||--o{ ACCESS_TOKENS : "owns tokens"
GROUPS ||--o{ GROUPS : "parent-child"
2.2 กลุ่ม System Configuration Tables
erDiagram
SYSTEM_CONFIG {
uuid config_id PK "รหัสการตั้งค่า"
varchar config_group UK "กลุ่มการตั้งค่า"
varchar config_key UK "คีย์การตั้งค่า"
text config_value "ค่าการตั้งค่า"
varchar data_type "ประเภทข้อมูล (STRING, INTEGER, BOOLEAN, JSON)"
text description "คำอธิบาย"
boolean is_system "เป็นการตั้งค่าระบบ"
boolean is_encrypted "เข้ารหัส"
boolean requires_restart "ต้องรีสตาร์ท"
varchar validation_rule "กฎการตรวจสอบ"
text default_value "ค่าเริ่มต้น"
enum status "สถานะ (ACTIVE, INACTIVE)"
datetime effective_date "วันที่มีผล"
datetime expires_at "วันหมดอายุ"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
HN_VN_AN_CONFIG {
uuid config_id PK "รหัสการตั้งค่า"
enum number_type "ประเภทหมายเลข (HN, VN, AN)"
varchar prefix "คำนำหน้า"
varchar format "รูปแบบ"
int digit_length "จำนวนหลัก"
int start_number "หมายเลขเริ่มต้น"
int current_number "หมายเลขปัจจุบัน"
boolean auto_increment "เพิ่มอัตโนมัติ"
enum reset_cycle "รอบการรีเซ็ต (NEVER, YEARLY, MONTHLY, DAILY)"
boolean use_check_digit "ใช้เลขตรวจสอบ"
varchar check_digit_algorithm "อัลกอริทึมเลขตรวจสอบ"
boolean department_specific "เฉพาะแผนก"
uuid department_id FK "รหัสแผนก"
json format_rules "กฎรูปแบบ"
enum status "สถานะ (ACTIVE, INACTIVE)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
MASTER_DATA_CATEGORY {
uuid category_id PK "รหัสหมวดหมู่"
varchar category_code UK "รหัสหมวดหมู่ (unique)"
varchar category_name "ชื่อหมวดหมู่"
text description "คำอธิบาย"
uuid parent_category_id FK "หมวดหมู่แม่"
varchar category_path "เส้นทางหมวดหมู่"
enum data_source "แหล่งข้อมูล (INTERNAL, EXTERNAL, STANDARD)"
varchar external_source "แหล่งข้อมูลภายนอก"
boolean is_system "เป็นหมวดหมู่ระบบ"
boolean is_editable "แก้ไขได้"
varchar validation_schema "สคีมาการตรวจสอบ"
json category_attributes "คุณลักษณะหมวดหมู่"
int sort_order "ลำดับการแสดง"
enum status "สถานะ (ACTIVE, INACTIVE)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
MASTER_DATA_ITEMS {
uuid item_id PK "รหัสรายการ"
uuid category_id FK "รหัสหมวดหมู่"
varchar item_code UK "รหัสรายการ (unique)"
varchar item_name "ชื่อรายการ"
varchar item_name_en "ชื่อรายการ (อังกฤษ)"
text description "คำอธิบาย"
uuid parent_item_id FK "รายการแม่"
varchar item_path "เส้นทางรายการ"
json item_attributes "คุณลักษณะรายการ"
varchar external_code "รหัสภายนอก"
varchar external_system "ระบบภายนอก"
boolean is_default "เป็นค่าเริ่มต้น"
boolean is_system "เป็นรายการระบบ"
int sort_order "ลำดับการแสดง"
datetime effective_date "วันที่มีผล"
datetime expires_at "วันหมดอายุ"
enum status "สถานะ (ACTIVE, INACTIVE, DEPRECATED)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
DATABASE_CONFIG {
uuid db_config_id PK "รหัสการตั้งค่าฐานข้อมูล"
varchar connection_name UK "ชื่อการเชื่อมต่อ (unique)"
enum db_type "ประเภทฐานข้อมูล (MYSQL, POSTGRESQL)"
varchar host "เซิร์ฟเวอร์"
int port "พอร์ต"
varchar database_name "ชื่อฐานข้อมูล"
varchar username "ชื่อผู้ใช้"
varchar password_encrypted "รหัสผ่านที่เข้ารหัส"
varchar charset "ชุดอักขระ"
varchar timezone "เขตเวลา"
int min_connections "การเชื่อมต่อขั้นต่ำ"
int max_connections "การเชื่อมต่อสูงสุด"
int connection_timeout "เวลาหมดเชื่อมต่อ"
int idle_timeout "เวลาหมดในสถานะรอ"
int max_lifetime "อายุการเชื่อมต่อสูงสุด"
json performance_settings "การตั้งค่าประสิทธิภาพ"
boolean ssl_enabled "เปิดใช้ SSL"
text ssl_config "การตั้งค่า SSL"
enum connection_pool_type "ประเภท Connection Pool"
boolean is_primary "เป็นฐานข้อมูลหลัก"
boolean is_read_only "อ่านอย่างเดียว"
enum status "สถานะ (ACTIVE, INACTIVE, MAINTENANCE)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
BACKUP_JOBS {
uuid job_id PK "รหัสงานสำรองข้อมูล"
varchar job_name UK "ชื่องาน (unique)"
text description "คำอธิบาย"
enum backup_type "ประเภทการสำรอง (FULL, INCREMENTAL, DIFFERENTIAL)"
enum backup_scope "ขอบเขตการสำรอง (DATABASE, SYSTEM, FILES)"
varchar source_path "เส้นทางต้นฉบับ"
varchar destination_path "เส้นทางปลายทาง"
varchar cron_schedule "ตารางเวลา (Cron)"
int retention_days "จำนวนวันเก็บ"
boolean compression_enabled "เปิดใช้การบีบอัด"
enum compression_level "ระดับการบีบอัด"
boolean encryption_enabled "เปิดใช้การเข้ารหัส"
varchar encryption_key "คีย์การเข้ารหัส"
int max_file_size_mb "ขนาดไฟล์สูงสุด (MB)"
json notification_settings "การตั้งค่าการแจ้งเตือน"
enum status "สถานะ (ACTIVE, INACTIVE, SUSPENDED)"
datetime last_run_at "รันล่าสุด"
datetime next_run_at "รันครั้งถัดไป"
varchar last_run_status "สถานะการรันล่าสุด"
text last_error_message "ข้อความผิดพลาดล่าสุด"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
BACKUP_HISTORY {
uuid backup_id PK "รหัสการสำรองข้อมูล"
uuid job_id FK "รหัสงานสำรองข้อมูล"
varchar backup_filename "ชื่อไฟล์สำรอง"
varchar backup_path "เส้นทางไฟล์สำรอง"
bigint file_size "ขนาดไฟล์ (ไบต์)"
varchar checksum "เช็คซัม"
datetime start_time "เวลาเริ่มต้น"
datetime end_time "เวลาสิ้นสุด"
int duration_seconds "ระยะเวลา (วินาที)"
enum status "สถานะ (SUCCESS, FAILED, PARTIAL)"
text error_message "ข้อความผิดพลาด"
json backup_metadata "ข้อมูลเมตาดาต้า"
boolean is_verified "ตรวจสอบแล้ว"
datetime verified_at "วันที่ตรวจสอบ"
enum retention_status "สถานะการเก็บ (ACTIVE, EXPIRED, ARCHIVED)"
datetime expires_at "วันหมดอายุ"
datetime created_at "วันที่สร้าง"
}
%% Relationships
MASTER_DATA_CATEGORY ||--o{ MASTER_DATA_ITEMS : "contains items"
MASTER_DATA_CATEGORY ||--o{ MASTER_DATA_CATEGORY : "parent-child"
MASTER_DATA_ITEMS ||--o{ MASTER_DATA_ITEMS : "parent-child"
DATABASE_CONFIG ||--o{ BACKUP_JOBS : "backup source"
BACKUP_JOBS ||--o{ BACKUP_HISTORY : "execution history"
2.3 กลุ่ม Communication & Monitoring Tables
erDiagram
NEWS_ANNOUNCEMENTS {
uuid announcement_id PK "รหัสประกาศ"
varchar title "หัวเรื่อง"
text content "เนื้อหา"
enum priority "ระดับความสำคัญ (LOW, NORMAL, HIGH, URGENT)"
enum type "ประเภท (NEWS, ANNOUNCEMENT, ALERT, MAINTENANCE)"
varchar category "หมวดหมู่"
json target_audience "กลุ่มเป้าหมาย"
boolean is_popup "แสดงเป็น Popup"
boolean is_email "ส่งทาง Email"
boolean is_sms "ส่งทาง SMS"
varchar attachment_url "ลิงก์เอกสารแนบ"
datetime publish_date "วันที่เผยแพร่"
datetime expires_at "วันหมดอายุ"
boolean is_published "เผยแพร่แล้ว"
int view_count "จำนวนผู้อ่าน"
enum status "สถานะ (DRAFT, PUBLISHED, EXPIRED, ARCHIVED)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
NOTIFICATIONS {
uuid notification_id PK "รหัสการแจ้งเตือน"
uuid recipient_id FK "ผู้รับ"
varchar title "หัวเรื่อง"
text message "ข้อความ"
enum type "ประเภท (INFO, WARNING, ERROR, SUCCESS)"
enum category "หมวดหมู่ (SYSTEM, MEDICAL, FINANCIAL, SECURITY)"
enum channel "ช่องทาง (WEB, EMAIL, SMS, PUSH)"
varchar source_system "ระบบต้นทาง"
varchar reference_id "รหัสอ้างอิง"
varchar reference_type "ประเภทการอ้างอิง"
json notification_data "ข้อมูลการแจ้งเตือน"
boolean is_read "อ่านแล้ว"
datetime read_at "วันที่อ่าน"
boolean is_sent "ส่งแล้ว"
datetime sent_at "วันที่ส่ง"
varchar delivery_status "สถานะการส่ง"
text delivery_error "ข้อผิดพลาดการส่ง"
int retry_count "จำนวนครั้งที่ลองส่ง"
datetime expires_at "วันหมดอายุ"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
USER_ACTIVITY_LOG {
uuid log_id PK "รหัสบันทึก"
uuid user_id FK "รหัสผู้ใช้งาน"
uuid session_id FK "รหัสเซสชัน"
varchar activity_type "ประเภทกิจกรรม"
varchar module "โมดูล"
varchar action "การกระทำ"
varchar resource_type "ประเภททรัพยากร"
varchar resource_id "รหัสทรัพยากร"
text description "คำอธิบาย"
varchar ip_address "ที่อยู่ IP"
varchar user_agent "User Agent"
varchar request_method "วิธีการร้องขอ"
varchar request_url "URL การร้องขอ"
text request_parameters "พารามิเตอร์การร้องขอ"
int response_status "สถานะการตอบกลับ"
int response_time_ms "เวลาตอบกลับ (มิลลิวินาที)"
bigint request_size "ขนาดคำร้อง (ไบต์)"
bigint response_size "ขนาดการตอบกลับ (ไบต์)"
varchar geolocation "ตำแหน่งที่ตั้ง"
varchar device_info "ข้อมูลอุปกรณ์"
json additional_data "ข้อมูลเพิ่มเติม"
enum severity "ความรุนแรง (LOW, MEDIUM, HIGH, CRITICAL)"
datetime activity_timestamp "เวลากิจกรรม"
datetime created_at "วันที่สร้าง"
}
ONLINE_USERS {
uuid online_id PK "รหัสผู้ใช้ออนไลน์"
uuid user_id FK "รหัสผู้ใช้งาน"
uuid session_id FK "รหัสเซสชัน"
varchar ip_address "ที่อยู่ IP"
varchar hostname "ชื่อเครื่อง"
varchar user_agent "User Agent"
varchar browser "เบราว์เซอร์"
varchar operating_system "ระบบปฏิบัติการ"
varchar device_type "ประเภทอุปกรณ์"
varchar current_page "หน้าปัจจุบัน"
varchar current_module "โมดูลปัจจุบัน"
varchar geolocation "ตำแหน่งที่ตั้ง"
datetime login_time "เวลาเข้าสู่ระบบ"
datetime last_activity "กิจกรรมล่าสุด"
int idle_time_minutes "เวลาไม่ทำงาน (นาที)"
enum activity_status "สถานะกิจกรรม (ACTIVE, IDLE, AWAY)"
json session_data "ข้อมูลเซสชัน"
decimal bandwidth_usage_mb "การใช้แบนด์วิดท์ (MB)"
int page_views "จำนวนหน้าที่เข้าชม"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
AUDIT_TRAIL {
uuid audit_id PK "รหัสการตรวจสอบ"
uuid user_id FK "รหัสผู้ใช้งาน"
varchar username "ชื่อผู้ใช้งาน"
varchar event_type "ประเภทเหตุการณ์"
varchar table_name "ชื่อตาราง"
varchar record_id "รหัสเรคอร์ด"
enum operation "การดำเนินการ (INSERT, UPDATE, DELETE, SELECT)"
json old_values "ค่าเก่า"
json new_values "ค่าใหม่"
json changed_fields "ฟิลด์ที่เปลี่ยน"
varchar ip_address "ที่อยู่ IP"
varchar user_agent "User Agent"
varchar request_id "รหัสคำร้อง"
varchar transaction_id "รหัสธุรกรรม"
text description "คำอธิบาย"
enum compliance_type "ประเภทการปฏิบัติตาม (HIPAA, GDPR, PDPA)"
varchar compliance_reason "เหตุผลการปฏิบัติตาม"
boolean is_sensitive "ข้อมูลอ่อนไหว"
varchar data_classification "การจัดหมวดข้อมูล"
datetime event_timestamp "เวลาเหตุการณ์"
varchar risk_level "ระดับความเสี่ยง"
json metadata "ข้อมูลเมตา"
datetime created_at "วันที่สร้าง"
}
SECURITY_EVENTS {
uuid event_id PK "รหัสเหตุการณ์"
varchar event_type "ประเภทเหตุการณ์"
enum severity "ความรุนแรง (LOW, MEDIUM, HIGH, CRITICAL)"
varchar source_ip "IP ต้นทาง"
varchar target_ip "IP ปลายทาง"
uuid user_id FK "รหัสผู้ใช้งาน"
varchar username "ชื่อผู้ใช้งาน"
varchar resource "ทรัพยากร"
varchar action_attempted "การกระทำที่พยายาม"
varchar result "ผลลัพธ์"
text description "คำอธิบาย"
varchar attack_vector "เวกเตอร์การโจมตี"
varchar threat_signature "ลายเซ็นภัยคุกคาม"
boolean is_blocked "ถูกบล็อก"
varchar blocking_rule "กฎการบล็อก"
varchar geolocation "ตำแหน่งที่ตั้ง"
varchar user_agent "User Agent"
json event_data "ข้อมูลเหตุการณ์"
varchar correlation_id "รหัสความสัมพันธ์"
boolean is_false_positive "ผลบวกปลอม"
varchar response_action "การตอบสนอง"
datetime detected_at "เวลาที่ตรวจพบ"
datetime responded_at "เวลาที่ตอบสนอง"
uuid responded_by FK "ผู้ตอบสนอง"
enum status "สถานะ (OPEN, INVESTIGATING, RESOLVED, CLOSED)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
%% Relationships
NEWS_ANNOUNCEMENTS ||--o{ NOTIFICATIONS : "generates notifications"
USERS ||--o{ USER_ACTIVITY_LOG : "performs activities"
USER_SESSIONS ||--o{ USER_ACTIVITY_LOG : "session activities"
USERS ||--o{ ONLINE_USERS : "online presence"
USER_SESSIONS ||--o{ ONLINE_USERS : "active sessions"
USERS ||--o{ AUDIT_TRAIL : "audited actions"
USERS ||--o{ SECURITY_EVENTS : "security incidents"
USERS ||--o{ NOTIFICATIONS : "receives notifications"
2.4 กลุ่ม Reporting & Analytics Tables
erDiagram
REPORT_TEMPLATES {
uuid template_id PK "รหัสเทมเพลต"
varchar template_name UK "ชื่อเทมเพลต (unique)"
varchar template_code UK "รหัสเทมเพลต (unique)"
text description "คำอธิบาย"
enum report_type "ประเภทรายงาน (TABULAR, CHART, DASHBOARD, FORM)"
varchar category "หมวดหมู่"
text data_source "แหล่งข้อมูล"
text sql_query "คำสั่ง SQL"
json parameters "พารามิเตอร์"
json layout_config "การตั้งค่าเลย์เอาต์"
json style_config "การตั้งค่าสไตล์"
text header_template "เทมเพลตหัวกระดาษ"
text footer_template "เทมเพลตท้ายกระดาษ"
varchar paper_size "ขนาดกระดาษ"
varchar orientation "การวางกระดาษ"
json export_formats "รูปแบบการส่งออก"
boolean is_public "เป็นสาธารณะ"
boolean is_system "เป็นเทมเพลตระบบ"
uuid department_id FK "แผนกเจ้าของ"
int usage_count "จำนวนการใช้งาน"
decimal avg_execution_time "เวลาดำเนินการเฉลี่ย"
enum status "สถานะ (ACTIVE, INACTIVE, DEPRECATED)"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
REPORT_INSTANCES {
uuid instance_id PK "รหัสอินสแตนซ์"
uuid template_id FK "รหัสเทมเพลต"
varchar instance_name "ชื่ออินสแตนซ์"
json parameter_values "ค่าพารามิเตอร์"
datetime generated_at "วันที่สร้าง"
uuid generated_by FK "ผู้สร้าง"
enum generation_type "ประเภทการสร้าง (MANUAL, SCHEDULED, API)"
enum status "สถานะ (GENERATING, COMPLETED, FAILED, EXPIRED)"
text error_message "ข้อความผิดพลาด"
int execution_time_ms "เวลาดำเนินการ (มิลลิวินาที)"
int record_count "จำนวนเรคอร์ด"
bigint file_size "ขนาดไฟล์ (ไบต์)"
varchar file_path "เส้นทางไฟล์"
varchar file_format "รูปแบบไฟล์"
varchar download_token "โทเค็นดาวน์โหลด"
int download_count "จำนวนดาวน์โหลด"
datetime expires_at "วันหมดอายุ"
json metadata "ข้อมูลเมตา"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
REPORT_SCHEDULES {
uuid schedule_id PK "รหัสกำหนดการ"
uuid template_id FK "รหัสเทมเพลต"
varchar schedule_name "ชื่อกำหนดการ"
text description "คำอธิบาย"
varchar cron_expression "นิพจน์ Cron"
json parameter_values "ค่าพารามิเตอร์"
enum output_format "รูปแบบผลลัพธ์"
varchar delivery_method "วิธีการส่ง"
json delivery_config "การตั้งค่าการส่ง"
text email_recipients "ผู้รับอีเมล"
varchar email_subject "หัวเรื่องอีเมล"
text email_body "เนื้อหาอีเมล"
boolean is_active "เปิดใช้งาน"
datetime last_run_at "รันล่าสุด"
datetime next_run_at "รันครั้งถัดไป"
varchar last_run_status "สถานะการรันล่าสุด"
uuid last_instance_id FK "อินสแตนซ์ล่าสุด"
int execution_count "จำนวนการดำเนินการ"
int success_count "จำนวนสำเร็จ"
int failure_count "จำนวนล้มเหลว"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
REPORT_CACHE {
uuid cache_id PK "รหัสแคช"
varchar cache_key UK "คีย์แคช (unique)"
uuid template_id FK "รหัสเทมเพลต"
json parameter_hash "แฮชพารามิเตอร์"
text cached_data "ข้อมูลแคช"
varchar data_format "รูปแบบข้อมูล"
bigint data_size "ขนาดข้อมูล (ไบต์)"
int hit_count "จำนวนการใช้"
datetime last_hit_at "ใช้ล่าสุด"
datetime expires_at "วันหมดอายุ"
varchar cache_strategy "กลยุทธ์แคช"
json cache_metadata "ข้อมูลเมตาแคช"
boolean is_compressed "บีบอัด"
varchar compression_type "ประเภทการบีบอัด"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
ANALYTICS_DATA {
uuid analytics_id PK "รหัสข้อมูลวิเคราะห์"
varchar metric_name "ชื่อตัวชี้วัด"
varchar metric_category "หมวดหมู่ตัวชี้วัด"
decimal metric_value "ค่าตัวชี้วัด"
varchar unit "หน่วย"
date measurement_date "วันที่วัด"
datetime measurement_time "เวลาที่วัด"
varchar dimension1 "มิติที่ 1"
varchar dimension2 "มิติที่ 2"
varchar dimension3 "มิติที่ 3"
json dimensions "มิติเพิ่มเติม"
varchar aggregation_level "ระดับการรวม"
varchar data_source "แหล่งข้อมูล"
uuid source_record_id "รหัสเรคอร์ดต้นทาง"
json calculation_method "วิธีการคำนวณ"
decimal trend_value "ค่าแนวโน้ม"
varchar trend_direction "ทิศทางแนวโน้ม"
json metadata "ข้อมูลเมตา"
boolean is_anomaly "ค่าผิดปกติ"
varchar quality_score "คะแนนคุณภาพข้อมูล"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
PERFORMANCE_METRICS {
uuid metric_id PK "รหัสตัวชี้วัด"
varchar metric_type "ประเภทตัวชี้วัด"
varchar metric_name "ชื่อตัวชี้วัด"
decimal value "ค่า"
varchar unit "หน่วย"
varchar target_value "ค่าเป้าหมาย"
enum status "สถานะ (NORMAL, WARNING, CRITICAL)"
varchar threshold_config "การตั้งค่าเกณฑ์"
varchar measurement_period "ช่วงเวลาวัด"
datetime measurement_start "เวลาเริ่มวัด"
datetime measurement_end "เวลาสิ้นสุดวัด"
varchar data_source "แหล่งข้อมูล"
varchar calculation_formula "สูตรการคำนวณ"
json raw_data "ข้อมูลดิบ"
decimal previous_value "ค่าก่อนหน้า"
decimal change_value "ค่าการเปลี่ยนแปลง"
decimal change_percentage "เปอร์เซ็นต์การเปลี่ยนแปลง"
enum trend "แนวโน้ม (INCREASING, DECREASING, STABLE)"
varchar alert_level "ระดับการแจ้งเตือน"
json alert_config "การตั้งค่าการแจ้งเตือน"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
DASHBOARD_WIDGETS {
uuid widget_id PK "รหัสวิดเจ็ต"
varchar widget_name "ชื่อวิดเจ็ต"
varchar widget_type "ประเภทวิดเจ็ต"
uuid template_id FK "รหัสเทมเพลต"
varchar data_source "แหล่งข้อมูล"
json configuration "การตั้งค่า"
json layout "เลย์เอาต์"
json style "สไตล์"
int refresh_interval "ช่วงการรีเฟรช (วินาที)"
boolean auto_refresh "รีเฟรชอัตโนมัติ"
json filter_config "การตั้งค่าตัวกรอง"
varchar cache_key "คีย์แคช"
datetime last_updated "อัปเดตล่าสุด"
enum status "สถานะ (ACTIVE, INACTIVE)"
int sort_order "ลำดับการแสดง"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
%% Relationships
REPORT_TEMPLATES ||--o{ REPORT_INSTANCES : "generates instances"
REPORT_TEMPLATES ||--o{ REPORT_SCHEDULES : "scheduled execution"
REPORT_TEMPLATES ||--o{ REPORT_CACHE : "caches results"
REPORT_TEMPLATES ||--o{ DASHBOARD_WIDGETS : "data source"
REPORT_SCHEDULES ||--o{ REPORT_INSTANCES : "generates instances"
REPORT_INSTANCES ||--o{ REPORT_CACHE : "cached results"
USERS ||--o{ REPORT_TEMPLATES : "creates templates"
USERS ||--o{ REPORT_INSTANCES : "generates reports"
USERS ||--o{ REPORT_SCHEDULES : "creates schedules"
2.5 กลุ่ม Security & Compliance Tables
erDiagram
MFA_CREDENTIALS {
uuid mfa_id PK "รหัส MFA"
uuid user_id FK "รหัสผู้ใช้งาน"
enum mfa_type "ประเภท MFA (TOTP, SMS, EMAIL, HARDWARE_KEY)"
varchar secret_key "คีย์ลับ (encrypted)"
varchar device_name "ชื่ออุปกรณ์"
varchar device_id "รหัสอุปกรณ์"
boolean is_primary "เป็นหลัก"
boolean is_verified "ยืนยันแล้ว"
datetime verified_at "วันที่ยืนยัน"
varchar backup_codes "รหัสสำรอง (encrypted)"
int failed_attempts "จำนวนครั้งที่ล้มเหลว"
datetime last_used_at "ใช้ล่าสุด"
datetime last_failed_at "ล้มเหลวล่าสุด"
varchar recovery_question "คำถามกู้คืน"
varchar recovery_answer "คำตอบกู้คืน (encrypted)"
enum status "สถานะ (ACTIVE, INACTIVE, SUSPENDED, COMPROMISED)"
datetime expires_at "วันหมดอายุ"
json device_info "ข้อมูลอุปกรณ์"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
PASSWORD_HISTORY {
uuid history_id PK "รหัสประวัติ"
uuid user_id FK "รหัสผู้ใช้งาน"
varchar password_hash "รหัสผ่านที่เข้ารหัส"
varchar salt "Salt"
varchar hash_algorithm "อัลกอริทึมแฮช"
datetime created_at "วันที่สร้าง"
datetime expires_at "วันหมดอายุ"
varchar changed_reason "เหตุผลการเปลี่ยน"
varchar ip_address "ที่อยู่ IP"
boolean was_compromised "ถูกบุกรุก"
varchar strength_score "คะแนนความแข็งแกร่ง"
json password_policy "นโยบายรหัสผ่าน"
}
SECURITY_POLICIES {
uuid policy_id PK "รหัสนโยบาย"
varchar policy_name UK "ชื่อนโยบาย (unique)"
varchar policy_type "ประเภทนโยบาย"
text description "คำอธิบาย"
json policy_rules "กฎนโยบาย"
enum enforcement_level "ระดับการบังคับใช้ (ADVISORY, ENFORCED, STRICT)"
enum scope "ขอบเขต (GLOBAL, DEPARTMENT, ROLE, USER)"
uuid scope_id FK "รหัสขอบเขต"
boolean is_active "เปิดใช้งาน"
datetime effective_date "วันที่มีผล"
datetime expires_at "วันหมดอายุ"
varchar version "เวอร์ชัน"
text change_log "บันทึกการเปลี่ยนแปลง"
uuid superseded_by FK "ถูกแทนที่โดย"
json exception_rules "กฎข้อยกเว้น"
int violation_count "จำนวนการละเมิด"
datetime last_violation_at "การละเมิดล่าสุด"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
COMPLIANCE_RULES {
uuid rule_id PK "รหัสกฎ"
varchar rule_name UK "ชื่อกฎ (unique)"
varchar rule_code UK "รหัสกฎ (unique)"
text description "คำอธิบาย"
enum compliance_framework "กรอบการปฏิบัติตาม (HIPAA, GDPR, PDPA, SOX, ISO27001)"
varchar control_id "รหัสการควบคุม"
text control_description "คำอธิบายการควบคุม"
enum rule_type "ประเภทกฎ (PREVENTIVE, DETECTIVE, CORRECTIVE)"
enum criticality "ความสำคัญ (LOW, MEDIUM, HIGH, CRITICAL)"
text implementation_guidance "คำแนะนำการใช้งาน"
json validation_criteria "เกณฑ์การตรวจสอบ"
varchar validation_method "วิธีการตรวจสอบ"
enum automation_level "ระดับอัตโนมัติ (MANUAL, SEMI_AUTO, FULL_AUTO)"
int check_frequency_days "ความถี่การตรวจสอบ (วัน)"
datetime last_check_at "ตรวจสอบล่าสุด"
datetime next_check_at "ตรวจสอบครั้งถัดไป"
enum compliance_status "สถานะการปฏิบัติตาม (COMPLIANT, NON_COMPLIANT, PARTIAL, UNKNOWN)"
text evidence_required "หลักฐานที่ต้องการ"
varchar responsible_role "บทบาทผู้รับผิดชอบ"
text remediation_steps "ขั้นตอนการแก้ไข"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
THREAT_DETECTION {
uuid detection_id PK "รหัสการตรวจจับ"
varchar threat_type "ประเภทภัยคุกคาม"
varchar threat_name "ชื่อภัยคุกคาม"
text description "คำอธิบาย"
enum severity "ความรุนแรง (LOW, MEDIUM, HIGH, CRITICAL)"
varchar detection_rule "กฎการตรวจจับ"
json detection_criteria "เกณฑ์การตรวจจับ"
varchar data_source "แหล่งข้อมูล"
varchar signature "ลายเซ็น"
boolean is_active "เปิดใช้งาน"
int detection_count "จำนวนการตรวจจับ"
datetime first_detected_at "ตรวจจับครั้งแรก"
datetime last_detected_at "ตรวจจับล่าสุด"
decimal false_positive_rate "อัตราผลบวกปลอม"
json mitre_attack_mapping "การแมป MITRE ATT&CK"
text remediation_action "การแก้ไข"
varchar detection_confidence "ความเชื่อมั่นการตรวจจับ"
json alert_configuration "การตั้งค่าการแจ้งเตือน"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
INCIDENT_RESPONSE {
uuid incident_id PK "รหัสเหตุการณ์"
varchar incident_number UK "หมายเลขเหตุการณ์ (unique)"
varchar title "หัวเรื่อง"
text description "คำอธิบาย"
enum incident_type "ประเภทเหตุการณ์"
enum severity "ความรุนแรง (LOW, MEDIUM, HIGH, CRITICAL)"
enum priority "ความสำคัญ (LOW, MEDIUM, HIGH, URGENT)"
uuid detection_id FK "รหัสการตรวจจับ"
uuid reported_by FK "ผู้รายงาน"
uuid assigned_to FK "ผู้ได้รับมอบหมาย"
uuid incident_commander FK "ผู้บัญชาการเหตุการณ์"
datetime discovered_at "เวลาที่ค้นพบ"
datetime reported_at "เวลาที่รายงาน"
datetime acknowledged_at "เวลาที่รับทราบ"
datetime resolved_at "เวลาที่แก้ไข"
datetime closed_at "เวลาที่ปิด"
enum status "สถานะ (NEW, ASSIGNED, IN_PROGRESS, RESOLVED, CLOSED)"
text initial_assessment "การประเมินเบื้องต้น"
text impact_analysis "การวิเคราะห์ผลกระทบ"
text containment_actions "การดำเนินการควบคุม"
text eradication_actions "การดำเนินการกำจัด"
text recovery_actions "การดำเนินการกู้คืน"
text lessons_learned "บทเรียนที่ได้รับ"
json timeline "ไทม์ไลน์"
json artifacts "สิ่งประดิษฐ์"
text root_cause "สาเหตุหลัก"
json cost_impact "ผลกระทบค่าใช้จ่าย"
boolean notification_sent "ส่งการแจ้งเตือนแล้ว"
json stakeholders_notified "ผู้มีส่วนได้ส่วนเสียที่แจ้ง"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
%% Relationships
USERS ||--o{ MFA_CREDENTIALS : "has MFA methods"
USERS ||--o{ PASSWORD_HISTORY : "password changes"
SECURITY_POLICIES ||--o{ COMPLIANCE_RULES : "enforces rules"
THREAT_DETECTION ||--o{ SECURITY_EVENTS : "detects threats"
SECURITY_EVENTS ||--o{ INCIDENT_RESPONSE : "triggers incidents"
THREAT_DETECTION ||--o{ INCIDENT_RESPONSE : "linked to incidents"
USERS ||--o{ INCIDENT_RESPONSE : "reports incidents"
USERS ||--o{ INCIDENT_RESPONSE : "assigned incidents"
2.6 กลุ่ม Integration & API Tables
erDiagram
HIS_SYSTEMS {
uuid system_id PK "รหัสระบบ"
varchar system_code UK "รหัสระบบ (unique)"
varchar system_name "ชื่อระบบ"
varchar system_version "เวอร์ชันระบบ"
text description "คำอธิบาย"
enum system_type "ประเภทระบบ (CORE, SUPPORT, EXTERNAL)"
varchar base_url "URL หลัก"
varchar database_connection "การเชื่อมต่อฐานข้อมูล"
json configuration "การตั้งค่า"
boolean is_active "เปิดใช้งาน"
boolean requires_authentication "ต้องการการยืนยันตัวตน"
varchar api_version "เวอร์ชัน API"
json supported_formats "รูปแบบที่รองรับ"
int timeout_seconds "เวลาหมดเชื่อมต่อ (วินาที)"
int retry_attempts "จำนวนครั้งที่ลองใหม่"
varchar health_check_url "URL ตรวจสอบสถานะ"
datetime last_health_check "ตรวจสอบสถานะล่าสุด"
enum health_status "สถานะการทำงาน (HEALTHY, DEGRADED, DOWN, UNKNOWN)"
varchar maintainer "ผู้ดูแล"
varchar contact_email "อีเมลติดต่อ"
text documentation_url "URL เอกสาร"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
API_ENDPOINTS {
uuid endpoint_id PK "รหัสจุดเชื่อมต่อ"
uuid system_id FK "รหัสระบบ"
varchar endpoint_path UK "เส้นทางจุดเชื่อมต่อ (unique)"
varchar endpoint_name "ชื่อจุดเชื่อมต่อ"
text description "คำอธิบาย"
enum http_method "วิธี HTTP (GET, POST, PUT, DELETE, PATCH)"
varchar content_type "ประเภทเนื้อหา"
json request_schema "สคีมาคำร้อง"
json response_schema "สคีมาการตอบกลับ"
json authentication_config "การตั้งค่าการยืนยันตัวตน"
json rate_limiting "การจำกัดอัตรา"
boolean requires_authorization "ต้องการการอนุญาต"
varchar required_permissions "สิทธิ์ที่ต้องการ"
boolean is_deprecated "เลิกใช้แล้ว"
varchar deprecated_version "เวอร์ชันที่เลิกใช้"
varchar replacement_endpoint "จุดเชื่อมต่อทดแทน"
int timeout_seconds "เวลาหมดเชื่อมต่อ (วินาที)"
json caching_config "การตั้งค่าแคช"
varchar monitoring_level "ระดับการติดตาม"
boolean enable_logging "เปิดการบันทึก"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
INTEGRATION_LOGS {
uuid log_id PK "รหัสบันทึก"
uuid system_id FK "รหัสระบบ"
uuid endpoint_id FK "รหัสจุดเชื่อมต่อ"
varchar integration_type "ประเภทการเชื่อมต่อ"
varchar operation "การดำเนินการ"
uuid user_id FK "รหัสผู้ใช้งาน"
varchar request_id UK "รหัสคำร้อง (unique)"
varchar correlation_id "รหัสความสัมพันธ์"
varchar http_method "วิธี HTTP"
varchar request_url "URL คำร้อง"
json request_headers "หัวข้อคำร้อง"
text request_body "เนื้อหาคำร้อง"
int response_status "สถานะการตอบกลับ"
json response_headers "หัวข้อการตอบกลับ"
text response_body "เนื้อหาการตอบกลับ"
bigint request_size "ขนาดคำร้อง (ไบต์)"
bigint response_size "ขนาดการตอบกลับ (ไบต์)"
int processing_time_ms "เวลาประมวลผล (มิลลิวินาที)"
varchar ip_address "ที่อยู่ IP"
varchar user_agent "User Agent"
enum status "สถานะ (SUCCESS, ERROR, TIMEOUT, UNAUTHORIZED)"
text error_message "ข้อความผิดพลาด"
varchar error_code "รหัสผิดพลาด"
json metadata "ข้อมูลเมตา"
boolean is_cached "ใช้แคช"
varchar cache_key "คีย์แคช"
boolean is_retry "ลองใหม่"
int retry_count "จำนวนครั้งที่ลองใหม่"
datetime request_timestamp "เวลาคำร้อง"
datetime response_timestamp "เวลาการตอบกลับ"
datetime created_at "วันที่สร้าง"
}
API_USAGE_STATS {
uuid stat_id PK "รหัสสถิติ"
uuid endpoint_id FK "รหัสจุดเชื่อมต่อ"
uuid user_id FK "รหัสผู้ใช้งาน"
date stat_date "วันที่"
int hour_bucket "ช่วงชั่วโมง (0-23)"
int request_count "จำนวนคำร้อง"
int success_count "จำนวนสำเร็จ"
int error_count "จำนวนผิดพลาด"
int timeout_count "จำนวนหมดเวลา"
decimal avg_response_time_ms "เวลาตอบกลับเฉลี่ย (มิลลิวินาที)"
decimal min_response_time_ms "เวลาตอบกลับต่ำสุด (มิลลิวินาที)"
decimal max_response_time_ms "เวลาตอบกลับสูงสุด (มิลลิวินาที)"
bigint total_request_size "ขนาดคำร้องรวม (ไบต์)"
bigint total_response_size "ขนาดการตอบกลับรวม (ไบต์)"
int rate_limit_hits "จำนวนครั้งที่ถูกจำกัด"
int cache_hits "จำนวนแคชฮิต"
int cache_misses "จำนวนแคชมิส"
decimal cache_hit_ratio "อัตราแคชฮิต"
json top_error_codes "รหัสผิดพลาดยอดนิยม"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
}
EXTERNAL_SYSTEMS {
uuid external_id PK "รหัสระบบภายนอก"
varchar system_name UK "ชื่อระบบ (unique)"
varchar system_code UK "รหัสระบบ (unique)"
text description "คำอธิบาย"
enum system_type "ประเภทระบบ (GOVERNMENT, PARTNER, VENDOR, CLOUD)"
varchar vendor_name "ชื่อผู้ให้บริการ"
varchar contact_person "ผู้ติดต่อ"
varchar contact_email "อีเมลติดต่อ"
varchar contact_phone "โทรศัพท์ติดต่อ"
varchar base_url "URL หลัก"
json authentication_config "การตั้งค่าการยืนยันตัวตน"
varchar api_key "คีย์ API (encrypted)"
varchar client_id "Client ID"
varchar client_secret "Client Secret (encrypted)"
json connection_config "การตั้งค่าการเชื่อมต่อ"
enum protocol "โปรโตคอล (REST, SOAP, FTP, SFTP, HL7)"
varchar data_format "รูปแบบข้อมูล (JSON, XML, CSV, HL7)"
boolean is_active "เปิดใช้งาน"
boolean is_trusted "เชื่อถือได้"
varchar compliance_level "ระดับการปฏิบัติตาม"
varchar sla_agreement "ข้อตกลงระดับบริการ"
datetime contract_start "วันที่เริ่มสัญญา"
datetime contract_end "วันที่สิ้นสุดสัญญา"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
SYNC_JOBS {
uuid job_id PK "รหัสงานซิงค์"
varchar job_name UK "ชื่องาน (unique)"
text description "คำอธิบาย"
uuid source_system_id FK "รหัสระบบต้นทาง"
uuid target_system_id FK "รหัสระบบปลายทาง"
enum sync_type "ประเภทการซิงค์ (ONE_WAY, TWO_WAY, BULK_EXPORT, BULK_IMPORT)"
enum sync_direction "ทิศทางการซิงค์ (PULL, PUSH, BIDIRECTIONAL)"
varchar data_type "ประเภทข้อมูล"
json sync_config "การตั้งค่าการซิงค์"
varchar cron_schedule "ตารางเวลา (Cron)"
boolean is_active "เปิดใช้งาน"
varchar mapping_rules "กฎการแมปข้อมูล"
json transformation_rules "กฎการแปลงข้อมูล"
json validation_rules "กฎการตรวจสอบ"
enum conflict_resolution "การแก้ไขความขัดแย้ง (SOURCE_WINS, TARGET_WINS, MANUAL)"
int batch_size "ขนาดแบทช์"
int timeout_seconds "เวลาหมดเชื่อมต่อ (วินาที)"
int retry_attempts "จำนวนครั้งที่ลองใหม่"
datetime last_run_at "รันล่าสุด"
datetime next_run_at "รันครั้งถัดไป"
varchar last_run_status "สถานะการรันล่าสุด"
int last_sync_count "จำนวนเรคอร์ดที่ซิงค์ล่าสุด"
text last_error_message "ข้อความผิดพลาดล่าสุด"
json notification_config "การตั้งค่าการแจ้งเตือน"
datetime created_at "วันที่สร้าง"
datetime updated_at "วันที่แก้ไข"
uuid created_by FK "ผู้สร้าง"
uuid updated_by FK "ผู้แก้ไข"
}
SYNC_HISTORY {
uuid sync_id PK "รหัสการซิงค์"
uuid job_id FK "รหัสงานซิงค์"
datetime start_time "เวลาเริ่มต้น"
datetime end_time "เวลาสิ้นสุด"
int duration_seconds "ระยะเวลา (วินาที)"
enum status "สถานะ (RUNNING, SUCCESS, FAILED, PARTIAL)"
int total_records "จำนวนเรคอร์ดทั้งหมด"
int processed_records "จำนวนเรคอร์ดที่ประมวลผล"
int successful_records "จำนวนเรคอร์ดที่สำเร็จ"
int failed_records "จำนวนเรคอร์ดที่ล้มเหลว"
int skipped_records "จำนวนเรคอร์ดที่ข้าม"
text error_summary "สรุปข้อผิดพลาด"
json error_details "รายละเอียดข้อผิดพลาด"
json performance_metrics "ตัวชี้วัดประสิทธิภาพ"
varchar log_file_path "เส้นทางไฟล์บันทึก"
bigint data_volume_bytes "ปริมาณข้อมูล (ไบต์)"
decimal throughput_records_per_second "ปริมาณงาน (เรคอร์ด/วินาที)"
json data_quality_metrics "ตัวชี้วัดคุณภาพข้อมูล"
datetime created_at "วันที่สร้าง"
}
%% Relationships
HIS_SYSTEMS ||--o{ API_ENDPOINTS : "provides endpoints"
API_ENDPOINTS ||--o{ INTEGRATION_LOGS : "logged requests"
API_ENDPOINTS ||--o{ API_USAGE_STATS : "usage statistics"
HIS_SYSTEMS ||--o{ INTEGRATION_LOGS : "system interactions"
USERS ||--o{ INTEGRATION_LOGS : "user requests"
USERS ||--o{ API_USAGE_STATS : "user statistics"
EXTERNAL_SYSTEMS ||--o{ SYNC_JOBS : "source system"
HIS_SYSTEMS ||--o{ SYNC_JOBS : "target system"
SYNC_JOBS ||--o{ SYNC_HISTORY : "execution history"
3. ความสัมพันธ์หลักระหว่างตาราง (Main Relationships)
3.1 Identity & Access Management Relationships
graph TD
subgraph "👤 User Management"
U[USERS] --> UG[USER_GROUPS]
U --> UR[USER_ROLES]
U --> US[USER_SESSIONS]
U --> AT[ACCESS_TOKENS]
U --> MFA[MFA_CREDENTIALS]
U --> PH[PASSWORD_HISTORY]
end
subgraph "🔐 Access Control"
G[GROUPS] --> UG
R[ROLES] --> UR
G --> GP[GROUP_POLICIES]
R --> RP[ROLE_POLICIES]
POL[POLICIES] --> GP
POL --> RP
PERM[PERMISSIONS] --> POL
end
subgraph "⚡ Session Management"
US --> AT
US --> OU[ONLINE_USERS]
US --> UAL[USER_ACTIVITY_LOG]
end
%% Cross-group relationships
U -.-> G
U -.-> R
U -.-> POL
3.2 System Configuration & Management Relationships
graph TD
subgraph "⚙️ System Settings"
SC[SYSTEM_CONFIG] --> HVA[HN_VN_AN_CONFIG]
SC --> DBC[DATABASE_CONFIG]
DBC --> BJ[BACKUP_JOBS]
BJ --> BH[BACKUP_HISTORY]
end
subgraph "📊 Master Data"
MDC[MASTER_DATA_CATEGORY] --> MDI[MASTER_DATA_ITEMS]
MDC --> MDC
MDI --> MDI
end
subgraph "👥 User Integration"
U[USERS] --> SC
U --> MDC
U --> BJ
end
3.3 Communication & Monitoring Relationships
graph TD
subgraph "📢 Communication"
NA[NEWS_ANNOUNCEMENTS] --> NOT[NOTIFICATIONS]
U[USERS] --> NOT
U --> NA
end
subgraph "📊 Monitoring"
U --> UAL[USER_ACTIVITY_LOG]
US[USER_SESSIONS] --> UAL
US --> OU[ONLINE_USERS]
UAL --> AT_LOG[AUDIT_TRAIL]
SE[SECURITY_EVENTS] --> AT_LOG
end
subgraph "🛡️ Security"
U --> SE
SE --> TD[THREAT_DETECTION]
TD --> IR[INCIDENT_RESPONSE]
SE --> IR
end
3.4 Reporting & Analytics Relationships
graph TD
subgraph "📈 Report Management"
RT[REPORT_TEMPLATES] --> RI[REPORT_INSTANCES]
RT --> RS[REPORT_SCHEDULES]
RT --> RC[REPORT_CACHE]
RS --> RI
end
subgraph "📊 Analytics"
UAL[USER_ACTIVITY_LOG] --> AD[ANALYTICS_DATA]
OU[ONLINE_USERS] --> PM[PERFORMANCE_METRICS]
RT --> DW[DASHBOARD_WIDGETS]
end
subgraph "👤 User Access"
U[USERS] --> RT
U --> RI
U --> RS
end
3.5 Integration & API Relationships
graph TD
subgraph "🔗 System Integration"
HIS[HIS_SYSTEMS] --> AE[API_ENDPOINTS]
AE --> IL[INTEGRATION_LOGS]
AE --> AUS[API_USAGE_STATS]
HIS --> IL
end
subgraph "🌐 External Integration"
ES[EXTERNAL_SYSTEMS] --> SJ[SYNC_JOBS]
HIS --> SJ
SJ --> SH[SYNC_HISTORY]
end
subgraph "👤 User Integration"
U[USERS] --> IL
U --> AUS
U --> SJ
end
4. ข้อมูลจำเพาะของฟิลด์สำคัญ (Field Specifications)
4.1 Primary Keys และ Foreign Keys
4.1.1 รูปแบบ Primary Key
- ทุกตาราง: ใช้ UUID (Universally Unique Identifier) format
- ความยาว: 36 ตัวอักษร รวมเครื่องหมาย hyphen
- ตัวอย่าง:
550e8400-e29b-41d4-a716-446655440000 - ข้อดี: ไม่ซ้ำกันทั่วโลก, เหมาะสำหรับระบบกระจาย, ปลอดภัยกว่า Auto-increment
4.1.2 การตั้งชื่อ Foreign Key
- รูปแบบ:
{table_name}_id - ตัวอย่าง:
user_idสำหรับอ้างอิง USERS tablegroup_idสำหรับอ้างอิง GROUPS tablerole_idสำหรับอ้างอิง ROLES table
4.2 Enum Values (ค่าที่กำหนดไว้)
4.2.1 User Types
ENUM('SUPER_ADMIN', 'SYS_ADMIN', 'DEPT_ADMIN', 'SEC_ADMIN', 'END_USER')
4.2.2 Status Values
ENUM('ACTIVE', 'INACTIVE', 'SUSPENDED', 'LOCKED', 'EXPIRED', 'PENDING')
4.2.3 Group Types
ENUM('MEDICAL', 'ADMINISTRATIVE', 'TECHNICAL', 'SYSTEM')
4.2.4 Policy Effects
ENUM('ALLOW', 'DENY')
4.2.5 Session Status
ENUM('ACTIVE', 'EXPIRED', 'TERMINATED', 'SUSPENDED')
4.3 JSON Field Structures
4.3.1 User Preferences
{
"theme": "light|dark",
"language": "th|en",
"timezone": "Asia/Bangkok",
"date_format": "DD/MM/YYYY|MM/DD/YYYY",
"time_format": "24h|12h",
"notifications": {
"email": true,
"sms": false,
"push": true
},
"dashboard_layout": {...},
"menu_preferences": {...}
}
4.3.2 Policy Document (AWS IAM Style)
{
"Version": "2024-10-07",
"Statement": [
{
"Sid": "AllowReadPatientData",
"Effect": "Allow",
"Action": [
"patient:read",
"patient:list"
],
"Resource": "arn:hospital:patient:*",
"Condition": {
"StringEquals": {
"patient:department": "${user:department}"
}
}
}
]
}
4.3.3 System Configuration
{
"hospital_info": {
"name": "โรงพยาบาลค่ายธนรัชน์",
"name_en": "Thanarat Hospital",
"address": "...",
"phone": "...",
"email": "...",
"logo_url": "..."
},
"security": {
"password_policy": {
"min_length": 12,
"require_uppercase": true,
"require_lowercase": true,
"require_numbers": true,
"require_symbols": true,
"history_count": 12,
"expire_days": 90
},
"session": {
"timeout_minutes": 30,
"max_concurrent": 3,
"remember_me_days": 30
}
}
}
4.4 Audit Trail และ Compliance Fields
4.4.1 Standard Audit Fields
ทุกตารางหลักต้องมี:
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
created_by UUID NOT NULL,
updated_by UUID NULL
4.4.2 Compliance Tags
{
"data_classification": "PUBLIC|INTERNAL|CONFIDENTIAL|RESTRICTED",
"retention_period": "3_YEARS|7_YEARS|PERMANENT",
"compliance_frameworks": ["PDPA", "HIPAA", "ISO27001"],
"access_restrictions": ["DEPARTMENT_ONLY", "ROLE_BASED", "TIME_LIMITED"]
}
5. ดัชนี (Indexes) และการปรับปรุงประสิทธิภาพ
5.1 Primary Indexes
5.1.1 Identity & Access Management
-- USERS table
CREATE UNIQUE INDEX idx_users_username ON USERS(username);
CREATE UNIQUE INDEX idx_users_email ON USERS(email);
CREATE INDEX idx_users_department ON USERS(department_id);
CREATE INDEX idx_users_status ON USERS(status);
CREATE INDEX idx_users_last_login ON USERS(last_login_at);
-- USER_SESSIONS table
CREATE UNIQUE INDEX idx_sessions_token ON USER_SESSIONS(session_token);
CREATE INDEX idx_sessions_user ON USER_SESSIONS(user_id);
CREATE INDEX idx_sessions_status ON USER_SESSIONS(status);
CREATE INDEX idx_sessions_expires ON USER_SESSIONS(expires_at);
-- POLICIES table
CREATE UNIQUE INDEX idx_policies_arn ON POLICIES(policy_arn);
CREATE INDEX idx_policies_type ON POLICIES(policy_type);
5.1.2 System Configuration
-- SYSTEM_CONFIG table
CREATE UNIQUE INDEX idx_config_group_key ON SYSTEM_CONFIG(config_group, config_key);
CREATE INDEX idx_config_effective ON SYSTEM_CONFIG(effective_date);
-- MASTER_DATA_ITEMS table
CREATE UNIQUE INDEX idx_master_category_code ON MASTER_DATA_ITEMS(category_id, item_code);
CREATE INDEX idx_master_external_code ON MASTER_DATA_ITEMS(external_code);
5.1.3 Monitoring & Audit
-- AUDIT_TRAIL table
CREATE INDEX idx_audit_user ON AUDIT_TRAIL(user_id);
CREATE INDEX idx_audit_table ON AUDIT_TRAIL(table_name);
CREATE INDEX idx_audit_timestamp ON AUDIT_TRAIL(event_timestamp);
CREATE INDEX idx_audit_operation ON AUDIT_TRAIL(operation);
-- USER_ACTIVITY_LOG table
CREATE INDEX idx_activity_user ON USER_ACTIVITY_LOG(user_id);
CREATE INDEX idx_activity_session ON USER_ACTIVITY_LOG(session_id);
CREATE INDEX idx_activity_timestamp ON USER_ACTIVITY_LOG(activity_timestamp);
CREATE INDEX idx_activity_module ON USER_ACTIVITY_LOG(module);
5.2 Composite Indexes
5.2.1 Performance Critical Indexes
-- User-Group membership with date range
CREATE INDEX idx_user_groups_active ON USER_GROUPS(user_id, group_id, joined_at, expires_at);
-- User-Role assignment with date range
CREATE INDEX idx_user_roles_active ON USER_ROLES(user_id, role_id, assigned_at, expires_at);
-- API usage statistics by date and endpoint
CREATE INDEX idx_api_stats_endpoint_date ON API_USAGE_STATS(endpoint_id, stat_date, hour_bucket);
-- Integration logs by system and timestamp
CREATE INDEX idx_integration_system_time ON INTEGRATION_LOGS(system_id, request_timestamp);
5.3 Full-Text Search Indexes
5.3.1 Search Optimization
-- News and announcements search
CREATE FULLTEXT INDEX idx_news_search ON NEWS_ANNOUNCEMENTS(title, content);
-- Report templates search
CREATE FULLTEXT INDEX idx_report_search ON REPORT_TEMPLATES(template_name, description);
-- Master data items search
CREATE FULLTEXT INDEX idx_master_search ON MASTER_DATA_ITEMS(item_name, item_name_en, description);
6. ข้อกำหนดด้านความปลอดภัย (Security Requirements)
6.1 Data Encryption
6.1.1 Fields ที่ต้องเข้ารหัส
USERS.password_hash- เข้ารหัสด้วย bcryptMFA_CREDENTIALS.secret_key- เข้ารหัสด้วย AES-256DATABASE_CONFIG.password_encrypted- เข้ารหัสด้วย AES-256EXTERNAL_SYSTEMS.api_key- เข้ารหัสด้วย AES-256PASSWORD_HISTORY.password_hash- เข้ารหัสด้วย bcrypt
6.1.2 Encryption Standards
- Symmetric Encryption: AES-256-GCM
- Password Hashing: bcrypt with cost factor 12+
- Key Derivation: PBKDF2 with 100,000+ iterations
- Token Signing: RS256 (RSA-SHA256)
6.2 Access Control
6.2.1 Row-Level Security (RLS)
-- Example: Users can only see their own sessions
CREATE POLICY user_sessions_policy ON USER_SESSIONS
FOR ALL TO application_role
USING (user_id = current_user_id());
-- Example: Department admins can only see their department users
CREATE POLICY dept_users_policy ON USERS
FOR ALL TO dept_admin_role
USING (department_id = current_user_department());
6.2.2 Column-Level Security
-- Sensitive fields restricted to specific roles
GRANT SELECT(user_id, username, display_name, email) ON USERS TO read_only_role;
GRANT SELECT ON USERS TO admin_role;
6.3 Data Retention และ Purging
6.3.1 Retention Policies
- AUDIT_TRAIL: เก็บ 7 ปี (ตามกฎหมาย)
- USER_ACTIVITY_LOG: เก็บ 3 ปี
- SECURITY_EVENTS: เก็บ 5 ปี
- INTEGRATION_LOGS: เก็บ 1 ปี
- PASSWORD_HISTORY: เก็บ 12 รุ่นล่าสุด
- USER_SESSIONS: ลบอัตโนมัติเมื่อหมดอายุ
6.3.2 Automated Purging Jobs
-- สร้างงานลบข้อมูลเก่าอัตโนมัติ
CREATE EVENT purge_expired_sessions
ON SCHEDULE EVERY 1 HOUR
DO DELETE FROM USER_SESSIONS WHERE expires_at < NOW();
CREATE EVENT purge_old_logs
ON SCHEDULE EVERY 1 DAY
DO DELETE FROM USER_ACTIVITY_LOG WHERE created_at < DATE_SUB(NOW(), INTERVAL 3 YEAR);
7. การปรับขนาดและประสิทธิภาพ (Scalability & Performance)
7.1 Partitioning Strategy
7.1.1 Time-based Partitioning
-- Partition audit trail by month
CREATE TABLE AUDIT_TRAIL (
audit_id UUID PRIMARY KEY,
event_timestamp DATETIME NOT NULL,
-- other fields...
) PARTITION BY RANGE (YEAR(event_timestamp) * 100 + MONTH(event_timestamp)) (
PARTITION p202410 VALUES LESS THAN (202411),
PARTITION p202411 VALUES LESS THAN (202412),
PARTITION p202412 VALUES LESS THAN (202501),
-- จะเพิ่มอัตโนมัติ
);
7.1.2 Hash Partitioning
-- Partition integration logs by system_id
CREATE TABLE INTEGRATION_LOGS (
log_id UUID PRIMARY KEY,
system_id UUID NOT NULL,
-- other fields...
) PARTITION BY HASH(system_id) PARTITIONS 8;
7.2 Caching Strategy
7.2.1 Application-Level Caching
- User Sessions: Redis cache with TTL
- Permissions: In-memory cache with 5-minute TTL
- System Config: In-memory cache with 1-hour TTL
- Master Data: Redis cache with 24-hour TTL
7.2.2 Database Query Caching
-- Enable query cache for frequently accessed data
SET SESSION query_cache_type = ON;
SET SESSION query_cache_size = 268435456; -- 256MB
7.3 Read Replicas
7.3.1 Read/Write Splitting
- Master Database: Write operations และ critical reads
- Read Replica 1: Reporting และ analytics
- Read Replica 2: API integrations และ monitoring
7.3.2 Connection Pooling
{
"master": {
"min_connections": 10,
"max_connections": 100,
"max_lifetime": 3600
},
"replica": {
"min_connections": 5,
"max_connections": 50,
"max_lifetime": 7200
}
}
8. สรุปและข้อแนะนำการใช้งาน
8.1 หลักการออกแบบ
- Security First: ทุกตารางออกแบบโดยคำนึงถึงความปลอดภัยเป็นหลัก
- AWS IAM Compliance: ใช้หลักการ IAM ของ AWS ในการออกแบบ Access Control
- Audit Everything: มี Audit Trail ครอบคลุมทุกการเปลี่ยนแปลง
- Scalable Design: ออกแบบให้รองรับการขยายในอนาคต
- Performance Optimized: มี Index และ Caching Strategy ที่เหมาะสม
8.2 Best Practices
8.2.1 การใช้งาน Primary Keys
- ใช้ UUID สำหรับทุก Primary Key
- หลีกเลี่ยง Auto-increment เพื่อความปลอดภัย
- ใช้ Foreign Key Constraints เพื่อ Data Integrity
8.2.2 การจัดการ Timestamps
- ใช้ UTC timezone สำหรับการเก็บ
- แปลงเป็น Local timezone เมื่อแสดงผล
- มี created_at และ updated_at ในทุกตารางหลัก
8.2.3 การจัดการ JSON Fields
- Validate JSON schema ก่อนบันทึก
- Index JSON fields ที่มีการ query บ่อย
- ใช้ Virtual Columns สำหรับ JSON extractions
8.3 Implementation Roadmap
8.3.1 Phase 1: Core IAM (เดือนที่ 1-2)
- USERS, GROUPS, ROLES tables
- Basic authentication และ authorization
- User management interfaces
8.3.2 Phase 2: Configuration & Monitoring (เดือนที่ 3-4)
- SYSTEM_CONFIG, MASTER_DATA tables
- Audit trail และ activity logging
- Basic reporting
8.3.3 Phase 3: Advanced Features (เดือนที่ 5-6)
- MFA implementation
- Advanced reporting และ analytics
- API integrations
8.3.4 Phase 4: Integration & Optimization (เดือนที่ 7-8)
- HIS systems integration
- Performance optimization
- Security hardening
🎯 สรุป: ERD ของระบบผู้ดูแลระบบนี้ออกแบบให้เป็น Central Command Center ที่สามารถจัดการและควบคุมระบบ HIS ทั้งหมดได้อย่างปลอดภัย มีประสิทธิภาพ และสอดคล้องกับมาตรฐานสากลในด้าน Identity and Access Management
---
```