7 Musterlösungen

7.1 SQL

7.1.1 Aufgabe 1: Erstellen der Mitarbeiter-Tabelle

CREATE TABLE Mitarbeiter (
    MitarbeiterID INT PRIMARY KEY,
    Name VARCHAR(100),
    Position VARCHAR(100),
    Einstellungsdatum DATE
);

7.1.2 Aufgabe 2: Einfügen von Daten in die Mitarbeiter-Tabelle

INSERT INTO Mitarbeiter (MitarbeiterID, Name, Position, Einstellungsdatum) VALUES (1, 'Anna Schmidt', 'Entwickler', '2021-03-01');
INSERT INTO Mitarbeiter (MitarbeiterID, Name, Position, Einstellungsdatum) VALUES (2, 'Bernd Müller', 'Entwickler', '2021-04-15');
INSERT INTO Mitarbeiter (MitarbeiterID, Name, Position, Einstellungsdatum) VALUES (3, 'Carla Klein', 'Projektmanager', '2021-05-22');

7.1.3 Aufgabe 3: Erstellen der Projekte-Tabelle

CREATE TABLE Projekte (
    ProjektID INT PRIMARY KEY,
    Projektname VARCHAR(100),
    Startdatum DATE
);

7.1.4 Aufgabe 4: Einfügen von Daten in die Projekte-Tabelle

INSERT INTO Projekte (ProjektID, Projektname, Startdatum) VALUES (1, 'Website-Relaunch', '2021-06-01');
INSERT INTO Projekte (ProjektID, Projektname, Startdatum) VALUES (2, 'App-Entwicklung', '2021-07-15');

7.1.5 Aufgabe 5: Erstellen der MitarbeiterProjekte-Zuordnungstabelle

CREATE TABLE MitarbeiterProjekte (
    MitarbeiterID INT,
    ProjektID INT,
    Stunden INT,
    FOREIGN KEY (MitarbeiterID) REFERENCES Mitarbeiter(MitarbeiterID),
    FOREIGN KEY (ProjektID) REFERENCES Projekte(ProjektID)
);

7.1.6 Aufgabe 6: Einfügen von Daten in die MitarbeiterProjekte-Tabelle

INSERT INTO MitarbeiterProjekte (MitarbeiterID, ProjektID, Stunden) VALUES (1, 1, 120);
INSERT INTO MitarbeiterProjekte (MitarbeiterID, ProjektID, Stunden) VALUES (2, 1, 100);
INSERT INTO MitarbeiterProjekte (MitarbeiterID, ProjektID, Stunden) VALUES (1, 2, 90);
INSERT INTO MitarbeiterProjekte (MitarbeiterID, ProjektID, Stunden) VALUES (3, 2, 110);

7.1.7 Aufgabe 7: Abfrage aller Mitarbeiter

SELECT Name FROM Mitarbeiter;

7.1.8 Aufgabe 8: Aktualisieren eines Datensatzes

UPDATE Mitarbeiter
SET Position = 'Senior Entwickler'
WHERE MitarbeiterID = 1;

7.1.9 Aufgabe 9: Löschen eines Projekts

DELETE FROM Projekte WHERE ProjektID = 2;

7.1.10 Aufgabe 10: Erstellen einer Abfrage mit JOIN

SELECT Mitarbeiter.Name, Projekte.Projektname, MitarbeiterProjekte.Stunden
FROM Mitarbeiter
JOIN MitarbeiterProjekte ON Mitarbeiter.MitarbeiterID = MitarbeiterProjekte.MitarbeiterID
JOIN Projekte ON MitarbeiterProjekte.ProjektID = Projekte.ProjektID;

Diese Musterlösung führt Schritt für Schritt durch die Erstellung des Schemas, das Einfügen von Daten und die Durchführung grundlegender Abfragen und Operationen, um ein umfassendes Verständnis der zuvor besprochenen Konzepte zu gewährleisten.

7.2 MongoDB

7.2.1 Aufgabe 1 & 2: Erstellen der Mitarbeiter-Sammlung und Einfügen von Daten

db.createCollection("Mitarbeiter")
db.Mitarbeiter.insertMany([
    { MitarbeiterID: 1, Name: "Max Mustermann", Position: "Softwareentwickler", Einstellungsdatum: new Date("2023-01-10") },
    { MitarbeiterID: 2, Name: "Erika Musterfrau", Position: "Projektmanagerin", Einstellungsdatum: new Date("2023-01-15") },
    { MitarbeiterID: 3, Name: "John Doe", Position: "Analyst", Einstellungsdatum: new Date("2023-02-01") }
])

7.2.2 Aufgabe 3 & 4: Erstellen der Projekte-Sammlung und Einfügen von Daten

db.createCollection("Projekte")
db.Projekte.insertMany([
    { ProjektID: 1, Projektname: "Website Relaunch", Startdatum: new Date("2023-03-01") },
    { ProjektID: 2, Projektname: "Neues CRM-System", Startdatum: new Date("2023-04-01") }
])

7.2.3 Aufgabe 5 & 6: Erstellen der MitarbeiterProjekte-Zuordnung und Einfügen von Daten

In MongoDB könnte man die Beziehung zwischen Mitarbeitern und Projekten direkt in den Dokumenten speichern, entweder in der Mitarbeiter-Sammlung, der Projekte-Sammlung oder in beiden. Für dieses Beispiel fügen wir Referenzen in der Mitarbeiter-Sammlung hinzu:

db.Mitarbeiter.updateOne(
    { MitarbeiterID: 1 },
    { $set: { Projekte: [{ ProjektID: 1, Stunden: 120 }, { ProjektID: 2, Stunden: 60 }] } }
)

db.Mitarbeiter.updateOne(
    { MitarbeiterID: 2 },
    { $set: { Projekte: [{ ProjektID: 1, Stunden: 100 }] } }
)

db.Mitarbeiter.updateOne(
    { MitarbeiterID: 3 },
    { $set: { Projekte: [{ ProjektID: 2, Stunden: 80 }] } }
)

7.2.4 Aufgabe 7: Abfrage aller Mitarbeiter

db.Mitarbeiter.find({}, { Name: 1, Position: 1 })

7.2.5 Aufgabe 8: Aktualisieren eines Datensatzes

db.Mitarbeiter.updateOne(
    { MitarbeiterID: 1 },
    { $set: { Position: "Senior Softwareentwickler" } }
)

7.2.6 Aufgabe 9: Löschen eines Projekts

db.Projekte.deleteOne({ ProjektID: 1 })

7.2.7 Aufgabe 10: Erstellen einer Abfrage mit “JOIN”

MongoDB unterstützt keine Joins im gleichen Sinne wie relationale Datenbanken. Stattdessen kann man die $lookup-Aggregationspipeline verwenden, um ähnliche Operationen durchzuführen. Wenn wir beispielsweise alle Mitarbeiter mit ihren Projekten anzeigen wollen, könnten wir (theoretisch, da wir die Struktur oben angepasst haben) Folgendes tun:

db.Mitarbeiter.aggregate([
    {
        $lookup: {
            from: "Projekte",
            localField: "Projekte.ProjektID",
            foreignField: "ProjektID",
            as: "ProjektDetails"
        }
    }
])

Da wir jedoch die Projekte direkt in den Mitarbeiter-Dokumenten gespeichert haben, ist dieser Schritt in unserem spezifischen Fall nicht nötig. Man würde direkt die Mitarbeiter-Sammlung abfragen, um alle Informationen zu erhalten.

Diese Umsetzung zeigt, wie man grundlegende CRUD-Operationen und Datenmodellierungsstrategien von SQL zu MongoDB übertragen kann, wobei der Fokus auf einem dokumentenorientierten Ansatz liegt.