# Terra Erweitert 1.0

Eine umfangreich ergänzte Arbeitsdatenbank auf Grundlage von Terra, GeoNames, Natural Earth und Unicode CLDR. Erstellt am 27.10.2026.

## Direkt anfangen

1. Das gesamte ZIP entpacken.
2. **terra_erweitert.sqlite** in einem SQLite-fähigen Datenbankprogramm öffnen. Die Datei ist bereits befüllt, ein Import ist nicht nötig.
3. **beispielabfragen.sql** enthält 32 ausführbare Beispiele. Dieselben Aufgaben stehen in der Tabelle **AUFGABE**.

Mit installiertem Python 3.10 oder neuer kannst du auch **SQL_KONSOLE_STARTEN.bat** unter Windows öffnen. Alternativ im entpackten Ordner:

```sh
python sql_konsole.py
```

Die Konsole öffnet die Datenbank nur lesend. SQL mit einem Semikolon abschließen. `.tabellen`, `.schema STADT`, `.beispiele`, `.limit 100` und `.csv ergebnis.csv` helfen beim Arbeiten. `.csv` exportiert das gesamte Ergebnis der letzten Abfrage. Vorhandene Dateien werden dabei nicht überschrieben. Zur Konsole ist keine zusätzliche Python-Bibliothek nötig. Die mitgelieferten CSVs sind UTF-8 mit BOM und Semikolon als Trenner; leere CSV-Zellen stellen NULL dar.

```sql
SELECT ST_NAME, LT_NAME, EINWOHNER
FROM V_STADT_DETAIL
WHERE L_ID = 'D' AND ST_NAME = 'Gera';
```

## Wie stark der Datenbestand gewachsen ist

| Bereich | Original | Erweitert |
|---|---:|---:|
| Länder und Gebiete | 190 | 250 |
| Verwaltungsregionen | 564 | 3.865 |
| Städte und weitere Orte | 740 | 171.675 |
| Berge | 116 | 701 |
| Flüsse | 136 | 1.138 |
| Seen und Stauseen | 93 | 768 |
| Meeresgebiete | 30 | 289 |
| Inseln | 174 | 504 |
| Wüsten | 30 | 75 |

Zusätzlich enthalten: 213 Gebirgseinträge, 157 Inselgruppen, 7 Kontinente, 728 Sprachzuordnungen, 323 eindeutige Nachbarschaftspaare, 241 Hauptstadtzuordnungen und 5619 Objekt-Land-Beziehungen. Namen von Orten sind nicht weltweit eindeutig. Für Beziehungen immer die ID verwenden.

Die geografischen Zahlen sind **Katalogeinträge nach Zusammenführung passender Namen**, keine Garantie, dass sämtliche realen Objekte enthalten oder sämtliche Synonyme vollständig zusammengeführt sind. Original und Ergänzung verwenden teilweise unterschiedliche Objektdefinitionen. Die Ansicht MEER enthält zusätzlich Buchten, Meerengen, Fjorde und Lagunen. Die Auswahl `cities1000` enthält Orte mit mehr als 1.000 Einwohnern oder bestimmte Verwaltungszentren; sie ist keine Liste jeder Siedlung der Erde. Die Zahl 250 bezeichnet Länder **und Gebiete** laut GeoNames, nicht 250 unabhängige Staaten.

## Welche Datei wofür gedacht ist

| Datei | Zweck |
|---|---|
| terra_erweitert.sqlite | Neue Arbeitsversion mit Beziehungen, Indizes, Quellen und Ergänzungen |
| terra_original.sqlite | Alle 26 ursprünglichen Tabellen und Werte für bestehende Schulaufgaben |
| terra_mariadb.sql | Import der erweiterten Arbeitsversion in eine leere MariaDB-Datenbank |
| terra_sqlite.sql | Vollständiger SQL-Export der erweiterten Arbeitsversion |
| schema_sqlite.sql | Nur Struktur, ohne Daten |
| beispielabfragen.sql | 32 Abfragen für die erweiterte Arbeitsversion |
| loesungen_original_korrigiert.sql | 13 korrigierte Musterlösungen für den Originalbestand |
| DATENMODELL.md | Beziehungen und Anleitung für JOINs |
| DATENWOERTERBUCH.md | Jede Tabelle, Spalte und jeder Fremdschlüssel |
| QUALITAET_UND_GRENZEN.md | Herkunft, bekannte Lücken und Importentscheidungen |
| csv/ | Tabellenexporte zur Weiterverarbeitung; Geometrien stehen in SQLite und den Quelldateien |
| quellen/ | Heruntergeladene Rohdaten und zwei Aufgaben-Dateien für den reproduzierbaren Aufbau |
| pruefen.py | Prüft SQLite, SQL-Neuimport, Originaltreue und Beispielabfragen |
| pruefbericht_sqlite.json | Ergebnis der tatsächlich durchgeführten SQLite-Prüfungen |
| pruefbericht_mariadb.json | Ergebnis der tatsächlich durchgeführten MariaDB-Prüfungen |

## Was technisch verbessert wurde

Die Arbeitsversion besitzt Primär- und Fremdschlüssel, Werteprüfungen für Einwohner und Koordinaten, Suchindizes, Quellenangaben und eindeutige Kennungen. Einwohnerzahlen sind ganze Zahlen. Unbekannte Werte sind NULL. Länder besitzen ISO-Codes; vorhandene Terra-Kürzel wie `D` und `USA` bleiben für zugeordnete Länder nutzbar. Neue Länder erhalten Kürzel wie `ISO:SS`, damit alte und neue Codes nicht kollidieren. `LAND_ALIAS` dokumentiert alte und abweichende Verweisschlüssel.

Die doppelten Einträge für Belarus, Jemen und die Demokratische Republik Kongo werden in der Arbeitsversion zusammengeführt. Bophuthatswana, Venda und Transkei werden nicht als heutige Staaten gezählt; ihre historischen Kürzel verweisen mit entsprechendem Status auf Südafrika. Die im GeoNames-Dump enthaltenen historischen Länder AN und CS werden ausgeschlossen. Territoriale Anerkennung wird nicht eigenständig bewertet.

584 der 740 ursprünglichen Städte konnten anhand eines innerhalb des Landes eindeutigen Namensalias einem GeoNames-Ort zugeordnet werden. Andere bleiben mit offenem Status in TERRA_STADT_ZUORDNUNG und im Originalbestand erhalten. Es werden keine unsicheren Treffer nur anhand ähnlicher Namen akzeptiert.

## Schulaufgaben und Kompatibilität

Für unveränderte Aufgaben, die genau die Originalstruktur voraussetzen, **terra_original.sqlite** benutzen oder `python sql_konsole.py --original` starten. Die Rohdaten sind dort bewusst nicht geändert. Die berichtigten Musterlösungen stehen separat in **loesungen_original_korrigiert.sql**. Beispielsweise muss Aufgabe 8 `F_NAME` statt der Mündungsspalte `FLUSS` prüfen, und Aufgabe 9 nach `ST_NAME` statt nach dem konstanten Länderkürzel sortieren.

Die erweiterte Arbeitsversion ist **keine vollständig kompatible Kopie des alten Schemas**. STADT hat eine ID; LANDTEIL benutzt GeoNames-Regioncodes wie `DE.15`; BERG, FLUSS, SEE und weitere geografische Namen sind lesbare Ansichten auf GEO_OBJEKT. Sie haben eigene Objekt-IDs und keine Namensschlüssel mehr. Alte Aufgaben zur Mitgliedschaft in Organisationen und Prozentanteilen von Kontinenten bleiben im Originalbestand. Diese historischen Beziehungen wurden nicht als heutiger Zustand übernommen.

## MariaDB importieren

Getestet mit MariaDB 10.11.14. Der Export erstellt und löscht selbst keine Datenbank. In einem eigenen, leeren Datenbankschema importieren; ein erneuter Import in dasselbe befüllte Schema bricht an bereits existierenden Tabellen ab.

```sql
CREATE DATABASE terra_erweitert
  CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
```

Danach in der klassischen Eingabeaufforderung oder einer Unix-Shell, aus dem entpackten Ordner:

```sh
mariadb --user=DEIN_BENUTZER --password terra_erweitert < terra_mariadb.sql
```

In PowerShell stattdessen den MariaDB-Client öffnen und dort `USE terra_erweitert;` und anschließend `SOURCE C:/Pfad/zu/terra_mariadb.sql;` eingeben. Den tatsächlichen Pfad einsetzen. Auch der SQL-Import eines Datenbankprogramms ist möglich. Die Datei enthält UTF-8, InnoDB, Schlüssel und Werteprüfungen. Ihre Sitzung verwendet `NO_BACKSLASH_ESCAPES`, damit Quelltexte ohne Zeichenverlust importiert werden. Bei einem abgebrochenen Import ein neues leeres Schema verwenden.

## SQLite prüfen und neu aufbauen

```sh
python pruefen.py
```

Die Prüfung verändert die Datenbanken nicht. Sie verwendet für den Neuimport einen temporären Ordner und für Schreibversuche eine Kopie im Arbeitsspeicher. Der Prüfbericht wird im Paketordner geschrieben.

Für den vollständigen Neuaufbau aus den mitgelieferten Rohdaten zuerst eine Kopie des Paketordners anlegen. Der Builder ersetzt dort die generierten Datenbanken und Exporte:

```sh
python -m pip install -r requirements_build.txt
python build_terra.py
python pruefen.py
```

Der Aufbau benötigt Python und Shapely. Für die normale Nutzung und die Konsole wird Shapely nicht benötigt. Der Builder aktualisiert die Rohdaten nicht automatisch aus dem Internet. Er arbeitet mit dem mitgelieferten Snapshot. Ein Quellenupdate muss bewusst erfolgen und anschließend erneut geprüft werden.

**Datenstand:** Das Abrufdatum ist nicht das Erhebungsjahr. Einwohnerzahlen sind quellenbasierte Snapshot-Werte mit überwiegend unbekanntem Erhebungsjahr, keine einheitliche Bevölkerungsstatistik für 2026. Weitere Grenzen und die Herkunft jedes Teilbestands stehen in QUALITAET_UND_GRENZEN.md.
