통합 ERD v2

- [0. 통합 ERD](./0.integrated-ERD.md)

카테고리: guide | 읽기시간: 27분 | 원문: 다운로드

통합 ERD v2

문서 목차

통합 기준

공통 핵심 엔터티

업무 도메인 구분

v2 문서는 테이블을 단순 기술 분류가 아니라 실제 업무 흐름 기준으로 다음 7개 업무 도메인으로 구분한다.

테이블-업무 도메인 매핑

업무 도메인 주요 책임 포함 테이블
고객/계정 관리 조직, 사용자, 접근 권한, 인증 키 관리 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. 고객/계정 관리

2. 위성/자산 관리

3. 궤도/지상국 운영

4. 촬영 요청 / Feasibility 평가

5. 스케줄링 / 실행 통제

6. 데이터 상품 / 다운링크 / 전달

7. 감사 / 추적

도메인 그룹 뷰 (Mermaid)

erDiagram은 도메인별 그룹 박스를 직접 표현하기에 제약이 있어, 업무 도메인 박스는 flowchartsubgraph로 별도 표현한다. 이 뷰는 도메인 경계와 주요 연계를 빠르게 파악하기 위한 상위 차트다.

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

해석 메모

테이블 정의서

아래 정의서는 위의 업무 도메인 구분을 기준으로 정리했다.

1. 고객/계정 관리 Domain

TENANT

CUSTOMER

USER_ACCOUNT

ROLE

USER_ROLE

API_KEY

2. 위성/자산 관리 Domain

SATELLITE

SATELLITE_PROFILE_SET

IMAGING_PROFILE

COMM_PROFILE

CONSTRAINT_PROFILE

3. 궤도/지상국 운영 Domain

ORBIT_SOURCE

TLE

GROUND_STATION

VISIBILITY_PASS

ANTENNA_RESOURCE

CONTACT_SESSION

4. 촬영 요청 / Feasibility 평가 Domain

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

5. 스케줄링 / 실행 통제 Domain

SCHEDULE_RUN

SCHEDULE_SLOT

SCHEDULE_SLOT_HISTORY

COMMAND_DICTIONARY

COMMAND_REQUEST

COMMAND_EXECUTION

6. 데이터 상품 / 다운링크 / 전달 Domain

DOWNLINK_REQUEST

DOWNLINK_PLAN

DATA_PRODUCT

PRODUCT_DERIVATION

PROCESS_JOB

CATALOG_ITEM

DELIVERY_ORDER

BILLING_RECORD

7. 감사 / 추적 Domain

AUDIT_LOG

×preview