통합 ERD v2
- [0. 통합 ERD](./0.integrated-ERD.md)
카테고리: guide | 읽기시간: 27분 | 원문: 다운로드
통합 ERD v2
문서 목차
- 0. 통합 ERD
- 1. 고객 계정 관리 ERD
- 2. 위성 자산 관리 ERD
- 3. 궤도 지상국 운영 ERD
- 4. 촬영 요청 Feasibility 평가 ERD
- 5. 스케줄링 실행 통제 ERD
- 6. 데이터 상품 다운링크 전달 ERD
- 7. 감사 추적 ERD
통합 기준
modleing-ERD-v2.md를 운영 기준 베이스로 사용modeling-feasibility-v2.md의 평가 실행, 스냅샷, 체크, 확률, 리뷰, 리포트 계층을 병합- 중복 엔터티는 더 풍부한 속성을 채택하고 관계는 양쪽 문서의 의미를 유지하도록 정규화
공통 핵심 엔터티
- 두 문서 공통:
TENANT,IMAGING_REQUEST,SATELLITE,GROUND_STATION,VISIBILITY_PASS,IMAGING_CANDIDATE,AUDIT_LOG - 운영 확장: 사용자/권한, 위성 프로파일, 스케줄링, 명령, 상품/전송/과금
- 평가 확장:
FEASIBILITY_RUN, 스냅샷, 체크 결과, 확률 추정, 리뷰/리스크, feasibility 리포트
업무 도메인 구분
본 v2 문서는 테이블을 단순 기술 분류가 아니라 실제 업무 흐름 기준으로 다음 7개 업무 도메인으로 구분한다.
고객/계정 관리: 테넌트, 고객, 사용자, 권한, API 인증 관리위성/자산 관리: 위성 마스터, 촬영/통신/제약 프로파일 관리궤도/지상국 운영: 궤도 원천, TLE, 패스 계산, 지상국/안테나/세션 관리촬영 요청/Feasibility 평가: 촬영 요청 접수, AOI 분할, feasibility 실행, 후보 생성, 체크, 확률, 리뷰, 리스크, 보고서스케줄링/실행 통제: 일정 생성, 슬롯 운영, 명령 요청 및 실행 통제데이터 상품/다운링크/전달: 데이터 상품 생성, 다운링크 실행 계획, 처리, 카탈로그, 전달, 과금감사/추적: 전 업무 도메인의 공통 감사 로그와 상관관계 추적
테이블-업무 도메인 매핑
| 업무 도메인 | 주요 책임 | 포함 테이블 |
|---|---|---|
| 고객/계정 관리 | 조직, 사용자, 접근 권한, 인증 키 관리 | TENANT, CUSTOMER, USER_ACCOUNT, ROLE, USER_ROLE, API_KEY |
| 위성/자산 관리 | 위성 자산과 운용 특성 관리 | SATELLITE, SATELLITE_PROFILE_SET, IMAGING_PROFILE, COMM_PROFILE, CONSTRAINT_PROFILE |
| 궤도/지상국 운영 | 궤도 원천, 패스, 지상국 및 접촉 세션 운영 | ORBIT_SOURCE, TLE, GROUND_STATION, VISIBILITY_PASS, ANTENNA_RESOURCE, CONTACT_SESSION |
| 촬영 요청/Feasibility 평가 | 요청 접수부터 가능성 평가와 승인 보고서까지의 업무 | IMAGING_REQUEST, AOI_TILE, FEASIBILITY_RUN, ORBIT_SNAPSHOT, WEATHER_SNAPSHOT, OP_CONSTRAINT_SNAPSHOT, IMAGING_CANDIDATE, FEASIBILITY_CRITERION, FEASIBILITY_CHECK_RESULT, CONFLICT_ANALYSIS, CONFLICT_ITEM, PROBABILITY_MODEL, PROBABILITY_ESTIMATE, MODEL_EVIDENCE_LINEAGE, CLOUD_COVER_ESTIMATE, DOWNLINK_WINDOW_CANDIDATE, DOWNLINK_FEASIBILITY, REVIEW_TASK, REVIEW_DECISION, RISK_REGISTER, FEASIBILITY_REPORT, REPORT_ATTACHMENT |
| 스케줄링/실행 통제 | 촬영/운용 일정 수립과 명령 실행 통제 | SCHEDULE_RUN, SCHEDULE_SLOT, SCHEDULE_SLOT_HISTORY, COMMAND_DICTIONARY, COMMAND_REQUEST, COMMAND_EXECUTION |
| 데이터 상품/다운링크/전달 | 생성물 관리, 다운링크, 처리, 카탈로그, 배송, 과금 | DOWNLINK_REQUEST, DOWNLINK_PLAN, DATA_PRODUCT, PRODUCT_DERIVATION, PROCESS_JOB, CATALOG_ITEM, DELIVERY_ORDER, BILLING_RECORD |
| 감사/추적 | 전사 공통 감사 및 상관관계 추적 | AUDIT_LOG |
서브 도메인별 업무 설명
1. 고객/계정 관리
테넌트 관리: 고객사 또는 조직 단위의 시스템 경계, 운영 상태, 정책 적용 범위를 관리한다.고객 계정 관리: 계약 단위 고객, 청구 대상, 서비스 사용 주체를 관리한다.사용자/권한 관리: 사용자 계정 생성, 역할 부여, 승인 권한과 리뷰 권한을 통제한다.API 인증 관리: 외부 시스템 연동용 키 발급, 만료, 상태 관리와 호출 주체 식별을 담당한다.
2. 위성/자산 관리
위성 마스터 관리: 위성 식별 정보, 임무 유형, 수명 주기 상태를 관리한다.촬영 프로파일 관리: 센서 모드, 해상도, 촬영 폭, 오프나딜 한계를 관리한다.통신 프로파일 관리: 업링크/다운링크 주파수와 전송 성능을 관리한다.운용 제약 관리: 일일 촬영 시간, 다운링크 용량, 저장 용량 등 자원 한계를 관리한다.
3. 궤도/지상국 운영
궤도 원천 관리: TLE 또는 기타 궤도 입력의 원천과 수집 상태를 관리한다.패스 계산 관리: 위성-지상국 가시 구간을 계산하고 예측 이력을 유지한다.지상국 자원 관리: 지상국, 안테나, 밴드 가용성을 운영한다.접촉 세션 운영: 명령 전송과 다운링크가 수행될 실제 세션을 계획 및 추적한다.
4. 촬영 요청 / Feasibility 평가
요청 접수: 고객 요구조건, AOI, 시간창, 품질 제약, SLA를 등록한다.AOI 분할: 대면적 요청을 평가 가능한 타일 단위로 쪼개 후보 폭을 제어한다.평가 실행 관리: 특정 시점의 궤도, 기상, 제약 스냅샷으로 feasibility 실행을 고정한다.후보 생성 및 체크: 후보 촬영안을 만들고 평가 기준별 PASS/FAIL/WARN을 산출한다.확률/품질 추정: 성공 확률, 구름량, 정시 납기 가능성을 모델 기반으로 추정한다.리뷰 및 승인: 자동 평가 결과를 사람이 검토하고 승인, 반려, 조건부 승인을 결정한다.리스크/보고서 관리: 리스크와 완화 계획을 기록하고 공식 feasibility 보고서를 생성한다.
5. 스케줄링 / 실행 통제
스케줄 실행: 특정 horizon 내 촬영/다운링크/유휴 슬롯을 생성하고 최적화한다.슬롯 변경 이력 관리: 슬롯의 상태 전이와 수동 개입 이력을 추적한다.명령 사전 관리: 허용된 명령 유형과 스키마를 통제한다.명령 요청/승인/실행: 명령 요청부터 승인, 실제 세션 전송과 결과 수집까지 관리한다.
6. 데이터 상품 / 다운링크 / 전달
상품 원장 관리: 실제 촬영 결과물의 수준, 포맷, 저장 위치, 무결성을 관리한다.다운링크 실행 계획: 상품을 어떤 세션으로 내릴지 계획하고 전송량을 산정한다.처리 파이프라인 운영: 가공, 정사보정, 파생 생성 등 처리 작업을 실행한다.카탈로그/전달 관리: 검색 노출과 외부 전달 주문을 관리한다.과금 관리: 요청 또는 상품 기준으로 비용을 산정하고 청구 이력을 기록한다.
7. 감사 / 추적
행위 감사: 사용자, 시스템, API 호출의 주요 행위를 엔터티 단위로 기록한다.상관관계 추적: 요청부터 평가, 실행, 상품, 과금까지 하나의correlation_id흐름으로 추적한다.분쟁/규제 대응: 누가 언제 어떤 판단과 실행을 했는지 증빙 자료를 제공한다.
도메인 그룹 뷰 (Mermaid)
erDiagram은 도메인별 그룹 박스를 직접 표현하기에 제약이 있어, 업무 도메인 박스는 flowchart의 subgraph로 별도 표현한다. 이 뷰는 도메인 경계와 주요 연계를 빠르게 파악하기 위한 상위 차트다.
flowchart LR subgraph D1["고객/계정 관리"] TENANT_N["TENANT"] CUSTOMER_N["CUSTOMER"] USER_N["USER_ACCOUNT"] ROLE_N["ROLE"] USER_ROLE_N["USER_ROLE"] API_KEY_N["API_KEY"] end subgraph D2["위성/자산 관리"] SATELLITE_N["SATELLITE"] PROFILE_SET_N["SATELLITE_PROFILE_SET"] IMG_PROFILE_N["IMAGING_PROFILE"] COMM_PROFILE_N["COMM_PROFILE"] CONSTRAINT_PROFILE_N["CONSTRAINT_PROFILE"] end subgraph D3["궤도/지상국 운영"] ORBIT_SOURCE_N["ORBIT_SOURCE"] TLE_N["TLE"] GROUND_N["GROUND_STATION"] PASS_N["VISIBILITY_PASS"] ANTENNA_N["ANTENNA_RESOURCE"] SESSION_N["CONTACT_SESSION"] end subgraph D4["촬영 요청 / Feasibility 평가"] REQUEST_N["IMAGING_REQUEST"] TILE_N["AOI_TILE"] FEAS_RUN_N["FEASIBILITY_RUN"] ORBIT_SNAP_N["ORBIT_SNAPSHOT"] WEATHER_SNAP_N["WEATHER_SNAPSHOT"] CONSTRAINT_SNAP_N["OP_CONSTRAINT_SNAPSHOT"] CANDIDATE_N["IMAGING_CANDIDATE"] CRITERION_N["FEASIBILITY_CRITERION"] CHECK_N["FEASIBILITY_CHECK_RESULT"] CONFLICT_N["CONFLICT_ANALYSIS / CONFLICT_ITEM"] PROB_N["PROBABILITY_MODEL / PROBABILITY_ESTIMATE / MODEL_EVIDENCE_LINEAGE"] CLOUD_N["CLOUD_COVER_ESTIMATE"] DL_FEAS_N["DOWNLINK_WINDOW_CANDIDATE / DOWNLINK_FEASIBILITY"] REVIEW_N["REVIEW_TASK / REVIEW_DECISION"] RISK_N["RISK_REGISTER"] REPORT_N["FEASIBILITY_REPORT / REPORT_ATTACHMENT"] end subgraph D5["스케줄링 / 실행 통제"] SCHED_RUN_N["SCHEDULE_RUN"] SLOT_N["SCHEDULE_SLOT"] SLOT_HIST_N["SCHEDULE_SLOT_HISTORY"] CMD_DICT_N["COMMAND_DICTIONARY"] CMD_REQ_N["COMMAND_REQUEST"] CMD_EXEC_N["COMMAND_EXECUTION"] end subgraph D6["데이터 상품 / 다운링크 / 전달"] DL_REQ_N["DOWNLINK_REQUEST"] DL_PLAN_N["DOWNLINK_PLAN"] PRODUCT_N["DATA_PRODUCT"] DERIVE_N["PRODUCT_DERIVATION"] JOB_N["PROCESS_JOB"] CATALOG_N["CATALOG_ITEM"] DELIVERY_N["DELIVERY_ORDER"] BILLING_N["BILLING_RECORD"] end subgraph D7["감사 / 추적"] AUDIT_N["AUDIT_LOG"] end TENANT_N --> REQUEST_N CUSTOMER_N --> REQUEST_N USER_N --> FEAS_RUN_N ROLE_N --> USER_ROLE_N USER_N --> USER_ROLE_N TENANT_N --> API_KEY_N SATELLITE_N --> PROFILE_SET_N PROFILE_SET_N --> IMG_PROFILE_N PROFILE_SET_N --> COMM_PROFILE_N PROFILE_SET_N --> CONSTRAINT_PROFILE_N ORBIT_SOURCE_N --> TLE_N SATELLITE_N --> TLE_N SATELLITE_N --> PASS_N GROUND_N --> PASS_N GROUND_N --> ANTENNA_N SATELLITE_N --> SESSION_N GROUND_N --> SESSION_N ANTENNA_N --> SESSION_N REQUEST_N --> TILE_N REQUEST_N --> FEAS_RUN_N FEAS_RUN_N --> ORBIT_SNAP_N FEAS_RUN_N --> WEATHER_SNAP_N FEAS_RUN_N --> CONSTRAINT_SNAP_N REQUEST_N --> CANDIDATE_N FEAS_RUN_N --> CANDIDATE_N PASS_N --> CANDIDATE_N SATELLITE_N --> CANDIDATE_N TILE_N --> CANDIDATE_N CANDIDATE_N --> CHECK_N CRITERION_N --> CHECK_N CANDIDATE_N --> CONFLICT_N CANDIDATE_N --> PROB_N WEATHER_SNAP_N --> CLOUD_N CANDIDATE_N --> CLOUD_N CANDIDATE_N --> DL_FEAS_N FEAS_RUN_N --> REVIEW_N FEAS_RUN_N --> RISK_N FEAS_RUN_N --> REPORT_N CANDIDATE_N --> SLOT_N SCHED_RUN_N --> SLOT_N SLOT_N --> SLOT_HIST_N CMD_DICT_N --> CMD_REQ_N USER_N --> CMD_REQ_N SATELLITE_N --> CMD_REQ_N CMD_REQ_N --> CMD_EXEC_N SESSION_N --> CMD_EXEC_N REQUEST_N --> PRODUCT_N SATELLITE_N --> PRODUCT_N PRODUCT_N --> DERIVE_N PRODUCT_N --> JOB_N PRODUCT_N --> CATALOG_N PRODUCT_N --> DELIVERY_N PRODUCT_N --> DL_REQ_N DL_REQ_N --> DL_PLAN_N SESSION_N --> DL_PLAN_N CUSTOMER_N --> BILLING_N REQUEST_N --> BILLING_N PRODUCT_N --> BILLING_N TENANT_N --> AUDIT_N REQUEST_N --> AUDIT_N FEAS_RUN_N --> AUDIT_N SLOT_N --> AUDIT_N CMD_EXEC_N --> AUDIT_N PRODUCT_N --> AUDIT_N style D1 fill:#f6efe3,stroke:#8a6a2f,stroke-width:2px,color:#2b2418 style D2 fill:#e7f4ea,stroke:#31724b,stroke-width:2px,color:#173322 style D3 fill:#eaf3fb,stroke:#2f6e96,stroke-width:2px,color:#173245 style D4 fill:#fff2dc,stroke:#b6771f,stroke-width:2px,color:#4b3412 style D5 fill:#f2eafd,stroke:#7050a8,stroke-width:2px,color:#2f1f52 style D6 fill:#e8f7f4,stroke:#2c8170,stroke-width:2px,color:#163832 style D7 fill:#f4f4f4,stroke:#666666,stroke-width:2px,color:#222222 classDef tenant fill:#fcf7ef,stroke:#8a6a2f,color:#2b2418,stroke-width:1px classDef asset fill:#eef8f0,stroke:#31724b,color:#173322,stroke-width:1px classDef orbit fill:#eef6fc,stroke:#2f6e96,color:#173245,stroke-width:1px classDef tasking fill:#fff7ea,stroke:#b6771f,color:#4b3412,stroke-width:1px classDef sched fill:#f7f1fe,stroke:#7050a8,color:#2f1f52,stroke-width:1px classDef product fill:#edf9f7,stroke:#2c8170,color:#163832,stroke-width:1px classDef audit fill:#f7f7f7,stroke:#666666,color:#222222,stroke-width:1px class TENANT_N,CUSTOMER_N,USER_N,ROLE_N,USER_ROLE_N,API_KEY_N tenant class SATELLITE_N,PROFILE_SET_N,IMG_PROFILE_N,COMM_PROFILE_N,CONSTRAINT_PROFILE_N asset class ORBIT_SOURCE_N,TLE_N,GROUND_N,PASS_N,ANTENNA_N,SESSION_N orbit class REQUEST_N,TILE_N,FEAS_RUN_N,ORBIT_SNAP_N,WEATHER_SNAP_N,CONSTRAINT_SNAP_N,CANDIDATE_N,CRITERION_N,CHECK_N,CONFLICT_N,PROB_N,CLOUD_N,DL_FEAS_N,REVIEW_N,RISK_N,REPORT_N tasking class SCHED_RUN_N,SLOT_N,SLOT_HIST_N,CMD_DICT_N,CMD_REQ_N,CMD_EXEC_N sched class DL_REQ_N,DL_PLAN_N,PRODUCT_N,DERIVE_N,JOB_N,CATALOG_N,DELIVERY_N,BILLING_N product class AUDIT_N audit
상세 통합 ERD (Mermaid)
erDiagram
%% =========================
%% IDENTITY / TENANT DOMAIN
%% =========================
TENANT {
uuid tenant_id PK
string tenant_name
string tenant_type
string status
datetime created_at
}
CUSTOMER {
uuid customer_id PK
uuid tenant_id FK
string customer_name
string billing_type
string status
datetime created_at
}
USER_ACCOUNT {
uuid user_id PK
uuid tenant_id FK
string email
string display_name
string status
datetime created_at
}
ROLE {
uuid role_id PK
string role_name
string description
}
USER_ROLE {
uuid user_role_id PK
uuid user_id FK
uuid role_id FK
datetime granted_at
}
API_KEY {
uuid api_key_id PK
uuid tenant_id FK
string key_hash
string status
datetime issued_at
datetime expires_at
}
%% =========================
%% SATELLITE / ASSET DOMAIN
%% =========================
SATELLITE {
uuid satellite_id PK
string name
int norad_id
string cospar_id
string orbit_type
string mission_type
string status
datetime launch_date
datetime eol_estimated_at
}
SATELLITE_PROFILE_SET {
uuid profile_set_id PK
uuid satellite_id FK
uuid imaging_profile_id FK
uuid comm_profile_id FK
uuid constraint_profile_id FK
datetime effective_from
datetime effective_to
}
IMAGING_PROFILE {
uuid imaging_profile_id PK
string sensor_type
string mode_code
float gsd_m
float swath_km
float max_off_nadir_deg
float slew_rate_deg_per_sec
float min_sun_elev_deg
boolean night_support
}
COMM_PROFILE {
uuid comm_profile_id PK
string uplink_freq
string downlink_freq
float data_rate_mbps
string modulation
string crypto_mode
}
CONSTRAINT_PROFILE {
uuid constraint_profile_id PK
float max_daily_imaging_time_min
float max_daily_downlink_volume_gb
float storage_capacity_gb
}
%% =========================
%% ORBIT / GROUND DOMAIN
%% =========================
ORBIT_SOURCE {
uuid orbit_source_id PK
string source_type
string provider
string status
datetime last_ingested_at
}
TLE {
uuid tle_id PK
uuid satellite_id FK
uuid orbit_source_id FK
datetime epoch_time
string line1
string line2
datetime ingested_at
}
GROUND_STATION {
uuid station_id PK
string name
float latitude
float longitude
float altitude
string status
}
VISIBILITY_PASS {
uuid pass_id PK
uuid satellite_id FK
uuid station_id FK
uuid orbit_source_id FK
datetime aos_time
datetime los_time
float max_elevation_deg
datetime predicted_at
}
ANTENNA_RESOURCE {
uuid antenna_id PK
uuid station_id FK
string antenna_name
string band_capability
string status
}
CONTACT_SESSION {
uuid session_id PK
uuid satellite_id FK
uuid station_id FK
uuid antenna_id FK
datetime planned_start
datetime planned_end
datetime actual_start
datetime actual_end
string session_type
string status
}
%% =========================
%% TASKING / FEASIBILITY DOMAIN
%% =========================
IMAGING_REQUEST {
uuid request_id PK
uuid tenant_id FK
uuid customer_id FK
geometry aoi_geom
datetime time_window_start
datetime time_window_end
int priority
datetime sla_due_time
string product_level
float max_cloud_pct
float max_off_nadir_deg
string status
string reason_code
uuid correlation_id
datetime created_at
}
AOI_TILE {
uuid tile_id PK
uuid request_id FK
int tile_index
geometry tile_geom
float area_km2
string status
datetime created_at
}
FEASIBILITY_RUN {
uuid feas_run_id PK
uuid request_id FK
uuid initiated_by_user_id FK
string run_type
string status
datetime horizon_start
datetime horizon_end
string policy_version
datetime started_at
datetime finished_at
}
ORBIT_SNAPSHOT {
uuid orbit_snap_id PK
uuid feas_run_id FK
string source_type
datetime source_epoch
string source_ref
datetime captured_at
}
WEATHER_SNAPSHOT {
uuid weather_snap_id PK
uuid feas_run_id FK
string provider
datetime forecast_base_time
datetime captured_at
}
OP_CONSTRAINT_SNAPSHOT {
uuid constraint_snap_id PK
uuid feas_run_id FK
string constraint_version
json constraint_json
datetime captured_at
}
IMAGING_CANDIDATE {
uuid candidate_id PK
uuid request_id FK
uuid feas_run_id FK
uuid satellite_id FK
uuid pass_id FK
uuid tile_id FK
string mode_code
datetime predicted_start
datetime predicted_end
float score_value
boolean feasible_flag
string infeasible_reason
float nominal_gsd_m
float predicted_off_nadir_deg
datetime created_at
}
FEASIBILITY_CRITERION {
uuid criterion_id PK
string domain
string criterion_code
string description
string severity
boolean hard_flag
}
FEASIBILITY_CHECK_RESULT {
uuid check_id PK
uuid candidate_id FK
uuid criterion_id FK
string result
float score
string reason_code
json evidence_json
datetime evaluated_at
}
CONFLICT_ANALYSIS {
uuid conflict_id PK
uuid feas_run_id FK
uuid candidate_id FK
string conflict_type
string severity
string resolution_suggestion
float impact_score
datetime analyzed_at
}
CONFLICT_ITEM {
uuid conflict_item_id PK
uuid conflict_id FK
string conflicted_entity_type
uuid conflicted_entity_id
string details
}
PROBABILITY_MODEL {
uuid model_id PK
string model_name
string model_type
string version
string owner
string input_schema_uri
string status
}
PROBABILITY_ESTIMATE {
uuid prob_id PK
uuid candidate_id FK
uuid model_id FK
string target_metric
float probability
float confidence
json feature_json
datetime estimated_at
}
MODEL_EVIDENCE_LINEAGE {
uuid lineage_id PK
uuid prob_id FK
string input_type
string input_ref
string checksum
datetime captured_at
}
CLOUD_COVER_ESTIMATE {
uuid cloud_est_id PK
uuid candidate_id FK
uuid weather_snap_id FK
float cloud_pct_mean
float cloud_pct_p90
string method
datetime estimated_at
}
DOWNLINK_WINDOW_CANDIDATE {
uuid dl_win_id PK
uuid feas_run_id FK
uuid satellite_id FK
uuid station_id FK
uuid pass_id FK
datetime window_start
datetime window_end
float max_elevation_deg
datetime created_at
}
DOWNLINK_FEASIBILITY {
uuid dl_feas_id PK
uuid candidate_id FK
uuid dl_win_id FK
float volume_est_gb
float rate_est_mbps
float on_time_probability
string result
string reason_code
json evidence_json
datetime evaluated_at
}
REVIEW_TASK {
uuid review_task_id PK
uuid feas_run_id FK
uuid assignee_user_id FK
string review_type
string status
datetime assigned_at
datetime due_at
}
REVIEW_DECISION {
uuid decision_id PK
uuid review_task_id FK
uuid decided_by_user_id FK
string decision
string rationale
string risk_level
string conditions
datetime decided_at
}
RISK_REGISTER {
uuid risk_id PK
uuid feas_run_id FK
uuid candidate_id FK
uuid owner_user_id FK
string risk_type
string risk_level
string description
string mitigation_plan
string status
datetime created_at
datetime updated_at
}
FEASIBILITY_REPORT {
uuid report_id PK
uuid feas_run_id FK
string overall_feasibility
float overall_score
float overall_probability
string summary
datetime generated_at
}
REPORT_ATTACHMENT {
uuid attachment_id PK
uuid report_id FK
string file_name
string uri
string checksum
datetime uploaded_at
}
%% =========================
%% SCHEDULING / EXECUTION DOMAIN
%% =========================
SCHEDULE_RUN {
uuid schedule_run_id PK
datetime horizon_start
datetime horizon_end
datetime freeze_from
datetime freeze_to
string objective_policy
string status
datetime created_at
}
SCHEDULE_SLOT {
uuid slot_id PK
uuid schedule_run_id FK
uuid satellite_id FK
uuid candidate_id FK
uuid superseded_by_slot_id
datetime start_time
datetime end_time
string slot_type
string state
int version
boolean locked
datetime created_at
}
SCHEDULE_SLOT_HISTORY {
uuid slot_hist_id PK
uuid slot_id FK
uuid actor_user_id FK
string action
string prev_state
string new_state
datetime changed_at
string reason_code
}
COMMAND_DICTIONARY {
uuid cmd_dict_id PK
string command_type
string schema_version
string validation_rules_uri
string status
}
COMMAND_REQUEST {
uuid cmd_req_id PK
uuid satellite_id FK
uuid tenant_id FK
uuid user_id FK
uuid cmd_dict_id FK
uuid approved_by_user_id FK
string command_type
json payload_json
int priority
string status
uuid correlation_id
datetime requested_at
datetime approved_at
}
COMMAND_EXECUTION {
uuid cmd_exec_id PK
uuid cmd_req_id FK
uuid session_id FK
datetime sent_at
datetime ack_at
string result
string error_code
string raw_log_uri
}
%% =========================
%% PRODUCT / DOWNLINK / DELIVERY DOMAIN
%% =========================
DOWNLINK_REQUEST {
uuid dl_req_id PK
uuid product_id FK
uuid tenant_id FK
datetime required_by_time
int priority
float volume_est_gb
string status
datetime created_at
}
DOWNLINK_PLAN {
uuid dl_plan_id PK
uuid session_id FK
uuid dl_req_id FK
float planned_rate_mbps
float planned_volume_gb
string status
datetime created_at
}
DATA_PRODUCT {
uuid product_id PK
uuid request_id FK
uuid tenant_id FK
uuid satellite_id FK
datetime sensing_time
geometry footprint_geom
string level
string processing_status
string format
string uri
string checksum
datetime created_at
}
PRODUCT_DERIVATION {
uuid derivation_id PK
uuid parent_product_id FK
uuid child_product_id FK
string derivation_type
datetime created_at
}
PROCESS_JOB {
uuid job_id PK
uuid product_id FK
string pipeline_name
string pipeline_version
string status
datetime started_at
datetime finished_at
string log_uri
}
CATALOG_ITEM {
uuid catalog_id PK
uuid product_id FK
uuid tenant_id FK
datetime indexed_at
string stac_item_uri
}
DELIVERY_ORDER {
uuid delivery_id PK
uuid product_id FK
uuid tenant_id FK
string method
string destination
string status
datetime delivered_at
}
BILLING_RECORD {
uuid billing_id PK
uuid tenant_id FK
uuid customer_id FK
uuid request_id FK
uuid product_id FK
string charge_type
float amount
string currency
datetime billed_at
}
%% =========================
%% AUDIT DOMAIN
%% =========================
AUDIT_LOG {
uuid audit_id PK
uuid tenant_id FK
string actor_type
uuid actor_id
string action
string entity_type
uuid entity_id
uuid correlation_id
datetime event_time
json metadata_json
}
%% =========================
%% RELATIONSHIPS
%% =========================
TENANT ||--o{ CUSTOMER : has
TENANT ||--o{ USER_ACCOUNT : has
TENANT ||--o{ API_KEY : issues
USER_ACCOUNT ||--o{ USER_ROLE : granted
ROLE ||--o{ USER_ROLE : includes
SATELLITE ||--o{ SATELLITE_PROFILE_SET : has
SATELLITE_PROFILE_SET }o--|| IMAGING_PROFILE : uses
SATELLITE_PROFILE_SET }o--|| COMM_PROFILE : uses
SATELLITE_PROFILE_SET }o--|| CONSTRAINT_PROFILE : uses
ORBIT_SOURCE ||--o{ TLE : provides
SATELLITE ||--o{ TLE : has
ORBIT_SOURCE ||--o{ VISIBILITY_PASS : basis_for
SATELLITE ||--o{ VISIBILITY_PASS : generates
GROUND_STATION ||--o{ VISIBILITY_PASS : observes
GROUND_STATION ||--o{ ANTENNA_RESOURCE : has
GROUND_STATION ||--o{ CONTACT_SESSION : hosts
ANTENNA_RESOURCE ||--o{ CONTACT_SESSION : uses
SATELLITE ||--o{ CONTACT_SESSION : contacts
TENANT ||--o{ IMAGING_REQUEST : owns
CUSTOMER ||--o{ IMAGING_REQUEST : submits
IMAGING_REQUEST ||--o{ AOI_TILE : splits_into
IMAGING_REQUEST ||--o{ FEASIBILITY_RUN : evaluated_by
USER_ACCOUNT ||--o{ FEASIBILITY_RUN : initiates
FEASIBILITY_RUN ||--o{ ORBIT_SNAPSHOT : captures
FEASIBILITY_RUN ||--o{ WEATHER_SNAPSHOT : captures
FEASIBILITY_RUN ||--o{ OP_CONSTRAINT_SNAPSHOT : captures
IMAGING_REQUEST ||--o{ IMAGING_CANDIDATE : scopes
FEASIBILITY_RUN ||--o{ IMAGING_CANDIDATE : generates
AOI_TILE ||--o{ IMAGING_CANDIDATE : targeted_by
SATELLITE ||--o{ IMAGING_CANDIDATE : candidate_for
VISIBILITY_PASS ||--o{ IMAGING_CANDIDATE : based_on
FEASIBILITY_CRITERION ||--o{ FEASIBILITY_CHECK_RESULT : applied_as
IMAGING_CANDIDATE ||--o{ FEASIBILITY_CHECK_RESULT : produces
FEASIBILITY_RUN ||--o{ CONFLICT_ANALYSIS : analyzes
IMAGING_CANDIDATE ||--o{ CONFLICT_ANALYSIS : has
CONFLICT_ANALYSIS ||--o{ CONFLICT_ITEM : includes
PROBABILITY_MODEL ||--o{ PROBABILITY_ESTIMATE : used_by
IMAGING_CANDIDATE ||--o{ PROBABILITY_ESTIMATE : has
PROBABILITY_ESTIMATE ||--o{ MODEL_EVIDENCE_LINEAGE : traces_inputs
WEATHER_SNAPSHOT ||--o{ CLOUD_COVER_ESTIMATE : provides
IMAGING_CANDIDATE ||--o{ CLOUD_COVER_ESTIMATE : has
FEASIBILITY_RUN ||--o{ DOWNLINK_WINDOW_CANDIDATE : proposes
SATELLITE ||--o{ DOWNLINK_WINDOW_CANDIDATE : downlinks_on
GROUND_STATION ||--o{ DOWNLINK_WINDOW_CANDIDATE : receives_at
VISIBILITY_PASS ||--o{ DOWNLINK_WINDOW_CANDIDATE : derived_to
IMAGING_CANDIDATE ||--o{ DOWNLINK_FEASIBILITY : evaluated_by
DOWNLINK_WINDOW_CANDIDATE ||--o{ DOWNLINK_FEASIBILITY : uses
FEASIBILITY_RUN ||--o{ REVIEW_TASK : reviewed_by
USER_ACCOUNT ||--o{ REVIEW_TASK : assigned_to
REVIEW_TASK ||--o{ REVIEW_DECISION : decided_as
USER_ACCOUNT ||--o{ REVIEW_DECISION : decides
FEASIBILITY_RUN ||--o{ RISK_REGISTER : records
IMAGING_CANDIDATE ||--o{ RISK_REGISTER : has
USER_ACCOUNT ||--o{ RISK_REGISTER : owns
FEASIBILITY_RUN ||--o{ FEASIBILITY_REPORT : summarized_as
FEASIBILITY_REPORT ||--o{ REPORT_ATTACHMENT : attaches
SCHEDULE_RUN ||--o{ SCHEDULE_SLOT : produces
SATELLITE ||--o{ SCHEDULE_SLOT : scheduled_on
IMAGING_CANDIDATE ||--o{ SCHEDULE_SLOT : selected_from
SCHEDULE_SLOT ||--o{ SCHEDULE_SLOT_HISTORY : changes
USER_ACCOUNT ||--o{ SCHEDULE_SLOT_HISTORY : changes_by
SCHEDULE_SLOT ||--o{ SCHEDULE_SLOT : supersedes
COMMAND_DICTIONARY ||--o{ COMMAND_REQUEST : validates
TENANT ||--o{ COMMAND_REQUEST : owns
USER_ACCOUNT ||--o{ COMMAND_REQUEST : requests
USER_ACCOUNT ||--o{ COMMAND_REQUEST : approves
SATELLITE ||--o{ COMMAND_REQUEST : receives
COMMAND_REQUEST ||--o{ COMMAND_EXECUTION : executed_as
CONTACT_SESSION ||--o{ COMMAND_EXECUTION : carries
IMAGING_REQUEST ||--o{ DATA_PRODUCT : results_in
TENANT ||--o{ DATA_PRODUCT : owns
SATELLITE ||--o{ DATA_PRODUCT : captures
DATA_PRODUCT ||--o{ PRODUCT_DERIVATION : parent
DATA_PRODUCT ||--o{ PRODUCT_DERIVATION : child
DATA_PRODUCT ||--o{ PROCESS_JOB : processed_by
DATA_PRODUCT ||--o{ CATALOG_ITEM : indexed_as
DATA_PRODUCT ||--o{ DELIVERY_ORDER : delivered_via
DATA_PRODUCT ||--o{ DOWNLINK_REQUEST : requires
DOWNLINK_REQUEST ||--o{ DOWNLINK_PLAN : planned_as
CONTACT_SESSION ||--o{ DOWNLINK_PLAN : executes_in
TENANT ||--o{ BILLING_RECORD : billed
CUSTOMER ||--o{ BILLING_RECORD : billed_for
IMAGING_REQUEST ||--o{ BILLING_RECORD : charges
DATA_PRODUCT ||--o{ BILLING_RECORD : bills
TENANT ||--o{ AUDIT_LOG : logs
해석 메모
IMAGING_CANDIDATE는 운영 문서의 요청 중심 모델과 feasibility 문서의 실행 중심 모델을 모두 수용하기 위해request_id와feas_run_id를 함께 유지DOWNLINK_WINDOW_CANDIDATE와DOWNLINK_FEASIBILITY는 사전 평가용,DOWNLINK_REQUEST와DOWNLINK_PLAN은 실제 실행 계획용으로 분리FEASIBILITY_REPORT는 평가 결과의 공식 산출물,DATA_PRODUCT는 실제 촬영 및 처리 결과물로 역할이 다름
테이블 정의서
아래 정의서는 위의 업무 도메인 구분을 기준으로 정리했다.
1. 고객/계정 관리 Domain
TENANT
- 목적: 시스템의 최상위 멀티테넌트 조직 단위다. 데이터 격리, 정책 적용, 과금 집계의 기준이 된다.
- 주요 컬럼:
tenant_id는 테넌트 식별자,tenant_name은 표시명,tenant_type은 commercial/defense/internal 등 운영 구분,status는 사용 상태,created_at은 생성 시각이다.
CUSTOMER
- 목적: 테넌트 산하의 실제 고객 또는 계약 계정 단위다. 요청 주체와 과금 대상을 분리할 때 사용한다.
- 주요 컬럼:
customer_id는 고객 식별자,tenant_id는 소속 테넌트,customer_name은 고객명,billing_type은 과금 방식,status는 계정 상태,created_at은 생성 시각이다.
USER_ACCOUNT
- 목적: 시스템 사용자 계정이다. 평가 실행, 리뷰, 승인, 스케줄 변경, 명령 요청의 행위 주체로 사용한다.
- 주요 컬럼:
user_id는 사용자 식별자,tenant_id는 소속 테넌트,email은 로그인 식별자,display_name은 표시명,status는 계정 상태,created_at은 생성 시각이다.
ROLE
- 목적: 권한 묶음을 표현하는 롤 마스터다.
- 주요 컬럼:
role_id는 롤 식별자,role_name은 롤 이름,description은 권한 설명이다.
USER_ROLE
- 목적: 사용자와 롤의 다대다 매핑 테이블이다.
- 주요 컬럼:
user_role_id는 매핑 식별자,user_id는 사용자 FK,role_id는 롤 FK,granted_at은 부여 시각이다.
API_KEY
- 목적: 외부 시스템 연동용 인증 키 관리 테이블이다.
- 주요 컬럼:
api_key_id는 키 식별자,tenant_id는 발급 테넌트,key_hash는 키 해시,status는 활성 상태,issued_at과expires_at은 발급 및 만료 시각이다.
2. 위성/자산 관리 Domain
SATELLITE
- 목적: 위성 자산의 기준 마스터다. 촬영, 패스 계산, 명령 전송, 상품 생성 전 과정의 기준 엔터티다.
- 주요 컬럼:
satellite_id는 위성 식별자,name은 위성명,norad_id와cospar_id는 우주 객체 식별자,orbit_type은 궤도 유형,mission_type은 임무 유형,status는 운용 상태,launch_date와eol_estimated_at은 수명 주기 정보다.
SATELLITE_PROFILE_SET
- 목적: 특정 시점에 적용되는 위성 운용 프로파일 묶음이다.
- 주요 컬럼:
profile_set_id는 프로파일 세트 식별자,satellite_id는 대상 위성,imaging_profile_id,comm_profile_id,constraint_profile_id는 세부 프로파일 FK,effective_from과effective_to는 적용 기간이다.
IMAGING_PROFILE
- 목적: 촬영 센서와 촬영 모드의 성능 특성을 정의한다.
- 주요 컬럼:
imaging_profile_id는 식별자,sensor_type은 광학/SAR 등 센서 종류,mode_code는 운용 모드,gsd_m은 해상도,swath_km은 촬영 폭,max_off_nadir_deg는 최대 오프나딜,slew_rate_deg_per_sec는 기동 속도,min_sun_elev_deg는 최소 태양고도,night_support는 야간 지원 여부다.
COMM_PROFILE
- 목적: 위성 통신 특성과 명령/다운링크 능력을 정의한다.
- 주요 컬럼:
comm_profile_id는 식별자,uplink_freq와downlink_freq는 주파수,data_rate_mbps는 전송률,modulation은 변조 방식,crypto_mode는 암호화 운용 방식이다.
CONSTRAINT_PROFILE
- 목적: 위성의 일일 운용 한계와 저장 용량 등 자원 제약을 정의한다.
- 주요 컬럼:
constraint_profile_id는 식별자,max_daily_imaging_time_min은 일일 최대 촬영 시간,max_daily_downlink_volume_gb는 일일 최대 다운링크량,storage_capacity_gb는 저장 용량이다.
3. 궤도/지상국 운영 Domain
ORBIT_SOURCE
- 목적: 궤도 정보의 원천 시스템 또는 공급자 메타데이터를 관리한다.
- 주요 컬럼:
orbit_source_id는 식별자,source_type은 TLE/EPH 등 원천 유형,provider는 제공자,status는 사용 상태,last_ingested_at은 최근 수집 시각이다.
TLE
- 목적: 위성 궤도 계산에 사용되는 TLE 이력 저장소다.
- 주요 컬럼:
tle_id는 식별자,satellite_id는 위성 FK,orbit_source_id는 원천 FK,epoch_time은 기준 epoch,line1,line2는 TLE 본문,ingested_at은 수집 시각이다.
GROUND_STATION
- 목적: 지상국 자원과 패스, 세션, 다운링크 수신의 기준 마스터다.
- 주요 컬럼:
station_id는 지상국 식별자,name은 지상국명,latitude,longitude,altitude는 위치 정보,status는 운용 상태다.
VISIBILITY_PASS
- 목적: 위성-지상국 간 가시 구간 예측 결과다. 후보 생성과 다운링크 가능성 검토의 기반 데이터다.
- 주요 컬럼:
pass_id는 패스 식별자,satellite_id와station_id는 위성/지상국 FK,orbit_source_id는 계산 근거,aos_time과los_time은 가시 시작/종료,max_elevation_deg는 최대 고도,predicted_at은 계산 시각이다.
ANTENNA_RESOURCE
- 목적: 지상국 내 개별 안테나 자원을 관리한다.
- 주요 컬럼:
antenna_id는 안테나 식별자,station_id는 소속 지상국,antenna_name은 자원명,band_capability는 지원 밴드,status는 사용 상태다.
CONTACT_SESSION
- 목적: 위성과 지상국 간 실제 또는 계획된 접촉 세션을 저장한다. 명령 전송과 다운링크 실행 단위가 된다.
- 주요 컬럼:
session_id는 세션 식별자,satellite_id,station_id,antenna_id는 자원 FK,planned_start,planned_end는 계획 시각,actual_start,actual_end는 실제 시각,session_type은 세션 목적,status는 진행 상태다.
4. 촬영 요청 / Feasibility 평가 Domain
IMAGING_REQUEST
- 목적: 촬영 요청의 원장 테이블이다. 사용자 요구조건과 SLA를 정의하며 모든 평가와 실행의 출발점이다.
- 주요 컬럼:
request_id는 요청 식별자,tenant_id와customer_id는 요청 주체,aoi_geom은 촬영 영역,time_window_start,time_window_end는 요청 시간창,priority는 우선순위,sla_due_time은 납기,product_level은 산출물 레벨,max_cloud_pct와max_off_nadir_deg는 품질 제약,status와reason_code는 처리 상태,correlation_id는 추적 키,created_at은 생성 시각이다.
AOI_TILE
- 목적: 대면적 AOI를 평가와 스케줄링이 가능한 크기로 분할한 단위다.
- 주요 컬럼:
tile_id는 타일 식별자,request_id는 원본 요청,tile_index는 순번,tile_geom은 타일 영역,area_km2는 면적,status는 분할 상태,created_at은 생성 시각이다.
FEASIBILITY_RUN
- 목적: 특정 촬영 요청에 대한 가능성 평가 실행 단위다. 재현성과 감사 추적의 루트 엔터티다.
- 주요 컬럼:
feas_run_id는 실행 식별자,request_id는 대상 요청,initiated_by_user_id는 실행 사용자,run_type은 실행 유형,status는 상태,horizon_start,horizon_end는 평가 범위,policy_version은 적용 정책 버전,started_at,finished_at은 실행 시각이다.
ORBIT_SNAPSHOT
- 목적: 평가 시점에 사용된 궤도 입력의 스냅샷을 보관한다.
- 주요 컬럼:
orbit_snap_id는 식별자,feas_run_id는 평가 실행 FK,source_type은 데이터 유형,source_epoch는 기준 시각,source_ref는 원본 참조,captured_at은 캡처 시각이다.
WEATHER_SNAPSHOT
- 목적: 평가 시점의 기상 예보 입력을 고정 저장한다.
- 주요 컬럼:
weather_snap_id는 식별자,feas_run_id는 평가 실행 FK,provider는 예보 제공자,forecast_base_time은 기준 시각,captured_at은 캡처 시각이다.
OP_CONSTRAINT_SNAPSHOT
- 목적: 평가 시점의 운영 제약 조건을 JSON 형태로 보관한다.
- 주요 컬럼:
constraint_snap_id는 식별자,feas_run_id는 평가 실행 FK,constraint_version은 제약 버전,constraint_json은 상세 제약,captured_at은 캡처 시각이다.
IMAGING_CANDIDATE
- 목적: 특정 요청 또는 평가 실행에서 도출된 촬영 후보안이다. 평가와 스케줄링을 연결하는 핵심 엔터티다.
- 주요 컬럼:
candidate_id는 후보 식별자,request_id는 원 요청,feas_run_id는 평가 실행,satellite_id와pass_id는 위성/패스 연결,tile_id는 대상 타일,mode_code는 촬영 모드,predicted_start,predicted_end는 예측 시각,score_value는 종합 점수,feasible_flag는 가능 여부,infeasible_reason은 불가 사유,nominal_gsd_m과predicted_off_nadir_deg는 품질 추정치,created_at은 생성 시각이다.
FEASIBILITY_CRITERION
- 목적: feasibility 평가에서 사용하는 기준 정의 마스터다.
- 주요 컬럼:
criterion_id는 기준 식별자,domain은 평가 영역,criterion_code는 기준 코드,description은 설명,severity는 중요도,hard_flag는 필수 조건 여부다.
FEASIBILITY_CHECK_RESULT
- 목적: 후보별 기준 체크 결과를 저장한다.
- 주요 컬럼:
check_id는 결과 식별자,candidate_id는 대상 후보,criterion_id는 적용 기준,result는 PASS/FAIL/WARN 등 결과,score는 점수,reason_code는 사유 코드,evidence_json은 근거 데이터,evaluated_at은 평가 시각이다.
CONFLICT_ANALYSIS
- 목적: 후보가 기존 스케줄, 우선순위, 정책과 충돌하는지 분석한 결과다.
- 주요 컬럼:
conflict_id는 식별자,feas_run_id와candidate_id는 분석 대상,conflict_type은 충돌 유형,severity는 심각도,resolution_suggestion은 해소 제안,impact_score는 영향 점수,analyzed_at은 분석 시각이다.
CONFLICT_ITEM
- 목적: 충돌 분석에 포함된 개별 충돌 항목의 상세 내역이다.
- 주요 컬럼:
conflict_item_id는 식별자,conflict_id는 상위 분석,conflicted_entity_type은 충돌 대상 종류,conflicted_entity_id는 대상 식별자,details는 세부 내용이다.
PROBABILITY_MODEL
- 목적: 성공 확률, 품질 확률, 납기 충족 확률 계산에 쓰이는 모델 메타데이터다.
- 주요 컬럼:
model_id는 모델 식별자,model_name은 모델명,model_type은 분류/회귀 등 유형,version은 버전,owner는 관리 주체,input_schema_uri는 입력 스키마 참조,status는 운영 상태다.
PROBABILITY_ESTIMATE
- 목적: 후보별 특정 목표 지표에 대한 확률 추정 결과다.
- 주요 컬럼:
prob_id는 추정 식별자,candidate_id는 대상 후보,model_id는 사용 모델,target_metric은 SUCCESS/QUALITY/SLA_ON_TIME 등 목표 지표,probability는 확률값,confidence는 신뢰도,feature_json은 입력 피처 스냅샷,estimated_at은 계산 시각이다.
MODEL_EVIDENCE_LINEAGE
- 목적: 확률 추정 결과가 어떤 입력 데이터에 의해 생성되었는지 추적한다.
- 주요 컬럼:
lineage_id는 식별자,prob_id는 확률 결과 FK,input_type은 입력 데이터 유형,input_ref는 원본 참조,checksum은 무결성 값,captured_at은 기록 시각이다.
CLOUD_COVER_ESTIMATE
- 목적: 후보 구간과 영역에 대한 구름량 추정 결과다.
- 주요 컬럼:
cloud_est_id는 식별자,candidate_id는 대상 후보,weather_snap_id는 사용 예보,cloud_pct_mean은 평균 구름량,cloud_pct_p90은 보수적 추정치,method는 추정 방법,estimated_at은 계산 시각이다.
DOWNLINK_WINDOW_CANDIDATE
- 목적: feasibility 단계에서 도출한 잠재적 다운링크 가능 창이다.
- 주요 컬럼:
dl_win_id는 식별자,feas_run_id는 평가 실행,satellite_id,station_id,pass_id는 관련 자원,window_start,window_end는 가능 창,max_elevation_deg는 예상 최대 고도,created_at은 생성 시각이다.
DOWNLINK_FEASIBILITY
- 목적: 특정 촬영 후보가 납기 내에 데이터를 내릴 수 있는지 평가한 결과다.
- 주요 컬럼:
dl_feas_id는 식별자,candidate_id는 대상 후보,dl_win_id는 사용 다운링크 창,volume_est_gb는 예상 용량,rate_est_mbps는 예상 전송률,on_time_probability는 정시 전송 확률,result는 판정,reason_code는 사유 코드,evidence_json은 근거 데이터,evaluated_at은 평가 시각이다.
REVIEW_TASK
- 목적: 자동 평가 이후 사람이 검토해야 하는 업무 단위다.
- 주요 컬럼:
review_task_id는 식별자,feas_run_id는 상위 평가 실행,assignee_user_id는 담당자,review_type은 검토 유형,status는 진행 상태,assigned_at과due_at은 할당 및 마감 시각이다.
REVIEW_DECISION
- 목적: 리뷰 태스크에 대한 최종 승인, 반려, 조건부 승인 결과다.
- 주요 컬럼:
decision_id는 식별자,review_task_id는 대상 태스크,decided_by_user_id는 결정자,decision은 판정,rationale은 결정 근거,risk_level은 리스크 수준,conditions는 부가 조건,decided_at은 결정 시각이다.
RISK_REGISTER
- 목적: 후보 또는 평가 실행에 대한 리스크 항목과 완화 계획을 관리한다.
- 주요 컬럼:
risk_id는 식별자,feas_run_id와candidate_id는 리스크 문맥,owner_user_id는 담당자,risk_type은 리스크 분류,risk_level은 수준,description은 설명,mitigation_plan은 완화 계획,status는 처리 상태,created_at,updated_at은 기록 시각이다.
FEASIBILITY_REPORT
- 목적: 평가 실행 단위의 공식 종합 결과 보고서다.
- 주요 컬럼:
report_id는 식별자,feas_run_id는 대상 실행,overall_feasibility는 종합 판정,overall_score는 종합 점수,overall_probability는 종합 확률,summary는 요약,generated_at은 생성 시각이다.
REPORT_ATTACHMENT
- 목적: feasibility 보고서에 연결되는 증빙 파일 관리 테이블이다.
- 주요 컬럼:
attachment_id는 식별자,report_id는 상위 보고서,file_name은 파일명,uri는 저장 위치,checksum은 무결성 값,uploaded_at은 업로드 시각이다.
5. 스케줄링 / 실행 통제 Domain
SCHEDULE_RUN
- 목적: 일정 생성 또는 재계산 실행 단위다.
- 주요 컬럼:
schedule_run_id는 실행 식별자,horizon_start,horizon_end는 스케줄링 범위,freeze_from,freeze_to는 고정 구간,objective_policy는 최적화 목표,status는 실행 상태,created_at은 생성 시각이다.
SCHEDULE_SLOT
- 목적: 위성 일정표에 배치된 개별 슬롯이다. 촬영, 다운링크, 유휴 등 운영 단위를 표현한다.
- 주요 컬럼:
slot_id는 슬롯 식별자,schedule_run_id는 생성 배치 실행,satellite_id는 대상 위성,candidate_id는 원본 후보,superseded_by_slot_id는 대체 슬롯,start_time,end_time은 시간 구간,slot_type은 슬롯 유형,state는 상태,version은 버전,locked는 고정 여부,created_at은 생성 시각이다.
SCHEDULE_SLOT_HISTORY
- 목적: 슬롯 상태 변경 이력을 감사 가능하게 보관한다.
- 주요 컬럼:
slot_hist_id는 이력 식별자,slot_id는 대상 슬롯,actor_user_id는 변경 사용자,action은 수행 행위,prev_state,new_state는 상태 전이,changed_at은 변경 시각,reason_code는 변경 사유다.
COMMAND_DICTIONARY
- 목적: 위성 명령의 허용 스키마와 검증 규칙을 정의하는 사전 테이블이다.
- 주요 컬럼:
cmd_dict_id는 식별자,command_type은 명령 유형,schema_version은 명령 스키마 버전,validation_rules_uri는 검증 규칙 참조,status는 사용 상태다.
COMMAND_REQUEST
- 목적: 사용자가 위성 또는 세션에 대해 요청한 명령의 승인 전 단계를 관리한다.
- 주요 컬럼:
cmd_req_id는 식별자,satellite_id,tenant_id,user_id,cmd_dict_id는 관련 자원,approved_by_user_id는 승인자,command_type은 명령 종류,payload_json은 명령 본문,priority는 우선순위,status는 상태,correlation_id는 추적 키,requested_at,approved_at은 요청 및 승인 시각이다.
COMMAND_EXECUTION
- 목적: 명령이 실제 세션에서 전송되고 응답을 받은 실행 결과다.
- 주요 컬럼:
cmd_exec_id는 식별자,cmd_req_id는 원 요청,session_id는 수행 세션,sent_at과ack_at은 전송/응답 시각,result는 실행 결과,error_code는 오류 코드,raw_log_uri는 원시 로그 위치다.
6. 데이터 상품 / 다운링크 / 전달 Domain
DOWNLINK_REQUEST
- 목적: 생성된 데이터 상품을 지상으로 전송해야 한다는 운영 요구를 표현한다.
- 주요 컬럼:
dl_req_id는 식별자,product_id는 대상 상품,tenant_id는 요청 테넌트,required_by_time은 필요 시점,priority는 우선순위,volume_est_gb는 예상 용량,status는 처리 상태,created_at은 생성 시각이다.
DOWNLINK_PLAN
- 목적: 다운링크 요청을 실제 접촉 세션에 매핑한 실행 계획이다.
- 주요 컬럼:
dl_plan_id는 식별자,session_id는 실행 세션,dl_req_id는 요청 FK,planned_rate_mbps는 계획 전송률,planned_volume_gb는 계획 전송량,status는 상태,created_at은 생성 시각이다.
DATA_PRODUCT
- 목적: 실제 촬영과 처리 결과로 생성된 데이터 상품의 원장이다.
- 주요 컬럼:
product_id는 식별자,request_id는 원 요청,tenant_id는 소유 테넌트,satellite_id는 촬영 위성,sensing_time은 촬영 시각,footprint_geom은 장면 발자국,level은 처리 레벨,processing_status는 처리 상태,format은 저장 형식,uri는 저장 위치,checksum은 무결성 값,created_at은 생성 시각이다.
PRODUCT_DERIVATION
- 목적: 원본 상품과 파생 상품 간 계보를 관리한다.
- 주요 컬럼:
derivation_id는 식별자,parent_product_id와child_product_id는 상위/하위 상품,derivation_type은 파생 유형,created_at은 생성 시각이다.
PROCESS_JOB
- 목적: 데이터 상품에 수행된 처리 파이프라인 실행 이력이다.
- 주요 컬럼:
job_id는 식별자,product_id는 대상 상품,pipeline_name과pipeline_version은 처리 파이프라인 정보,status는 실행 상태,started_at,finished_at은 처리 시각,log_uri는 로그 위치다.
CATALOG_ITEM
- 목적: 데이터 상품을 검색 카탈로그나 STAC에 노출하기 위한 메타데이터다.
- 주요 컬럼:
catalog_id는 식별자,product_id는 대상 상품,tenant_id는 소유 테넌트,indexed_at은 색인 시각,stac_item_uri는 STAC 메타데이터 위치다.
DELIVERY_ORDER
- 목적: 상품을 외부 사용자 또는 외부 시스템으로 전달하는 주문 단위다.
- 주요 컬럼:
delivery_id는 식별자,product_id는 대상 상품,tenant_id는 소유 테넌트,method는 전달 방식,destination은 수신 위치,status는 처리 상태,delivered_at은 전달 완료 시각이다.
BILLING_RECORD
- 목적: 요청 또는 생성 상품에 대해 발생한 과금 내역이다.
- 주요 컬럼:
billing_id는 식별자,tenant_id,customer_id는 과금 주체,request_id와product_id는 과금 기준 대상,charge_type은 과금 유형,amount는 금액,currency는 통화,billed_at은 청구 시각이다.
7. 감사 / 추적 Domain
AUDIT_LOG
- 목적: 전 도메인 공통 감사 로그다. 평가, 스케줄링, 명령, 전달, 과금 등 주요 이벤트를 추적한다.
- 주요 컬럼:
audit_id는 식별자,tenant_id는 소속 테넌트,actor_type과actor_id는 행위 주체,action은 수행 행위,entity_type과entity_id는 대상 엔터티,correlation_id는 추적 키,event_time은 이벤트 시각,metadata_json은 상세 메타데이터다.