TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
Arbeitsblatt Datenbanken

ARBEITSBLATT 1: DATENBANKEN

 

 

DATENBANKEN ÜBERALL

 
In unserer digitalen Gesellschaft hinterlässt du täglich unzählige Datenspuren, beispielsweise auf Überwachungskameras, beim Vorweisen von Abonnementen und Eintrittskarten, beim Zahlen mit Kreditkarten, beim Telefonieren und Versenden von SMS und natürlich, wenn du dich in sozialen Medien bewegst. Die enorme Menge von Informationen aller erfassten Personen werden digitalisiert und so in Datenbanken abgelegt, dass mehrere Nutzer von verschiedenen Orten mit beliebigen Systemen darauf zugreifen können.  

FRAGE 1: Warum ist Erfassung all dieser Daten ohne Verwendung des Computers unmöglich?

FRAGE 2: Welche Auswirkungen kann die Erfassung von Personendaten auf dich haben?

 

 

TABELLEN VERWENDEN

 

Informationen werden als Daten in einer Datenbank oft  in Tabellenform abgespeichert. Du kennst Tabellen aus dem täglichen Leben und weisst, dass Tabellen in Zeilen und Spalten strukturiert sind.

Für dieses Arbeitsblatt verwendest du eine Musikchart (Hitliste) mit den hundert aktuell beliebtesten Songs. In einer Tabelle werden der Titel, der Name des Sängers und die Platzierung aufgeführt.  

 

 

AUFGABE 1:

 

Merke dir die oben notierten Begriffe. Das TigerJython-Modul DbTable enthält Befehle, die es ermöglichen, auf eine einfache Art mit Datenbanktabellen umzugehen.

Um diese Befehle verwenden zu können, musst du das Modul dbtable importieren:

   from dbtable import *

Damit du die Daten nicht selbst eintippen musst, kannst du  zuerst mit

   topsongs = DbTable()

ein leeres Tabellenobjekt erzeugen und dann mit dem Befehl restoreFromTJ() die Daten aus der Distribution von TigerJython holen.

   topsongs.restoreFromTJ("tigerjython.db")

Schliesslich stellst du die Tabelle im Ausgabefenster mit dem view-Befehl dar:

   topsongs.view()

Zusammengefasst:

from dbtable import *

topsongs = DbTable()
topsongs.restoreFromTJ("tigerjython.db") 
topsongs.view()

 

 

AUFGABE 2

 

Führe das Programm aus und betrachte die Tabelle im Ausgabefenster.

FRAGE 3: Nach welcher Spalte ist die Tabelle sortiert?

FRAGE 4: Welches sind die fünf beliebtesten Songs?

FRAGE 5: Wie viele Songs werden von Justin Bieber gesungen?

Um die Fragen 4 und 5 zu beantworten, musst du ziemlich viel "Knochenarbeit" leisten. Stell dir vor, wie es wäre, wenn die Tabelle 100'000 Zeilen hätte! In deinem Programm kannst du den Computer mit einem einzigen Befehl anweisen, die Tabelle zu sortieren. Willst du sie beispielsweise in der Reihenfolge der Spalte rank sortieren lassen, so schreibst du

   topsongs.sort("rank")

Du kannst auch verlangen, dass nur Zeilen ausgeschrieben werden, die eine bestimmte Bedingung erfüllen, beispielsweise dass der Sänger Justin Bieber heisst. Du schreibst dazu

   topsongs.view(artist = "Justin Bieber")

 

 

AUFGABE 3

 

Löse Fragen 4 und 5 mit einem Programm.

 

 

TABELLEN SPEICHERN UND WIEDER HOLEN

 

Tabellenvariablen verhalten sich gleich wie andere Programmvariable. Wie du weisst, gehen Variablenwert bei Programmende verloren. Damit du die Tabellendaten in einem anderen Programmlauf wieder verwenden kannst, musst du daher die Tabelle in einer Datenbankdatei speichern. Die Tabelle topsongs kannst du beispielsweise in der Datenbankdatei mediathek.db  wie folgt speichern:

  topsongs.save("mediathek.db")

Statt Datenbankdatei sagt man auch nur kurz Datenbank und du findest diese nach dem save-Befehl im gleichen Verzeichnis wie dein Programm.

Um die Tabelle in einem anderen Programm wieder zu verwenden, holst du ihre Werte mit

  topsongs = DbTable()
  topsongs.restore("mediathek.db")

zurück.

 

 

AUFGABE 4

 

Speichere deine nach Rang sortierte Tabelle topsongs in der Datenbank mediathek.db

 

 

AUFGABE 5

 

Hole die Tabelle topsongs aus der Datenbank mediathek.db zurück und schreibe sie im Ausgabefenster aus. Beachte, dass die Tabelle jetzt nach Rang sortiert ist.

 

 

DATENSÄTZE LÖSCHEN

 

Um einen Datensatz zu löschen, verwendest du den delete-Befehl, musst aber mit einer Bedingung angeben, welchen Datensatz du löschen willst  Die Bedingung bezieht sich auf einen Wert eines bestimmten Feldes, beispielsweise löschst du mit

  topsongs.delete(title = "Wild Thoughts")

die Datensätze, welche den Titel "Wild Thoughts" haben. Trifft dies für mehrere Datensätze zu, so werden alle gelöscht.


Um den Datensatz genauer festzulegen, kannst du auch kommagetrennt mehrere Bedingungen angeben, die alle erfüllt sein müssen.

 

 

AUFGABE 6

 

Hole die Tabelle topsongs aus der Datenbank mediathek.db zurück und lösche alle Songs, die von Justin Bieber gesungen werden. Zeige die Tabelle an, aber speichere sie nicht, damit du immer noch die unveränderte Datenbank verwenden kannst.

 

 

DATENSÄTZE EINFÜGEN

 

Um einen neuen Datensatz einzufügen, verwendest du den insert-Befehl, z.B. fügst du einen Song von Mani Matter auf Platz 101 so ein:

  topsongs.insert("Bim Coiffeur", "Mani Matter", 101)

Beachte, dass du im Befehl die Werte aller Felder angeben musst.

 title  artist  rank
 . . .  . . .  . . .
 Something good  Brett Eldredge    97
 If I Told You  Darius Rucker    98
 More Girls Like  Kip Moore    99
 Its Everyday  Jake Paul   100
 title  artist  rank
 . . .  . . .  . . .
 Something good  Brett Eldredge    97
 If I Told You  Darius Rucker    98
 More Girls Like  Kip Moore    99
 Its Everyday  Jake Paul   100
 Bim Coiffeur  Mani Matter   101

 

 

AUFGABE 7

 

Füge einige deiner beliebtesten Songs ein. Achte darauf, dass die Rangliste immer noch richtig bleibt, dass also nicht zwei Songs denselben Rang belegen. Du kannst auch bestimmte Songs löschen. Speichere die Tabelle zuletzt in der Datenbank mediathek1.db ab.

 

 

DATENSÄTZE DURCHLAUFEN

 

In Datenbanktabellen bilden die einzelnen Zeilen, also die Datensätze, eine Einheit. Du greifst auf Tabelleninformationen  zu, indem du Datensatz um Datensatz liest. Man sagt auch, "man durchlaufe" dabei die Tabelle. Dazu wird am einfachsten eine for-Schleife verwendet. Beispielsweise kannst du die Tabelle topsongs aus der Datenbank mediathek.db mit folgendem Programm durchlaufen und die Felder rank und title ausschreiben. Dabei verwendest du den Punktoperator, um auf die Feldwerte zuzugreifen.

from dbtable import *

topsongs = DbTable()
topsongs.restore("mediathek.db")        
for record in topsongs:
    print record.rank, record.title

 

 

AUFGABE 8

 

Sortiere die Tabelle nach Rang und schreibe dann Titel und Sänger zeilenweise aus. Beim Durchlaufen mit der for-Schleife kannst du mit if-Anweisungen beliebige Bedingungen ausprogrammieren. Sollen z.B. nur die Songs von Justin Bieber angezeigt werden, so schreibst du:

if record.artist == "Justin Bieber":
    print record.rank, record.title

 

 

AUFGABE 9

 

Schreibe die Felder title, artist für die ersten 10 Songs der Hitliste aus. Natürlich kannst du diese Aufgaben auch mit deiner eigenen Datenbank mediathek1.db lösen.

 

 

PERSONENDATENBANK MIT FOTOS

 

Um eine eigene neue Datenbank persons mit den Feldern name, vorname, alter, foto anzulegen, die den Familiennamen, Vornamen, das Alter und ein Bild der Person enthält, erstellst du zuerst eine Tabelle mit den gewünschten Feldern:

persons = DbTable("name", "vorname", "alter", "image")

Nun kannst du einzelne Personen in die Tabelle einfügen, benötigst aber von allen ein Bild (im Format GIF, PNG oder JPG). Die Bilddatei befindet sich im gleichen Verzeichnis wie dein Programm (beispielsweise für die vierzehnjährige Kunz Anna als anna.png). Das Bild musst du zuerst mit getBytes() von der Datei in eine Variable einlesen und kannst es dann in den Datensatz einfügen.

annaPict = getBytes("anna.png")
persons.insert("Kunz", "Anna", 14, annaPict)

Anmerkung: Falls du gerade keine Bilder hast, so kannst du einige Comics-Bilder von hier downloaden und im Programmverzeichnis auspacken. Du musst die Bilder eventuell umbenennen.

 

 

AUFGABE 10

 

Füge einige Datensätze von dir und deinen Kameraden ein und speichere die Tabelle in der Datenbank kameraden.db.

Da das Foto in digitalisierter Form in der Datenbank gespeichert ist, wird es beim Ausschreiben der Tabelle mit view() nicht als Foto dargestellt. Um das Bild zu sehen, benötigst du ein Grafikfenster, am einfachsten ein dir bekanntes Turtlefenster. Mit dem Turtlebefehl drawImage() kannst du an der aktuellen Position der Turtle das Bild erscheinen lassen. Als Vorlage verwendest du folgendes Programm:

from dbtable import *
from gturtle import *

makeTurtle()
ht()
persons = DbTable()
persons.restore('kameraden.db')
x = -320
for record in person:
    setPos(x, 0)
    drawImage(record.image)
    x += 130


 

 

AUFGABE 11

 

Zeige die Personenbilder aus deiner Datenbank an. Schreibe dann unter jedem Bild auch noch Vornamen und Namen aus (mit dem Turtlebefehl label()).

 

 

AUFGABE 12

 

Schreibe ein Programm, dass in einem Eingabedialog nach einem Vornamen fragt und dann die betreffende Person anzeigt.

 

 

AUFGABE 13

 

Erweitere die Personendatenbank und das Abfragen und Anzeigen von Personen nach deinen eigenen Vorstellungen.


 

PERSONENDATENBANK ANDEREN ZUR VERFÜGUNG STELLEN

 

Um die Datenbank mehreren Personen zur Verfügung zu stellen, kannst du die Datei kameraden.db auf einer Cloud speichern (beispielsweise auf Dropbox oder iClound) und anderen Kameraden frei geben. Wenn du dein lokales Verzeichnis mit der Cloud automatisch synchronisierst, so werden jedem User die von dir modifizierten Daten innert wenigen Sekunden zur Verfügung stehen.

 

 

AUFGABE 14

 

Erstelle ein Dropbox-Konto und synchronisiere deine Datenbank. Stelle die Daten anderen Benutzern über das Internet zur Verfügung.

FRAGE 6: Welche Schwierigkeiten können sich ergeben, wenn andere Nutzer die Datenbank auch verändern können?

 

 

4-1
Fachliche Hinweise:

Es ist naheliegend, eine Tabelle als ein Objekt aufzufassen, das bestimmte Eigenschaften (eben die Daten) und Befehle zur Manipulation der Tabelle hat. Daher werden in TigerJython Tabellen als Objekte von der Klasse DbTable modelliert. Um diese Klasse zu verwenden, muss man das Modul dbtable importieren.