# ED-02-001 Relational Mapping

**Status:** Ready for Implementation\
**Parent:** ED-02 Context Persistence

## Ziel

Dieses Dokument beschreibt die relationale Abbildung des Domain-Objekts
`ContextItem` auf das bestehende Datenbankschema. Es werden keine
Änderungen am Schema vorgenommen.

## Scope

-   Mapping Domain → Persistenz
-   Mapping Persistenz → Domain
-   Zuordnung zum Aggregate `SourceValue`

Nicht Bestandteil:

-   Repository-Implementierung
-   Rehydration
-   Tests

## Aggregate

`ContextItem` ist Bestandteil des `SourceValue`-Aggregats.

``` text
SourceValue
 └── ContextItem[*]
```

Es besitzt keine eigene Identität außerhalb des Aggregats.

## Verwendete Tabelle

``` text
context_item
-------------
id
source_value_id
context_type_uri
value
```

## Feldmapping

  Domain                          Datenbank
  ------------------------------- ------------------
  ContextItem::contextTypeUri()   context_type_uri
  ContextItem::value()            value
  SourceValue::id()               source_value_id

## Persistenzregeln

-   Ein `ContextItem` wird ausschließlich über das zugehörige
    `SourceValue` persistiert.
-   `source_value_id` verweist auf den Besitzer des Aggregats.
-   Die technische Primärschlüsselspalte `id` bleibt vollständig in der
    Persistenzschicht.
-   Das Domain-Modell kennt keine Datenbankidentität für `ContextItem`.

## Ladeverhalten

Beim Laden eines `SourceValue` werden alle Datensätze mit identischer
`source_value_id` geladen und nach `id ASC` verarbeitet.

## Invarianten

-   `context_type_uri` darf nicht leer sein.
-   `value` darf nicht leer sein.
-   Jedes `ContextItem` gehört genau einem `SourceValue`.
-   Es wird keine fachliche Sortierung gespeichert.

## Akzeptanzkriterien

-   Domain-Modell bleibt unverändert.
-   Bestehendes Schema wird unverändert genutzt.
-   Vollständiges Mapping zwischen Domain und Persistenz definiert.
-   Keine neue Tabelle und keine zusätzlichen Spalten.
