Files
dashlibstorage/.cursor/rules/no-schema-migrations.mdc
2026-07-31 09:00:14 +02:00

37 lines
1.4 KiB
Plaintext

---
description: Kein Migrations-Code — immer frische DB per reset-db; Live-Anpassungen nur per sqlcmd
alwaysApply: true
---
# Schema: keine Migrationen im Code
Wir gehen **immer von einer frischen Datenbank** aus. Schema-Änderungen gehören in `src/schema.js` (und ggf. `purge.js`), **nicht** als Upgrade-Pfade für bestehende DBs.
## Verboten im Repo
- `MIGRATE_*`-Scripts oder Kommentare wie „Existing DBs …“
- `ALTER TABLE … ADD <spalte>` mit `IF NOT EXISTS (SELECT … FROM sys.columns …)`
- `ALTER` nur um ein bereits ausgerolltes Schema zu patchen
- Logik „wenn Spalte/Constraint fehlt, nachrüsten“ für fremde oder alte DB-Stande
## Erlaubt
- `CREATE TABLE` mit `IF NOT EXISTS` (Neuaufbau)
- Spalten direkt in `CREATE TABLE` definieren
- **Ausnahme Zirkular-FK:** Spalte in `CREATE TABLE`, FK in separatem `INIT_*` **nach** der referenzierten Tabelle — nur für den Erst-Init, nicht als Migration
- `purge.js`: Constraint-Drops, die `reset-db`/`purge-db` zum sauberen Droppen brauchen
## Workflow
1. Schema in `src/schema.js` anpassen
2. Lokal: `npm run reset-db` (purge + init)
3. **Eigene/geteilte DB** bei Bedarf **manuell** mit `sqlcmd` anpassen — **nicht** im Code committen
## Beispiel sqlcmd (nur manuell, nicht im Repo)
```bash
sqlcmd -S "$MSSQL_SERVER" -d "$MSSQL_DATABASE" -U "$MSSQL_USER" -P "$MSSQL_PASSWORD" -Q "…"
```
Nach sqlcmd-Anpassungen: Schema-Datei trotzdem so pflegen, dass `reset-db` den Zielzustand abbildet.