Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m290_guko:leistungsbeurteilungen:03_lb:b_projektbeschrieb [2025/11/30 21:05] – gkoch | modul:m290_guko:leistungsbeurteilungen:03_lb:b_projektbeschrieb [2026/01/19 14:08] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== LB03 - Projektauftrag | + | ====== LB03 – Projektarbeit: |
| ===== Einleitung ===== | ===== Einleitung ===== | ||
| + | In den ersten zwei Dritteln des Moduls M290 haben Sie sich intensiv mit relationalen Datenbanken, | ||
| - | In den ersten zwei Dritteln des Moduls **M290** haben Sie sich intensiv | + | In der dritten und letzten Leistungsbeurteilung (LB03) verknüpfen |
| - | **SQL** (DDL, DML, DCL), **ERM/ERD**, Tabellenbeziehungen, | + | |
| - | In der dritten und letzten Leistungsbeurteilung (LB03) verknüpfen wir dieses Wissen mit einem **Backend-Server**: | + | <WRAP box round center 80%> |
| - | Sie implementieren einen **Node.js/ | + | **Wichtig:** Das Erklärvideo (Screencast) ist Teil der Leistung. |
| - | Das Frontend wird **nicht** programmiert – stattdessen simulieren wir es mit **Postman**. | + | Beide Lernenden müssen darin vorkommen und jeweils einen Teil von Setup/Code verständlich erklären. |
| + | </ | ||
| - | ===== Auftrag | + | ===== Rahmenbedingungen |
| + | * **Sozialform: | ||
| + | * **Zeit:** ca. 7 Lektionen Projektzeit im Unterricht (Inputs jeweils zu Beginn der Lektion) | ||
| + | * **Abgabe:** Letzter Unterrichtstag des Semesters, **21:00 Uhr** | ||
| + | * **Benotung: | ||
| - | Sie wählen im 2er-Team einen der beschriebenen | + | |
| + | ===== Auftrag ===== | ||
| + | Sie wählen im 2er-Team | ||
| Zu diesem Use Case entwickeln Sie: | Zu diesem Use Case entwickeln Sie: | ||
| - | * ein **sauberes Datenmodell** (ERM/ | + | * ein sauberes Datenmodell (ERM/ |
| - | * eine passende | + | * eine passende MySQL-Datenbank mit Startdaten und einem AppUser, |
| - | * einen **Express-Server**, der die wichtigsten Funktionen als **CRUD-REST-API** bereitstellt, | + | * einen Express-Server, |
| - | * ein **Video-Tutorial** (ca. 15 Minuten), in dem Sie Ihre Lösung erklären und demonstrieren. | + | * ein Video-Tutorial (Screencast) von ca. 15 Minuten, in dem Sie Ihre Lösung erklären und demonstrieren. |
| - | + | ||
| - | Zielpublikum des Tutorials sind Ihre «Mit-Auszubildenden» aus dem 2. Lehrjahr, die die Themen | + | |
| + | Zielpublikum des Tutorials sind Ihre Mit-Auszubildenden aus dem 2. Lehrjahr, die die Themen | ||
| * Daten & Datenbanken, | * Daten & Datenbanken, | ||
| * Zugriff auf Daten in einer 3-Schichten-Architektur (Client – Server – Datenbank), | * Zugriff auf Daten in einer 3-Schichten-Architektur (Client – Server – Datenbank), | ||
| - | * CRUD-Operationen in SQL und über eine REST-API | + | * CRUD-Operationen in SQL und über eine REST-API |
| - | besser verstehen sollen. | ||
| + | ===== Anforderungen (MUSS) ===== | ||
| + | <WRAP box round center 80%> | ||
| + | **Mindestanforderungen (MUSS)** | ||
| + | * Backend läuft (Start über '' | ||
| + | * Mindestens **2 Tabellen** in MySQL (mit PK/FK) | ||
| + | * **CRUD** vollständig über API-Endpoints (z.B. ''/ | ||
| + | * Mindestens **eine JOIN-Route** (Daten aus 2 Tabellen) | ||
| + | * Mindestens **eine Aggregat-Route** (COUNT/ | ||
| + | * Zugriff auf DB **nicht** als '' | ||
| + | * Video-Tutorial, | ||
| + | </ | ||
| - | ===== Inhalt des Videotutorials ===== | ||
| + | ===== Inhalt des Video-Tutorials (Screencast, | ||
| Das Video soll strukturiert und nachvollziehbar sein und mindestens folgende Teile enthalten: | Das Video soll strukturiert und nachvollziehbar sein und mindestens folgende Teile enthalten: | ||
| Zeile 38: | Zeile 54: | ||
| - Was Ihre App grob können soll | - Was Ihre App grob können soll | ||
| - **Analyse & Datenmodell** | - **Analyse & Datenmodell** | ||
| - | - Erklärung des **ERM** (Entitäten, | + | - Erklärung des ERM (Entitäten, |
| - | - Erklärung des **ERD** in Crow’s-Foot-Notation (Tabellen, PK/FK, Datentypen) | + | - Erklärung des ERD in Crow’s-Foot-Notation (Tabellen, PK/FK, Datentypen) |
| - **Datenbank** | - **Datenbank** | ||
| - Anlegen der Datenbank & Tabellen per SQL-Skript/ | - Anlegen der Datenbank & Tabellen per SQL-Skript/ | ||
| - Import der Startdaten per SQL-Skript/ | - Import der Startdaten per SQL-Skript/ | ||
| - | - Anlegen und Berechtigen eines **AppUsers** (DCL) | + | - Anlegen und Berechtigen eines AppUsers (DCL) + kurzer Hinweis, warum diese Rechte sinnvoll sind |
| - **Backend / Server** | - **Backend / Server** | ||
| - | - Aufbau des Node.js/ | + | - Aufbau des Node.js/ |
| - | - Erklärung der wichtigsten Routen (z.B. GET /api/…, POST /api/…) | + | - Erklärung der wichtigsten Routen (z.B. '' |
| - **Tests mit Postman** | - **Tests mit Postman** | ||
| - | - Vorführen der wichtigsten **REST-Endpunkte** mit Postman | + | - Vorführen der CRUD-Endpunkte (Create, Read, Update, Delete) |
| - | - Anzeigen eines Beispiels mit **JOIN** | + | - dabei **zeigen**, dass sich die Daten in der Datenbank |
| - | - Anzeigen eines Beispiels mit **Aggregatfunktion** (z.B. COUNT, AVG, MAX) | + | - mindestens |
| - | - Sinnvolle Verwendung von **HTTP-Statuscodes** (z.B. 200, 201, 400, 404, 500 …) | + | - mindestens |
| + | - sinnvolle | ||
| - **Reflexion** | - **Reflexion** | ||
| - | - Jede Person | + | - Jede Person nennt mindestens |
| - Was würden Sie beim nächsten Mal anders machen? | - Was würden Sie beim nächsten Mal anders machen? | ||
| - **Schluss** | - **Schluss** | ||
| Zeile 59: | Zeile 76: | ||
| - Ausblick / mögliche Erweiterungen | - Ausblick / mögliche Erweiterungen | ||
| + | <WRAP box round center 80%> | ||
| + | **Wichtig für die Bewertung des Verständnisses** | ||
| + | * Beide Teammitglieder müssen im Video **hörbar** sein (eigene Erklärung, nicht nur „ja genau“). | ||
| + | * Beide müssen je einen **eigenen Teil** erklären (z.B. Person A: DB/SQL/DCL, Person B: API-Routen/ | ||
| + | * Sie müssen während dem Video zeigen, dass Sie Ihren eigenen Code verstehen (Warum dieser Endpoint? Warum dieser JOIN? Was bedeutet '' | ||
| + | </ | ||
| + | <WRAP center round info 60%> | ||
| + | Ein Beispiel-Video können Sie sich hier anschauen: | ||
| - | ===== Wichtige Hinweise ===== | + | [[https:// |
| - | + | \\ | |
| - | <WRAP center round box 80%> | + | Für das Erstellen des Screencasts empfiehlt sich eine entsprechende Software zu nutzen: Ich habe die Trial Version von **Camtasia** benutzt (darum die Wassermarke). Camtasia können sie hier downloaden: https:// |
| - | **Frontend:** | + | \\ |
| - | <color # | + | Alternativ bietet auch Microsoft in Office365 die Software |
| - | Alle Funktionen werden mit **Postman** getestet und demonstriert. | + | |
| </ | </ | ||
| - | * Fokus liegt auf: | ||
| - | * **sauberem Datenmodell** (ERM/ERD, richtige Datentypen, PK/FK), | ||
| - | * korrekten **SQL-Skripten** (DDL, DML, DCL), | ||
| - | * funktionierendem **Express-Server** mit CRUD-Endpunkten, | ||
| - | * sinnvollen **Fehlermeldungen** und HTTP-Statuscodes, | ||
| - | * vollständigen **Datenbank-Dump**, | ||
| - | * verständlicher **Erklärung** im Video. | ||
| - | * Es reicht, wenn Ihr Server Daten **erstellen, | ||
| - | * Der Backend-Server darf nicht über den Root-User in der Datenbank Änderungen machen, sondern " | ||
| - | ===== Abgabe – Zu liefernde Lernprodukte ===== | + | ===== Abgabe – zu liefernde Lernprodukte===== |
| + | Folgende Teile sind Teil der Abgabe: | ||
| - | < | + | - **Video-Tutorial** (ca. 15 Min) |
| - | <color # | + | * Format: MP4 (H.264), max. FullHD (1920×1080), |
| + | * Max. Grösse: 1 GB (Bitrate ca. 3000–5000 kbps) | ||
| + | - **ERM und ERD** als PDF-Datei oder PNG | ||
| + | - **SQL-Skript (DDL)**: Anlegen der Tabellenstruktur (Als PDF/Word oder '' | ||
| + | - **SQL-Skript (DML)**: Import / Insert der Startdaten (Als PDF/Word oder '' | ||
| + | - **SQL-Skript (DCL)**: AppUser erstellen + Rechte vergeben (Als PDF/Word oder '' | ||
| + | - **Datenbank-Dump**: | ||
| + | - **Node.js-Projektordner** | ||
| + | * '' | ||
| + | * Server-Datei(en) (z.B. '' | ||
| + | |||
| + | <WRAP box round center | ||
| + | **Reproduzierbarkeit: | ||
| </ | </ | ||
| - | Im ZIP-File müssen enthalten sein: | ||
| - | - **Video-Tutorial** | + | ===== Bewertungsraster |
| - | - **ERM** und **ERD** als PDF-Datei | + | |
| - | - **SQL-Skript (DDL)**: Anlegen der Tabellenstruktur | + | |
| - | - **SQL-Skript (DML)**: Import / Insert der Startdaten | + | |
| - | - **SQL-Skript (DCL)**: Anlegen und Berechtigen eines AppUsers zur DB (inkl. Kommentar zu den vergebenen Rechten) | + | |
| - | - **Datenbank-Dump**: | + | |
| - | - **Node.js-Projektordner**: | + | |
| - | - package.json | + | |
| - | - Server-Datei(en) (z.B. app.js / index.js) | + | |
| - | - ggf. .env-Beispiel (ohne echte Passwörter) | + | |
| - | - README.txt mit kurzen Start-Hinweisen (z.B. 'npm install', | + | |
| - | Stellen Sie sicher, dass Ihr Projekt | + | ^ Bereich ^ Max. Punkte ^ Voll erfüllt ^ Teilweise erfüllt ^ Nicht erfüllt ^ |
| - | bereitgestellten Skripten | + | | **1. Projekt-Setup & Reproduzierbarkeit** | **8** | Start/Setup klar (alle Dateien sind vorhanden und ausführbar), |
| + | | **2. Datenmodell (ERM/ERD)** | **12** | Entitäten/ | ||
| + | | **3. MySQL-Implementierung (DDL + Datentypen + Constraints)** | **10** | DDL ausführbar, | ||
| + | | **4. Startdaten (DML)** | **6** | Mehrere realistische Datensätze, | ||
| + | | **5. AppUser & Rechte (DCL, Least Privilege)** | **6** | AppUser funktioniert, | ||
| + | | **6. API Design & Struktur** | **8** | Konsistente Pfade (''/ | ||
| + | | **7. CRUD über Backend → MySQL** | **10** | '' | ||
| + | | **8. JOIN-Route** | **6** | Mindestens eine Route mit JOIN, Ergebnis sinnvoll | JOIN vorhanden, aber Ergebnis unklar/ | ||
| + | | **9. Aggregat-Route (GROUP BY)** | **6** | Mindestens eine Aggregat-Route korrekt (COUNT/ | ||
| + | | **10. Validierung, | ||
| + | | **11. Video-Tutorial (Screencast) & Verständnisnachweis** | **20** | Struktur klar, beide erklären aktiv, Demo mit Postman + DB sichtbar, reflektiert, | ||
| + | |||
| + | <WRAP box round center 80%> | ||
| + | **Eigenleistung / Verständnis** | ||
| + | Sie müssen Ihre Lösung erklären können (SQL, Datenmodell, | ||
| + | Wenn zentrale Teile nicht fachlich korrekt begründet | ||
| + | |||
| + | **Verspätete Abgaben** | ||
| + | Geben Sie die Projektarbeit verspätet ab, wird pro 24h-Verspätung eine ganze Note abgezogen. | ||
| + | |||
| + | **Die Projektarbeit ist der dritte Teil der Modulnote** und daher __nicht optional__. Bei Nicht-Abgabe (ohne Dispens/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Notenberechnung (lineare Skala) ===== | ||
| + | <WRAP box round center 80%> | ||
| + | **Note = 1.0 + 5.0 × (Punkte / 100)** | ||
| + | (Beispiel: 80 Punkte → 1.0 + 5.0 × 0.80 = 5.0) | ||
| + | </ | ||