<p align="center">
  <img src="DBCompare.App/Assets/jessa-studio-kompaktlogo.png" alt="Jessa Studio" width="360">
</p>

<h1 align="center">SchemaWerk</h1>

<p align="center">
  Desktop-Anwendung zum Vergleichen und Planen von MySQL-8-Schemaänderungen.<br>
  Desktop application for comparing and planning MySQL 8 schema changes.
</p>

<p align="center">
  <strong>Version 1.0.0</strong>
</p>

<p align="center">
  <a href="#deutsch">Deutsch</a> · <a href="#english">English</a>
</p>

---

# Deutsch

## Überblick

SchemaWerk vergleicht zwei MySQL-8-Datenbankschemas. Das Quellschema beschreibt den gewünschten Zustand, das Zielschema den aktuellen Zustand der Datenbank, die angepasst werden soll.

Die Anwendung stellt Unterschiede übersichtlich dar, erzeugt daraus einen auswählbaren Änderungsplan und erstellt eine SQL-Vorschau. Das SQL wird **nicht automatisch ausgeführt**. Dadurch bleibt die Kontrolle über jede geplante Änderung beim Benutzer.

SchemaWerk **1.0.0** ist die erste öffentliche Vollversion. Die Kernfunktionen sind für MySQL-8-Standardszenarien vorgesehen; vor dem produktiven Einsatz sollten Vergleichsergebnisse und erzeugte SQL-Skripte weiterhin gründlich in der jeweiligen Umgebung geprüft werden.

## Funktionen

- getrennte Verbindungen für Quell- und Zieldatenbank
- Verbindungstest und Auswahl der verfügbaren Datenbanken
- Vergleich von:
  - Tabellen
  - Spalten und Spalteneigenschaften
  - Primärschlüsseln – **unterstützt für Standardfälle:** Hinzufügen, Entfernen und Ändern inkl. zusammengesetzter Primärschlüssel
  - Indizes und UNIQUE-Constraints – **unterstützt für Standardfälle:** Hinzufügen, Entfernen und Neuerstellen inkl. zusammengesetzter Indizes, Präfixlängen, Sortierung und Sichtbarkeit
  - Fremdschlüsseln – **unterstützt für Standardfälle:** Hinzufügen und Entfernen inkl. zusammengesetzter Fremdschlüssel sowie ON UPDATE-/ON DELETE-Regeln
  - Tabellenoptionen – **unterstützt für Standardfälle:** Engine, Default Character Set und Default Collation
- filterbare Master-/Detailansichten für Vergleichsergebnisse
- einklappbarer Such- und Filterbereich im Vergleichsbereich
- Detailreiter für Spalten, Keys/Indizes, Fremdschlüssel und Tabellenoptionen im Vergleichsbereich
- Änderungsplan mit auswählbaren Operationen für unterstützte Schemaänderungen
- Risikobewertung für nicht destruktive, prüfpflichtige und destruktive Änderungen
- Prüfung von Abhängigkeiten zwischen unterstützten Schemaänderungen
- Erzeugung einer kommentierten SQL-Vorschau für MySQL 8 für unterstützte Tabellen-, Spalten-, Primärschlüssel-, Index-, UNIQUE-, Fremdschlüssel- und Tabellenoptionsänderungen
- Kopieren der SQL-Vorschau in die Zwischenablage
- Benutzeroberfläche auf Deutsch, Englisch und Französisch
- sofortiger Sprachwechsel ohne Neustart
- System-, Hell- und Dunkelmodus
- Speicherung von Theme, Sprache, Fenstergröße und Fensterposition
- tastaturfreundliche Navigation in der Verbindungsansicht
- „Über“-, Einstellungs- und Update-Dialog
- installer-neutrale Update-Prüfung mit vorbereiteter Verteilungsstrategie für Microsoft Store, MSIX, Intune und Direktdownload
- automatisierte Tests für Vergleich, Planung, SQL-Erzeugung und Lokalisierung

## Bewusste Einschränkungen

SchemaWerk führt derzeit keine Änderungen direkt auf einer Datenbank aus. Folgende Funktionen sind noch nicht Bestandteil von Version 1.0.0:

- direkte Ausführung des erzeugten SQL-Skripts
- Export des SQL-Skripts in eine Datei
- Ausführungsprotokoll
- automatisches erneutes Laden des Schemas vor einer Ausführung
- Vergleich von Views, Triggern, Routinen oder Ereignissen

Zusätzlich gilt für Version 1.0.0: Primärschlüssel, normale Indizes, UNIQUE-Constraints, Fremdschlüssel und Tabellenoptionen werden für Standardfälle automatisch geplant und als SQL erzeugt. Dazu gehören `ADD PRIMARY KEY`, `DROP PRIMARY KEY`, Änderungen als `DROP PRIMARY KEY` plus `ADD PRIMARY KEY`, `ADD INDEX`, `DROP INDEX`, `ADD UNIQUE INDEX`, Indexänderungen als `DROP INDEX` plus `ADD INDEX`, `ADD CONSTRAINT ... FOREIGN KEY`, `DROP FOREIGN KEY` sowie `ALTER TABLE` für Engine, Default Character Set und Default Collation. Neue oder geänderte `AUTO_INCREMENT`-Spalten werden unterstützt, wenn die passende Primärschlüsseloperation mit ausgewählt ist. Fremdschlüssel werden mit lokalen Schema-Referenzen auf die Zieldatenbank umgeschrieben; externe referenzierte Schemas bleiben erhalten. Ungewöhnliche Index-, Fremdschlüssel- oder Tabellenoptionskombinationen müssen weiterhin besonders sorgfältig geprüft und bei Bedarf im SQL-Skript angepasst werden.

## Wichtiger Sicherheitshinweis

Schemaänderungen können Daten verändern oder unwiederbringlich löschen. Auch als nicht destruktiv eingestufte Änderungen können in einer konkreten Datenbank unerwartete Auswirkungen haben.

Vor der Verwendung des erzeugten SQL-Skripts sollten daher immer:

1. eine aktuelle und geprüfte Sicherung der Zieldatenbank erstellt werden,
2. das vollständige Skript manuell geprüft werden,
3. die Änderungen zuerst in einer Test- oder Staging-Umgebung ausgeführt werden.

Die Risikoeinstufung und SQL-Erzeugung ersetzen keine fachliche Prüfung durch eine mit der Datenbank vertraute Person.

## Haftungsausschluss

SchemaWerk wird ohne Gewährleistung bereitgestellt. Die Nutzung erfolgt vollständig auf eigene Gefahr. Jessa Studio übernimmt keinerlei Haftung für Schäden, Datenverluste, Betriebsunterbrechungen oder sonstige Folgen, die direkt oder indirekt aus der Nutzung des Programms oder der erzeugten SQL-Skripte entstehen.

## Updates und Verteilung

SchemaWerk enthält eine installer-neutrale Update-Prüfung. Das Programm ersetzt sich nicht selbst im laufenden Betrieb. Das konkrete Update-Verhalten hängt von der Veröffentlichungsart ab.

Die empfohlene langfristige Zielrichtung ist **MSIX über den Microsoft Store**. Dieser Weg ist am besten für verwaltete Windows-Umgebungen geeignet, weil Installation und Updates über Microsoft Store, Windows und Intune gesteuert werden können. Für Unternehmen ohne Store-Nutzung bleibt ein MSIX-/Intune- oder klassischer Installer-Fallback möglich.

Geplante Kanäle:

- **Microsoft Store / MSIX** als bevorzugter öffentlicher und administrierbarer Veröffentlichungsweg
- **Intune / Enterprise Managed** für verwaltete Unternehmensbereitstellung
- **Direktdownload** als Fallback für Website, itch.io oder manuelle Installation

Bei Direktdownload-Builds kann SchemaWerk über eine von Jessa Studio gehostete HTTPS-Update-Information auf eine neuere Version hinweisen und die offizielle Download- beziehungsweise Änderungsseite öffnen. Nutzer müssen dafür keine Manifest-Dateien bearbeiten oder bereitstellen.

Für produktive Umgebungen sollte die jeweils eingesetzte Verteilungs- und Update-Strategie vorab mit der zuständigen IT abgestimmt werden.

## Systemvoraussetzungen

### Anwendung

- Windows 10 oder Windows 11
- MySQL 8 als Quell- und Zieldatenbank
- je nach Veröffentlichungsart die passende .NET-10-Desktop-Runtime

## Grundlegender Arbeitsablauf

1. Verbindung zur Quelldatenbank konfigurieren und testen.
2. Verbindung zur Zieldatenbank konfigurieren und testen.
3. Quell- und Zielschema laden.
4. Schemas vergleichen.
5. Unterschiede prüfen und gewünschte Operationen auswählen.
6. Abhängigkeiten und Risikohinweise kontrollieren.
7. SQL-Vorschau erzeugen und vollständig prüfen.
8. Das Skript bei Bedarf manuell kopieren und außerhalb von SchemaWerk verwenden.

## Lokale Einstellungen

SchemaWerk speichert benutzerbezogene Einstellungen unter:

```text
%LOCALAPPDATA%\Jessa Studio\SchemaWerk\
```

Dort werden unter anderem Sprache, Theme und Fensterposition abgelegt. Zugangsdaten zu Datenbanken werden derzeit nicht dauerhaft gespeichert.

Protokolldateien liegen unter:

```text
%LOCALAPPDATA%\Jessa Studio\SchemaWerk\Logs\
```

Die Logdateien werden täglich benannt, zum Beispiel `schemawerk-20260703.log`.

## Lizenz

SchemaWerk ist proprietäre Software. Nutzung, Weitergabe, Änderung und Verwertung richten sich nach den Bedingungen in [LICENSE](LICENSE).

Enthaltene Bibliotheken von Drittanbietern unterliegen ihren jeweils eigenen Lizenzbedingungen.

## Links

- Website: <https://jessa.studio>
- Download auf itch.io: <https://jessa-studio.itch.io/schemawerks>

---

# English

## Overview

SchemaWerk compares two MySQL 8 database schemas. The source schema represents the desired state, while the target schema represents the current state of the database that is to be changed.

The application presents differences in a structured way, creates a selectable change plan, and generates an SQL preview. The SQL is **not executed automatically**, keeping every planned change under the user's control.

SchemaWerk **1.0.0** is the first public full release. The core functionality is intended for MySQL 8 standard scenarios; comparison results and generated SQL scripts should still be thoroughly reviewed in the intended environment before production use.

## Features

- separate source and target database connections
- connection testing and database selection
- comparison of:
  - tables
  - columns and column properties
  - primary keys – **supported for standard cases:** adding, dropping, and changing, including composite primary keys
  - indexes and UNIQUE constraints – **supported for standard cases:** adding, dropping, and recreating, including composite indexes, prefix lengths, sort direction, and visibility
  - foreign keys – **supported for standard cases:** adding and dropping, including composite foreign keys and ON UPDATE/ON DELETE rules
  - table options – **supported for standard cases:** engine, default character set, and default collation
- filterable master/detail views for comparison results
- collapsible search and filter area in the comparison workspace
- detail tabs for columns, keys/indexes, foreign keys, and table options in the comparison workspace
- change plan with selectable operations for supported schema changes
- risk assessment for non-destructive, review-required, and destructive changes
- dependency validation between supported schema changes
- generation of a commented MySQL 8 SQL preview for supported table, column, primary-key, index, UNIQUE, foreign-key, and table-option changes
- copying the SQL preview to the clipboard
- user interface in German, English, and French
- immediate language switching without restarting
- system, light, and dark themes
- persistence of theme, language, window size, and window position
- keyboard-friendly navigation in the connection workspace
- About, Settings, and Update dialogs
- installer-neutral update check with a prepared distribution strategy for Microsoft Store, MSIX, Intune, and direct download
- automated tests for comparison, planning, SQL generation, and localization

## Intentional limitations

SchemaWerk currently does not execute changes directly against a database. Version 1.0.0 does not yet include:

- direct execution of the generated SQL script
- export of the SQL script to a file
- execution logging
- automatic schema reload before execution
- comparison of views, triggers, routines, or events

In addition, version 1.0.0 has an important limitation: primary keys, normal indexes, UNIQUE constraints, foreign keys, and table options are now planned and generated as SQL for standard cases. This includes `ADD PRIMARY KEY`, `DROP PRIMARY KEY`, changes expressed as `DROP PRIMARY KEY` plus `ADD PRIMARY KEY`, `ADD INDEX`, `DROP INDEX`, `ADD UNIQUE INDEX`, index changes expressed as `DROP INDEX` plus `ADD INDEX`, `ADD CONSTRAINT ... FOREIGN KEY`, `DROP FOREIGN KEY`, and `ALTER TABLE` for engine, default character set, and default collation. New or changed `AUTO_INCREMENT` columns are supported when the matching primary-key operation is selected as well. Foreign keys that reference the local source schema are rewritten to the target database; external referenced schemas are preserved. Unusual index, foreign-key, or table-option combinations still require careful manual review and may need to be adjusted in the SQL script.

## Important safety notice

Schema changes can modify or permanently delete data. Even changes classified as non-destructive may have unexpected effects in a particular database.

Before using a generated SQL script, always:

1. create and verify a current backup of the target database,
2. review the complete script manually,
3. execute the changes in a test or staging environment first.

Risk assessment and SQL generation do not replace review by a person familiar with the database and its data.

## Disclaimer of liability

SchemaWerk is provided without warranty. Use is entirely at your own risk. Jessa Studio accepts no liability for damages, data loss, business interruption, or any other consequences arising directly or indirectly from using the application or the generated SQL scripts.

## Updates and distribution

SchemaWerk includes an installer-neutral update check. The application does not replace itself while running. The actual update behavior depends on the distribution channel.

The recommended long-term target is **MSIX through the Microsoft Store**. This path is best suited for managed Windows environments because installation and updates can be controlled through Microsoft Store, Windows, and Intune. For organizations that do not use the Store, an MSIX/Intune or classic installer fallback remains possible.

Planned channels:

- **Microsoft Store / MSIX** as the preferred public and administrable distribution path
- **Intune / Enterprise Managed** for managed enterprise deployment
- **Direct download** as a fallback for website, itch.io, or manual installation

Direct-download builds can use a Jessa Studio-hosted HTTPS update source to indicate that a newer version is available and open the official download or release-notes page. Users do not need to edit or provide any manifest files.

For production environments, the chosen distribution and update strategy should be aligned with the responsible IT administration before deployment.

## System requirements

### Application

- Windows 10 or Windows 11
- MySQL 8 source and target databases
- the appropriate .NET 10 Desktop Runtime, depending on the published package

## Basic workflow

1. Configure and test the source database connection.
2. Configure and test the target database connection.
3. Load the source and target schemas.
4. Compare the schemas.
5. Review the differences and select the required operations.
6. Check dependencies and risk notices.
7. Generate and fully review the SQL preview.
8. Copy the script manually for use outside SchemaWerk when appropriate.

## Local settings

SchemaWerk stores per-user settings in:

```text
%LOCALAPPDATA%\Jessa Studio\SchemaWerk\
```

This includes language, theme, and window placement. Database credentials are currently not persisted.

Log files are stored below:

```text
%LOCALAPPDATA%\Jessa Studio\SchemaWerk\Logs\
```

Log files are named by day, for example `schemawerk-20260703.log`.

## License

SchemaWerk is proprietary software. Use, distribution, modification, and exploitation are governed by the terms in [LICENSE](LICENSE).

Included third-party libraries remain subject to their respective license terms.

## Links

- Website: <https://jessa.studio>
- Download on itch.io: <https://jessa-studio.itch.io/schemawerks>
