This commit is contained in:
DotNaos 2025-06-06 14:26:07 +02:00
parent a201911294
commit 08f1b2b944
2 changed files with 101 additions and 1 deletions

View File

@ -326,7 +326,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.3"
"version": "3.13.2"
}
},
"nbformat": 4,

View File

@ -0,0 +1,100 @@
#!/usr/bin/env python
# coding: utf-8
# ## Zoo-Verwaltung in MongoDB
#
# In diesem Beispiel soll die einfache Zoo-Verwaltung aus der Aufgabe zuvor in MongoDB umgesetzt werden.
#
# Installieren Sie dazu zunächst MongoDB auf Ihrem Rechner, hier finden Sie den Download und die Dokumentation zur Installation:
# https://www.mongodb.com/try/download/community
#
# Um MongoDB in Python zu verwenden, benötigen Sie das Modul `pymongo`. Installieren Sie es mit dem folgenden Befehl:
#
# conda install conda-forge::pymongo
#
#
# In[9]:
# Client importieren
from pymongo import MongoClient
# In[10]:
# TODO: Mit dieser Zelle können Sie testen, ob die Verbindung zur MongoDB-Datenbank funktioniert.
# Verbindungsaufbau zu einer MongoDB-Datenbank
client = MongoClient('localhost', 27017)
# Zoo-Datenbank erstellen
db = client['zoo']
# Beispiel-Dokument in Collection 'animals' erstellen
db.animals.insert_one({'name': 'Ella', 'species': 'elephant'})
# Alle Dokumente in Collection 'animals' ausgeben
for animal in db.animals.find():
print(animal)
# ### Teilaufgabe 1 (4 Punkte):
#
# Fügen Sie im folgenden Dokumente ein, die die selben Informationen enthalten wie in der Aufgabe zuvor. Dabei sollen drei Tiere mit zwei Tierpfegern erstellt werden. Ein Tierpfleger versorgt mehrere Tiere, jedes Tier ist genau einem Tierpfleger zugeordnet. Ob Sie die Daten dabei normalisieren oder nicht, bleibt Ihnen überlassen.
# In[11]:
# Einfügen von Beispieldaten:
db.animals.delete_many({})
db.animals.insert_many([
{'name': 'Babar', 'species': 'Elephant', 'zookeeper': 'John Doe'},
{'name': 'Dumbo', 'species': 'Elephant', 'zookeeper': 'John Doe'},
{'name': 'Melman', 'species': 'Giraffe', 'zookeeper': 'Jane Doe'}
])
# ### Teilaufgabe 2 (3 Punkte):
#
# Erstellen Sie jetzt noch eine Funktion, die einen Überblick über alle Tiere im Zoo gibt, die Ausgabe soll dabei dem Beispiel ähneln.
# In[12]:
# Ausgabe aller Daten
def zoo_overview():
animals = list(db.animals.find({'zookeeper': {'$exists': True}}))
name_width = max(len(a['name']) for a in animals)
species_width = max(len(a['species']) for a in animals)
zk_width = max(len(a['zookeeper']) for a in animals)
sep = '-' * (name_width + species_width + zk_width + 10)
print(sep)
for a in animals:
print(f"| {a['name']:<{name_width}} | {a['species']:<{species_width}} | {a['zookeeper']:<{zk_width}} |")
print(sep)
# Testaufruf
zoo_overview()
# ### Teilaufgabe 3 (3 Punkte):
#
# Begründen Sie, warum Sie die Struktur der Datenbank so gewählt haben, wie Sie es getan haben.
#
# Welche Vor- und Nachteile hat Ihre Lösung (für volle Punktzahl sollten Sie mindestens 2 Vor- und 2 Nachteile nennen)?
#
# Antwort:
#
# Ich habe mich für eine eingebettete Struktur entschieden, bei der der Name des Tierpflegers direkt in den Tierdokumenten gespeichert wird. Dadurch liegen alle relevanten Informationen in einem Dokument vor und Joins oder Aggregationen sind nicht nötig.
#
# **Vorteile:**
# - Schnelle und einfache Abfragen ohne Joins.
# - Einfaches Datenmodell mit geringer Komplexität.
#
# **Nachteile:**
# - Datenredundanz, da Tierpflegerdaten in mehreren Dokumenten wiederholt werden.
# - Risiko von Inkonsistenzen bei Änderungen an Tierpflegerdaten.
#