CREATE TABLE Mitarbeiter (
MitarbeiterID INT PRIMARY KEY,
Name VARCHAR(100),
Position VARCHAR(100),
Einstellungsdatum DATE
);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');CREATE TABLE Projekte (
ProjektID INT PRIMARY KEY,
Projektname VARCHAR(100),
Startdatum DATE
);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');CREATE TABLE MitarbeiterProjekte (
MitarbeiterID INT,
ProjektID INT,
Stunden INT,
FOREIGN KEY (MitarbeiterID) REFERENCES Mitarbeiter(MitarbeiterID),
FOREIGN KEY (ProjektID) REFERENCES Projekte(ProjektID)
);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);SELECT Name FROM Mitarbeiter;UPDATE Mitarbeiter
SET Position = 'Senior Entwickler'
WHERE MitarbeiterID = 1;DELETE FROM Projekte WHERE ProjektID = 2;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.
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") }
])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") }
])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 }] } }
)db.Mitarbeiter.find({}, { Name: 1, Position: 1 })db.Mitarbeiter.updateOne(
{ MitarbeiterID: 1 },
{ $set: { Position: "Senior Softwareentwickler" } }
)db.Projekte.deleteOne({ ProjektID: 1 })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.