# YachtMemory – Derived Layer / Anchorages Phase 1

Phase 1 schafft die persistente Ableitungsebene `yachtmemory_derived` und
kopiert ausschließlich die bestehende YachtMemory-Ableitung
`SilentMessDB.Anchorages` nach `yachtmemory_derived.anchorages`.

Die Telemetriedaten in `SilentMessDB` werden nicht verändert.

## Neue Struktur

```text
yachtmemory_derived
└── anchorages
    ├── id
    ├── vessel_id
    ├── anchorage_number
    └── ...
```

Für die Initialmigration der Silent Sea gilt `vessel_id = 1`.

`anchorage_number` ist je Schiff eindeutig über
`UNIQUE (vessel_id, anchorage_number)`.

Es gibt bewusst keinen Cross-Database-Foreign-Key auf
`yachtmemory_app.vessels`.

## Installation

```bash
unzip yachtmemory_derived_anchorages_phase1.zip
cd yachtmemory_derived_anchorages_phase1
./install_phase1.sh admin
```

## Erwartete Ergebnisse

```text
source_rows = 77
target_rows = 77
missing_in_target = 0
unexpected_target_rows = 0
differing_rows = 0

vessel_id = 1
min_id = 1
max_id = 77
min_number = 1
max_number = 77
```

Erster und letzter `start_time` müssen ebenfalls mit der Quelle übereinstimmen.

## Noch nicht geändert

- APIs
- Widgets
- Rebuild/Detection
- Dashboard
- `SilentMessDB.Anchorages`

Nach erfolgreicher Phase 1 folgt die Umstellung der Anwendung. Erst ganz am
Ende, nach vollständiger Verifikation, wird die alte Ableitungstabelle aus
`SilentMessDB` entfernt.

## Rollback vor Phase 2

```bash
mysql -u admin -p < database/99_rollback_phase1.sql
```
