PLM 데이터베이스 구조 다이어그램
생성일: 2026-01-22 | 총 테이블: 164개 | 코드 기반 관계 분석 완료
사용자 화면 플로우 (User Flow)
1. 로그인 → 메뉴 → 화면 접근 플로우
flowchart LR
subgraph LOGIN["🔐 로그인"]
A[사용자 로그인] --> B{user_info 인증}
B -->|성공| C[company_code 확인]
B -->|실패| D[login_access_log 기록]
end
subgraph COMPANY["🏢 회사 분기"]
C --> E{company_code 타입}
E -->|"*"| F[최고관리자 SUPER_ADMIN]
E -->|회사코드| G[회사관리자/일반사용자]
F --> H[company_mng 회사정보 조회]
G --> H
H --> I[JWT 토큰 발급 + companyCode 포함]
end
subgraph AUTH["👤 권한 확인"]
I --> J[authority_sub_user 조회]
J --> K[authority_master 권한 확인]
end
subgraph MENU["📋 메뉴 로딩"]
K --> L[rel_menu_auth 메뉴권한 조회]
L --> M[menu_info 메뉴 목록]
M -->|company_code 필터| N[해당 회사 메뉴만 표시]
end
subgraph SCREEN["📱 화면 렌더링"]
N -->|메뉴 클릭| O[screen_menu_assignments 조회]
O --> P[screen_definitions 화면정의]
P --> Q[screen_layouts 레이아웃]
Q --> R[table_type_columns 컬럼정보]
R -->|company_code 필터| S[해당 회사 데이터만 조회]
end
2. Low-code 화면 데이터 조회 플로우
flowchart TB
subgraph USER["👤 사용자 액션"]
A[화면 접속] --> B[데이터 조회 요청]
end
subgraph SCREEN_DEF["📱 화면 정의 조회"]
B --> C[screen_definitions]
C --> D[screen_layouts]
D --> E{위젯 타입 확인}
end
subgraph TABLE_INFO["🏷️ 테이블 정보"]
E -->|테이블 위젯| F[table_type_columns]
F --> G[table_labels 라벨]
F --> H[table_column_category_values 카테고리]
F --> I[table_relationships 관계]
end
subgraph DATA_QUERY["📊 데이터 조회"]
G --> J[동적 SQL 생성]
H --> J
I --> J
J --> K[실제 비즈니스 테이블 조회]
K --> L[데이터 반환]
end
subgraph RENDER["🖥️ 화면 표시"]
L --> M[그리드/폼에 데이터 바인딩]
M --> N[사용자에게 표시]
end
3. 플로우 시스템 데이터 이동 플로우
flowchart LR
subgraph FLOW_DEF["🔄 플로우 정의"]
A[flow_definition] --> B[flow_step]
B --> C[flow_step_connection]
end
subgraph USER_ACTION["👤 사용자 액션"]
D[데이터 선택] --> E[이동 버튼 클릭]
end
subgraph MOVE_PROCESS["📤 데이터 이동"]
E --> F{flow_step_connection 다음 스텝 확인}
F --> G[flow_data_mapping 매핑]
G --> H[소스 테이블에서 데이터 복사]
H --> I[타겟 테이블에 INSERT]
end
subgraph LOGGING["📝 로깅"]
I --> J[flow_audit_log 기록]
J --> K[flow_data_status 상태 업데이트]
end
subgraph RESULT["✅ 결과"]
K --> L[화면 새로고침]
L --> M[이동된 데이터 표시]
end
4. 배치 실행 플로우
flowchart TB
subgraph TRIGGER["⏰ 트리거"]
A[스케줄러 cron] --> B[batch_configs 조회]
B --> C{활성화 여부}
end
subgraph CONNECTION["🔌 연결"]
C -->|활성| D[external_db_connections]
D --> E[외부 DB 연결]
end
subgraph MAPPING["🗺️ 매핑"]
E --> F[batch_mappings 조회]
F --> G[소스 테이블 → 타겟 테이블]
end
subgraph EXECUTION["⚡ 실행"]
G --> H[외부 DB에서 데이터 조회]
H --> I[내부 DB에 동기화]
I --> J[batch_execution_logs 기록]
end
subgraph RESULT["📊 결과"]
J --> K{성공/실패}
K -->|성공| L[다음 스케줄 대기]
K -->|실패| M[에러 로그 기록]
end
5. 화면 간 데이터 전달 플로우
flowchart LR
subgraph PARENT["📱 부모 화면"]
A[screen_definitions A] --> B[그리드에서 행 선택]
B --> C[선택된 데이터]
end
subgraph TRANSFER["🔗 데이터 전달"]
C --> D[screen_embedding 관계 확인]
D --> E[screen_data_transfer 설정]
E --> F{전달 필드 매핑}
end
subgraph CHILD["📱 자식 화면"]
F --> G[screen_definitions B]
G --> H[필터 조건으로 적용]
H --> I[관련 데이터만 조회]
I --> J[자식 화면에 표시]
end
6. 캐스케이딩 선택 플로우
flowchart TB
subgraph SELECT1["1️⃣ 첫 번째 선택"]
A[사용자가 대분류 선택] --> B[cascading_hierarchy_group]
end
subgraph CASCADE["🔗 캐스케이딩"]
B --> C[cascading_hierarchy_level 조회]
C --> D[cascading_relation 관계 확인]
D --> E[하위 레벨 옵션 필터링]
end
subgraph SELECT2["2️⃣ 두 번째 선택"]
E --> F[중분류 옵션만 표시]
F --> G[사용자가 중분류 선택]
end
subgraph SELECT3["3️⃣ 세 번째 선택"]
G --> H[소분류 옵션 필터링]
H --> I[소분류 옵션만 표시]
I --> J[최종 선택 완료]
end
subgraph AUTOFILL["✨ 자동 채움"]
J --> K[cascading_auto_fill_mapping]
K --> L[관련 필드 자동 입력]
end
핵심 테이블 관계도 (ER Diagram)
1. 사용자/권한 시스템
erDiagram
company_mng ||--o{ user_info : "company_code"
company_mng ||--o{ dept_info : "company_code"
user_info ||--o{ user_dept : "user_id"
dept_info ||--o{ user_dept : "dept_code"
authority_master ||--o{ authority_sub_user : "objid → master_objid"
user_info ||--o{ authority_sub_user : "user_id"
authority_master ||--o{ authority_master_history : "objid"
user_info ||--o{ user_info_history : "user_id"
user_info ||--o{ auth_tokens : "user_id"
user_info ||--o{ login_access_log : "user_id"
authority_master ||--o{ rel_menu_auth : "auth_group_id"
menu_info ||--o{ rel_menu_auth : "menu_objid"
user_info {
string user_id PK
string company_code
string user_name
}
authority_master {
int objid PK
string company_code
string auth_group_name
}
company_mng {
string company_code PK
string company_name
}
2. 메뉴/화면 시스템
erDiagram
menu_info ||--o{ screen_menu_assignments : "objid → menu_objid"
screen_definitions ||--o{ screen_menu_assignments : "screen_id"
screen_definitions ||--|| screen_layouts : "screen_id"
screen_groups ||--o{ screen_group_screens : "id → group_id"
screen_definitions ||--o{ screen_group_screens : "screen_id"
menu_info ||--o{ menu_screen_groups : "objid → menu_objid"
menu_screen_groups ||--o{ menu_screen_group_items : "id → group_id"
screen_definitions ||--o{ screen_data_flows : "source/target_screen_id"
screen_groups ||--o{ screen_data_flows : "group_id"
screen_definitions ||--o{ screen_table_relations : "screen_id"
screen_groups ||--o{ screen_table_relations : "group_id"
screen_definitions ||--o{ screen_field_joins : "screen_id"
screen_definitions ||--o{ screen_embedding : "parent/child_screen_id"
screen_embedding ||--o{ screen_split_panel : "left/right_embedding_id"
screen_embedding ||--o{ screen_data_transfer : "source/target"
screen_definitions {
uuid screen_id PK
string company_code
string screen_name
string table_name
}
screen_layouts {
uuid screen_id PK_FK
jsonb layout_metadata
}
menu_info {
int objid PK
string company_code
string menu_name
string menu_url
}
3. 플로우 시스템
erDiagram
flow_definition ||--o{ flow_step : "id → definition_id"
flow_step ||--o{ flow_step_connection : "id → from/to_step_id"
flow_step ||--o{ flow_audit_log : "id → from/to_step_id"
flow_step ||--o{ flow_data_mapping : "step_id"
flow_step ||--o{ flow_data_status : "step_id"
flow_definition ||--o{ flow_integration_log : "definition_id"
flow_definition ||--o{ node_flows : "definition_id"
flow_definition ||--o{ dataflow_diagrams : "definition_id"
flow_definition ||--o{ flow_external_db_connection : "definition_id"
flow_definition {
int id PK
string company_code
string name
string description
}
flow_step {
int id PK
int definition_id
string step_name
string table_name
}
flow_step_connection {
int id PK
int from_step_id
int to_step_id
}
4. 테이블타입/코드 시스템
erDiagram
table_type_columns ||--o{ table_labels : "table_name, column_name"
table_type_columns ||--o{ table_column_category_values : "table_name, column_name"
table_type_columns ||--o{ category_column_mapping : "table_name, column_name"
table_type_columns ||--o{ table_relationships : "table_name"
table_type_columns ||--o{ table_log_config : "original_table_name"
code_category ||--o{ code_info : "category_code"
cascading_hierarchy_group ||--o{ cascading_hierarchy_level : "group_code"
cascading_hierarchy_group ||--o{ cascading_relation : "group_code"
cascading_auto_fill_group ||--o{ cascading_auto_fill_mapping : "group_code"
category_value_cascading_group ||--o{ category_value_cascading_mapping : "group_id"
language_master ||--o{ multi_lang_category : "lang_code"
table_type_columns {
string table_name PK
string column_name PK
string company_code PK
string display_name
string data_type
}
code_category {
string category_code PK
string company_code PK
string category_name
}
code_info {
string category_code PK_FK
string code_value PK
string company_code PK
string code_name
}
5. 배치/수집 시스템
erDiagram
batch_configs ||--o{ batch_mappings : "id → config_id"
batch_configs ||--o{ batch_execution_logs : "id → config_id"
external_db_connections ||--o{ batch_configs : "connection_id"
external_db_connections ||--o{ data_collection_configs : "connection_id"
data_collection_configs ||--o{ data_collection_jobs : "id → config_id"
data_collection_jobs ||--o{ data_collection_history : "job_id"
external_rest_api_connections ||--o{ external_call_configs : "connection_id"
batch_configs {
int id PK
string company_code
string batch_name
string cron_expression
}
external_db_connections {
int id PK
string company_code
string connection_name
string db_type
}
6. 업무 도메인 (동적 관계)
erDiagram
customer_mng ||--o{ sales_order_mng : "customer_code"
sales_order_mng ||--o{ sales_order_detail : "order_id"
supplier_mng ||--o{ purchase_order_mng : "supplier_code"
purchase_order_mng ||--o{ purchase_detail : "order_id"
warehouse_info ||--o{ warehouse_location : "warehouse_code"
warehouse_info ||--o{ inventory_stock : "warehouse_code"
inventory_stock ||--o{ inventory_history : "stock_id"
item_info ||--o{ item_routing_version : "item_code"
item_routing_version ||--o{ item_routing_detail : "version_id"
process_mng ||--o{ process_equipment : "process_code"
carrier_mng ||--o{ carrier_vehicle_mng : "carrier_code"
carrier_mng ||--o{ carrier_contract_mng : "carrier_code"
vehicles ||--o{ vehicle_locations : "vehicle_id"
vehicles ||--o{ vehicle_location_history : "vehicle_id"
equipment_mng ||--o{ equipment_consumable : "equipment_code"
equipment_mng ||--o{ maintenance_schedules : "equipment_code"
전체 구조 개요
graph TB
subgraph SYSTEM["🔐 시스템/인증 (11개)"]
AUTH[authority_master
authority_sub_user
rel_menu_auth]
USER[user_info
user_dept
auth_tokens]
ORG[company_mng
dept_info]
end
subgraph SCREEN["📱 메뉴/화면 (18개)"]
MENU[menu_info
menu_screen_groups]
SCR[screen_definitions
screen_layouts
screen_groups]
DASH[dashboards
dashboard_elements]
end
subgraph CODE["🏷️ 테이블타입/코드 (20개)"]
TTC[table_type_columns
table_labels
table_relationships]
CODE_M[code_category
code_info]
CASC[cascading_*]
end
subgraph FLOW["🔄 플로우 (10개)"]
FLOW_DEF[flow_definition
flow_step
flow_step_connection]
FLOW_DATA[flow_data_mapping
flow_audit_log]
end
subgraph BATCH["⚙️ 배치/수집 (9개)"]
BATCH_CFG[batch_configs
batch_mappings]
EXT_CONN[external_db_connections
external_rest_api_connections]
end
subgraph DOMAIN["📊 업무도메인 (69개)"]
SALES[영업/구매 17개]
PROD[생산/품질 20개]
LOGI[물류/창고 8개]
TRANS[차량/운송 16개]
EQUIP[설비/안전 8개]
end
USER --> AUTH
MENU --> SCR
SCR --> TTC
FLOW_DEF --> FLOW_DATA
BATCH_CFG --> EXT_CONN
카테고리별 테이블 수
| 카테고리 | 테이블 수 |
| 🔐 시스템/인증 | 11개 |
| 📱 메뉴/화면 | 18개 |
| 🏷️ 테이블타입/코드 | 20개 |
| 🔄 플로우 | 10개 |
| ⚙️ 배치/수집 | 9개 |
| 📊 보고서 | 5개 |
| 📦 물류/창고 | 8개 |
| 🏭 생산/품질 | 20개 |
| 💰 영업/구매 | 17개 |
| 🔧 설비/안전 | 8개 |
| 🚛 차량/운송 | 16개 |
| 📁 기타 | 22개 |
| 총계 | 164개 |