Zum Inhalt springen

Mapping: Beziehungen

Status: Entwurf

Wie werden die Beziehungen aus 30-domain/07-relations.md auf relation_type-Einträge der Spec (docs/spec/30-domain-model/04-relation-type.md) abgebildet?

Konvention

  • relation_type.key ist sprechend, lowercase, snake_case.
  • from_entity_type_id / to_entity_type_id zeigen auf die entity_type-Einträge aus 01-fachobjekte-zu-entity-types.md.
  • delete_policyrestrict, detach, cascade, archive_only. Default: restrict.
  • Beziehungs-Eigenschaften (z. B. Zeitfenster, Anteil, Rolle in der Beziehung) liegen in entity_relation.attributes jsonb, validiert via relation_type_attribute (Spec).

Mapping-Tabelle

relation_type.keyfromtoKardinalitätdelete_policyBeziehungs-Attribute
holding_has_subsidiaryholdingsubsidiary1:nrestrict
subsidiary_has_subfirmsubsidiarysubfirm1:nrestrict
subsidiary_provides_servicesubsidiaryservice1:ndetachseit, bis
subsidiary_provides_modulesubsidiarymodule1:nrestrict— — primäre Tochter pro Modul (Inverse von module.primary_subsidiary)
owner_owns_propertyownerproperty1:nrestrictseit, bis (Eigentümerwechsel = neue Beziehungs-Periode, keine In-Place-Änderung)
provider_offers_serviceexternal_providerservicen:mdetachseit, bis, regional_scope
provider_offers_materialexternal_providermaterialn:mdetachseit, bis, lieferzeit_wochen, mengenrabatt_json
service_uses_materialservicematerialn:mdetachmenge_pro_einheit
property_has_buildingpropertybuilding1:ncascade
building_has_unitbuildingunit1:ncascade
building_has_pvbuildingpv_system1:nrestrict
pv_has_storagepv_systembattery_storage1:0..1detach
unit_has_meterunitmeter1:ndetach
building_has_meterbuildingmeter1:ndetachfunktion (Hausanschluss, Allgemeinstrom, …)
pv_has_meterpv_systemmeter1:ndetach
unit_has_rent_contractunitcontract1:0..nrestrictis_active (nur eines true)
unit_has_tenant_powerunittenant_power_contract1:0..1restrict
unit_has_tenant_accessunittenant_access_contract1:0..1restrictperspektivisch — Modul mieter_access
subsidiary_responsible_for_propertysubsidiarypropertyn:mdetachrolle, seit, bis, anteil_prozent
property_booked_modulepropertymodulen:mdetachseit, bis, case_id (welcher Case hat das Modul gebucht)
case_targets_propertycasepropertyn:1restrict
case_mandated_bycaseownern:1restrictPflicht bei case_type=liegenschafts_bewertung/unit_case; leer bei reinem eigenbestand
case_selects_modulecasemodulen:mcascadeis_primary (für unit_case), Snapshot-Zustand der Modul-Konfiguration des Cases
case_parentcasecasen:0..1detachFolge-Case verweist auf Vorgänger (Modul nachbuchen / kündigen). Self-Relation.
case_belongs_to_subsidiarycasesubsidiaryn:1restrict
case_uses_modelcasemodel_versionn:1restrict
case_aggregates_unit_casecase (holding_case)case (unit_case)1:nrestrict
case_has_scenariocasescenario1:ncascade
case_has_demandcasedemand1:ncascade
case_has_attachmentcaseattachment1:ncascadekategorie
demand_targets_propertydemandpropertyn:1restrict
demand_targets_tradedemandtraden:1restrict
demand_assigns_servicedemandservicen:0..1detach
demand_assigns_materialdemandmaterialn:0..ndetachmenge, einheit
demand_assigns_providerdemandsubsidiaryexternal_providern:0..1detachsiehe Hinweis unten
contract_provider_is_subsidiarycontractsubsidiaryn:1restrictis_internal_to_holding
contract_provider_is_externalcontractexternal_providern:1restrict
contract_for_propertycontractpropertyn:0..1restrict
contract_for_unitcontractunitn:0..1restrict
contract_for_pvcontractpv_systemn:0..1restrict
contract_uses_templatecontractcontract_templaten:0..1detach
model_version_ofmodel_versionmodeln:1restrict
model_test_belongs_tomodel_test_casemodel_versionn:1restrict

Hinweis: heterogene Endpunkte

demand_assigns_provider kann sowohl auf subsidiary (interner Provider) als auch auf external_provider zeigen. Optionen:

  1. Zwei relation_type-Einträge (demand_assigns_subsidiary_provider, demand_assigns_external_provider) — sauber, redundant.
  2. Ein relation_type mit Polymorphie über zusätzliches Feld — nicht im aktuellen Spec-Schema unterstützt.

V1: Variante 1 (zwei Relations-Typen). Phase 2 ggf. polymorph. Siehe docs/spec/90-governance/03-open-questions.md (potentiell neuer Punkt).

Beziehungs-Attribute (Beispiel)

subsidiary_responsible_for_property.attributes:

{
"rolle": "verwaltung",
"seit": "2024-01-01",
"bis": null,
"anteil_prozent": 100
}

relation_type_attribute definiert, welche Felder erlaubt / pflicht sind — siehe docs/spec/30-domain-model/16-relation-type-attribute.md.

Verwandte Dokumente