Skip to content

Entity Relationships

This section describes the key relationships between entities, including foreign keys and cardinality.

Geographic Hierarchy

erDiagram
    mng_country ||--o{ mng_admin_1 : "has"
    mng_admin_1 ||--o{ mng_admin_2 : "has"
    mng_admin_2 ||--o{ mng_location : "has"
    mng_country ||--o{ mng_cultivar : "configures"
    mng_country ||--o{ mng_soil : "configures"
    mng_country ||--o{ mng_country_indicator : "configures"
    mng_country ||--o{ mng_country_climate_measure : "configures"
    mng_country ||--o{ mng_data_source : "has"
    mng_country ||--o{ forecast : "forecasts for"

Crop Configuration Chain

erDiagram
    mng_crop ||--o{ mng_cultivar : "has"
    mng_crop ||--o{ mng_soil : "has"
    mng_crop ||--o{ mng_phenological_stage : "has"
    mng_crop ||--o{ mng_season : "has"
    mng_cultivar ||--o{ mng_setup : "configures"
    mng_soil ||--o{ mng_setup : "configures"
    mng_season ||--o{ mng_setup : "configures"
    mng_setup ||--o{ mng_configuration_file : "uses"

Forecast Domain

erDiagram
    mng_country ||--o{ forecast : "has"
    forecast ||--o{ forecast_analogue : "uses analogue"

Climate Data Domain

erDiagram
    mng_location ||--o{ climate_historical_daily : "has"
    mng_location ||--o{ climate_historical_monthly : "has"
    mng_location ||--o{ climate_historical_climatology : "has"
    mng_location ||--o{ climate_historical_indicator : "has"
    mng_climate_measure ||--o{ climate_historical_daily : "measures"
    mng_climate_measure ||--o{ climate_historical_monthly : "measures"
    mng_climate_measure ||--o{ climate_historical_climatology : "measures"
    mng_indicators ||--o{ climate_historical_indicator : "defines"

Security Model

erDiagram
    role ||--o{ users : "has"
    users ||--o{ user_access : "has"
    role ||--o{ user_access : "has"
    mng_country ||--o{ user_access : "grants access to"

Cardinality Summary

Source Entity Target Entity Cardinality FK Column
MngCountry MngAdmin1 1:N country_id
MngAdmin1 MngAdmin2 1:N admin_1_id
MngAdmin2 MngLocation 1:N admin_2_id
MngCountry MngCultivar 1:N country_id
MngCrop MngCultivar 1:N crop_id
MngCountry MngSoil 1:N country_id
MngCrop MngSoil 1:N crop_id
MngCultivar MngSetup 1:N cultivar_id
MngSoil MngSetup 1:N soil_id
MngSeason MngSetup 1:N season_id
MngSetup MngConfigurationFile 1:N setup_id
MngCountry Forecast 1:N country_id
Forecast ForecastAnalogue 1:N forecast_id
MngLocation ClimateHistoricalDaily 1:N location_id
MngLocation ClimateHistoricalMonthly 1:N location_id
MngLocation ClimateHistoricalClimatology 1:N location_id
MngLocation ClimateHistoricalIndicator 1:N location_id
MngClimateMeasure ClimateHistoricalDaily 1:N measure_id
MngClimateMeasure ClimateHistoricalMonthly 1:N measure_id
MngIndicator ClimateHistoricalIndicator 1:N indicator_id
MngCrop MngPhenologicalStage 1:N crop_id
MngPhenologicalStage PhenologicalStageStress 1:N phenological_stage_id
MngStress PhenologicalStageStress 1:N stress_id
MngCountry MngCountryIndicator 1:N country_id
MngIndicator MngCountryIndicator 1:N indicator_id
MngCountryIndicator MngIndicatorsFeatures 1:N country_indicator_id
MngCountry MngCountryClimateMeasure 1:N country_id
MngClimateMeasure MngCountryClimateMeasure 1:N measure_id
MngCountry MngDataSource 1:N country_id
Role User 1:N role_id
User UserAccess 1:N user_id
Role UserAccess 1:N role_id
MngCountry UserAccess 1:N country_id

ORM Package Structure

aclimate_v3_orm/
  database/           # SQLAlchemy Base, engine, session
  enums/              # 7 shared enumeration files
  models/             # 31 SQLAlchemy entity files
  schemas/            # 31 Pydantic schema files
  services/           # 31 business logic files
  validations/        # 31 data integrity files
  migrations/         # Alembic version-controlled scripts
    versions/          # Individual migration scripts