|
| 1 | +# Database Development |
| 2 | + |
| 3 | +Willkommen zu **Database Development**, dem Folgemodul zu **Relational Databases**. |
| 4 | + |
| 5 | +In **Relational Databases** hast du relationale Datenbanken aus Sicht von SQL, Modellierung, Normalisierung, Transaktionen und ersten ORM-Konzepten kennengelernt. In **Database Development** verschiebt sich die Perspektive: Die Datenbank ist nicht mehr nur ein System, das du bedienst. Sie wird Teil einer Softwarearchitektur. |
| 6 | + |
| 7 | +Die zentrale Frage lautet: |
| 8 | + |
| 9 | +> Wie entwickelst du mit PostgreSQL, Spring Boot, Hibernate/JPA und Flyway eine robuste, wartbare und performante datenbankgestützte Anwendung? |
| 10 | +
|
| 11 | +Spring Boot ist in diesem Kurs die konkrete Lernumgebung {cite}`spring_boot_reference`. Für den Datenbankzugriff arbeiten wir mit Spring Data JPA und Hibernate/JPA {cite}`spring_data_jpa_reference` {cite}`hibernate_orm_user_guide`. Schemaänderungen werden mit Flyway als versionierte Migrationen gedacht {cite}`flyway_documentation`. PostgreSQL bleibt unser relationales Referenzsystem {cite}`postgresql_documentation`. |
| 12 | + |
| 13 | +:::{important} Lernziele des Moduls |
| 14 | +Nach Abschluss des Moduls kannst du: |
| 15 | + |
| 16 | +- ein kleines Spring-Boot-Backend mit PostgreSQL fachlich sinnvoll strukturieren. |
| 17 | +- Datenmodelle mit JPA Entities, Beziehungen, Constraints und DTO-Abgrenzung abbilden. |
| 18 | +- Flyway-Migrationen planen, schreiben und Risiken von Schemaänderungen einschätzen. |
| 19 | +- Transaktionsgrenzen im Anwendungscode mit `@Transactional` begründen. |
| 20 | +- Repository Methods, JPQL und native SQL Queries situationsgerecht einsetzen. |
| 21 | +- typische ORM-Probleme wie N+1, falsches Lazy Loading und ungeeignete Abfragen erkennen. |
| 22 | +- Query-Performance mit `EXPLAIN`, einfachen Indexüberlegungen und API-Zugriffsmustern beurteilen. |
| 23 | +- Integrationstests gegen echte PostgreSQL-Instanzen konzeptionell einordnen, etwa mit Testcontainers {cite}`testcontainers_documentation`. |
| 24 | +::: |
| 25 | + |
| 26 | +## Die Leitfallstudie |
| 27 | + |
| 28 | +Wir arbeiten durchgehend mit einem **Ticket-System für internen Support**. Dieses System ist absichtlich nah an typischen Entwicklungsprojekten: |
| 29 | + |
| 30 | +- Mitarbeitende erstellen Tickets. |
| 31 | +- Support-Teams übernehmen Zuständigkeiten. |
| 32 | +- Tickets haben Status, Priorität, Kommentare und Ereignisse. |
| 33 | +- Labels erlauben flexible Kategorisierung. |
| 34 | +- Reporting-Abfragen zeigen Trends und Engpässe. |
| 35 | + |
| 36 | +Diese Fallstudie ist klein genug, damit du sie im Unterricht überblicken kannst. Gleichzeitig enthält sie genug Reibung für echte Datenbankentwicklungsfragen: Transaktionsgrenzen, n:m-Beziehungen, Migrationen, ORM-Ladestrategien, Reporting Queries und Performance. |
| 37 | + |
| 38 | +## Aufbau des Moduls |
| 39 | + |
| 40 | +Das Modul umfasst neun Blöcke zu je drei Lektionen: |
| 41 | + |
| 42 | +| Block | Thema | Schwerpunkt | |
| 43 | +| --- | --- | --- | |
| 44 | +| 1 | Wiederholung und Standortbestimmung | Relevantes Vorwissen aus **Relational Databases** aktivieren | |
| 45 | +| 2 | Spring Boot, PostgreSQL und Datenbankzugriff | Projektstruktur, Konfiguration, Repository- und Service-Layer | |
| 46 | +| 3 | Hibernate/JPA Grundlagen | Entities, Beziehungen, Repositories, CRUD | |
| 47 | +| 4 | Transaktionen und Datenkonsistenz | `@Transactional`, Rollback, Invarianten | |
| 48 | +| 5 | Schema Design für Softwareprojekte | Constraints, IDs, Statusmodellierung, DTO-Abgrenzung | |
| 49 | +| 6 | Flyway und Schema Evolution | Migrationen, Datenmigrationen, sichere Änderungsschritte | |
| 50 | +| 7 | Query Design | Repository Methods, JPQL, native SQL und Reporting | |
| 51 | +| 8 | Performance und ORM-Probleme | N+1, Lazy/Eager Loading, Pagination, `EXPLAIN`, Indexe | |
| 52 | +| 9 | Projektarbeit und Prüfungsvorbereitung | Review, Konsolidierung, Prüfungstraining | |
| 53 | + |
| 54 | +## Arbeitsweise |
| 55 | + |
| 56 | +Du wirst in diesem Modul viel lesen, vergleichen und begründen. Das ist Absicht. Datenbankentwicklung besteht nicht nur darin, Code zum Laufen zu bringen. Gute Entwicklerinnen und Entwickler können erklären, warum eine Beziehung so modelliert ist, warum eine Query so geschrieben wurde, wo eine Transaktion beginnt und weshalb eine Migration sicher oder riskant ist. |
| 57 | + |
| 58 | +Die Blöcke folgen deshalb einem wiederkehrenden Muster: |
| 59 | + |
| 60 | +1. Ein realistisches Problem aus der Softwareentwicklung. |
| 61 | +2. Eine kompakte fachliche Einordnung. |
| 62 | +3. Eine angeleitete Umsetzung oder Analyse. |
| 63 | +4. Eine Transferfrage für ähnliche Situationen. |
| 64 | + |
| 65 | +Im ersten Block beginnen wir mit einer Standortbestimmung. Sie zeigt, welche Grundlagen aus **Relational Databases** du bereits sicher einsetzen kannst und welche Themen in **Database Development** bewusst vertieft werden. |
0 commit comments