SQL Bankraub

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Bankeinbruch.jpg

Inhaltsverzeichnis

Was ist passiert?

Ein Gängstertrio hat am 30. August 2015 die Central Bank in New York ausgeräumt. Es waren Profis wie der Polizeichef bestätigte: "Hier waren ganz klar Kenner mit Erfahrung am Werk. Sie haben den Coup sicher schon über Wochen im Vorfeld geplant. Wir sind sicher, wir finden die Täter."

Du bist eine frisch gebackene FBI-Ermittlerin und sollst mit Hilfe des FBI-Computers die Räuber ausfindig machen - ganz bequem vom Schreibtisch aus :-)

Schreibe dir alle wichtigen Hinweise auf ein Notizblatt, damit du sie immer zur Hand hast, während du mit der FBI-Datenbank arbeitest.

Die Hinweise

Von den Augenzeugen haben wir nur zwei Hinweise auf die drei männliche Täter erhalten:

1. Hinweis: 
Ein Täter bedrohte die Angestellten und wurde von einem Komplizen “Lie“ gerufen. 
Er soll mindestens 1'80 groß gewesen sein und trug auffallend chinesische Kleidung. 
2. Hinweis:
Die Täter waren alle zwischen 20 und 30 Jahre alt, sagte die Bankangestellte.
3.Hinweis:
Eine Augenzeugin erinnert sich an das Fluchtfahrzeug. Es ist ein blauer oder 
schwarzer BMW gewesen sagt sie und das Kennzeichen soll auf 557 geendet haben.


Dein Kollege hat bereits eine erste Vorauswahl von 100 möglichen Personen getroffen, die als Täter in Frage kommen könnten.

Dein Werkzeug: Die FBI-Datenbank

Informationen speichert man heute oft in elektronischen Datenbanken und nicht mehr in dicken Ordnern auf Papier. Ob Facebook oder die Führerscheinstelle, alle verwenden Datenbanken in denen zum Beispiel der Name, Adresse und vielleicht ein Foto jedes Kunden gespeichert wird. Die Datensätze (ein Eintrag in der Datenbank) haben immer den gleichen vorgegebenen Aufbaue - auch wenn einige Felder (Angaben) vielleicht mal leer sind, weil der Kunde seine Adresse noch nicht eingegeben hat oder noch kein Foto hochgeladen hat.

Eine Datenbank besitzt in der Regel mehrere Tabellen. Zum Beispiel gibt es in der FBI-Datenbank eine Tabelle "Personen" in der alle Einwohner aufgelistet sind - immer eine Person pro Zeile der Tabelle. Die Spalten sind einzelne Angaben wie Name, Vorname, Geburtsdatum und so weiter. Der Computer verwendet eine spezielle Sprache, um mit der Datenbank zu sprechen und genau die Informationen für uns heraus zu suchen, die wir haben möchten. Diese Sprache heisst SQL. Klicke auf "ausführen" um den folgenden Befehl an die Datenbank zu schicken. Es werden alle 100 Personen aufgelistet. Übersetzt heisst der Befehl so viel wie: SUCHE ALLES (*) VON Personen und zeig uns das Ergebnis an.

Wenn wir bereits wissen, wie die einzelnen Spalten heissen, können wir die Ausgabe einschränken zum Beispiel:

Nun bekommen wir nur den Vorname und Name aller Personen in der Datenbank angezeigt.

Wir können aber auch ganz gezielt suchen, indem wir der Datenbank genau sagen, nach was wir suchen möchten. Dies erfolgt über den Zusatz "WHERE" wie im folgenden Beispiel:

Nach den Hinweisen hieß einer der Täter "Lie" mit Vornamen. Kannst du den Befehl so umschreiben, dass der Computer alle Lie's findet? Vermutlich gibt es mehr als einen Lie in der Personendatenbank. Vielleicht können uns die anderen Hinweise weiterhelfen. Der Täter soll recht gross gewesen sein, 1,80 oder mehr. Mit "AND" können wir mehrere Suchkriterien gleichzeitig verwenden. Wir müssen einfach jedes Mal ein "AND" einfügen. Zum Beispiel können wir nach allen Lie's suchen, die grösser als 180 cm sind. Dazu verwenden wir wie in der Mathematik ein grösser-als Zeichen:

Wir können immer noch nicht genau sagen, wer der Täter gewesen ist. Suchen wir also nach weiteren Informationen in den Hinweisen. Das Alter des Täters soll zwischen 20 - 30 Jahren gewesen sein. In der Datenbank haben wir keine Angabe zum Alter, jedoch haben wir das Geburtsdatum. Datenbanken verwenden häufig die umgekehrte englische Schreibweise Jahr-Monat-Tag also 2015-10-23 statt 23.10.2015 für ein Datum. Im nachfolgenden Beispiel suchen wir alle Personen, die zwischen dem 1.1.1970 und dem 31.12.1980 geboren wurden:

Wann müsste Lie in etwa geboren sein, wenn er heute zwischen 20 und 30 Jahre alt ist? Kannst du den Befehl so umschreiben und erweitern, dass alle Lie's mit passendem Geburtsdatum gesucht werden? Wenn du alles richtig eingegeben hast, wird nur noch eine Person als Täter übrig bleiben.

Weitere Tabellen in der Datenbank

Unser zweiter Hinweis bezieht sich auf das Fluchtauto. Die Zulassungsstelle arbeitet mit dem FBI zusammen, weshalb wir auch Informationen zu Autos und Nummernschilder in der Datenbank finden können. Damit wir nicht tausende von Autos durchsuchen müssen, hat uns die Behörde nur die Tabelle der Autos gegeben, die zum Tatzeitpunkt in Frage kommen könnten. Die Tabelle heisst "KFZ":

Kannst du den Befehl so abändern, dass nur Einträge mit der Automarke BMW herausgesucht werden? Kannst du mit Hilfe der weiteren Hinweise das Fluchtauto herausfinden?

Wenn du das richtige Auto gefunden hast müssen wir den Halter des Fahrzeugs ermitteln. In der Spalte Fahrzeughalter steht aber nur eine Zahl. Solche Zahlen werden in Datenbanken häufig verwendet, wenn auf Einträge in einer anderen Tabelle verwiesen werden soll. Schauen wir erneut in die Tabelle Personen (mit LIMIT 10 können wir die Ausgabe auf 10 Zeilen beschränken):

Die erste Spalte heisst "ID". Jede Person wurde fortlaufend mit einer Zahl durchnummeriert. Wenn ein Auto also auf Person 28 zugelassen wurde, können wir in der Tabelle Personen danach suchen:

Versuche den Fahrzeughalter vom Fluchtauto auf diese Weise zu ermitteln. Solche Verweise funktionieren auch innerhalb der gleichen Tabelle. Schau dir die Spalten Vater und Mutter an. Kannst du von Person 28 herausfinden wer ihr Vater ist? Hast du eine Idee, wie du den Fahrer des Fluchtautos herausfinden könntest? Vielleicht gehört das Auto ja jemanden aus seiner Familie?

Prüfe immer auch, ob alle anderen Hinweise bezüglich der Täter auf deine gefundene Person passen - wir möchten ja niemanden fälschlicherweise verdächtigen ein Bankräuber zu sein :-)

Die Informationen in den Tiefen der Datenbank

Schau dir die weiteren Tabellen der FBI-Datenbank an:

Die Zusammenhänge zwischen den Tabellen hat dein Vorgänger in einem komplizierten Diagrammen aufgezeichnet. Man bezeichnet so ein Diagramm wohl als Entity-Relationship-Diagramm (ERD). Hast du eine Idee, wie man das lesen kann?

Bankraub ERD.png

Um den dritten Täter zu ermitteln musst du dich wirklich anstrengen! Du hast keine weiteren Hinweise erhalten, kannst du mit Hilfe der bereits gefundenen Informationen vielleicht mehr herausfinden? Was kannst du noch über das Fluchtauto herausfinden? Der Polizeichef sagte, dass die Täter die Tat wohl schon seit Wochen geplant hatten.

Hinweise für die Lehrperson

Ganz bewusst verzichten wir bei diesem Beispiel auf eine umfangreiche Einführung in das Thema Datenbanken oder SQL und seine Syntax. Die Aufgabe ist nach der Idee des Challenge-based-Learnings gestaltet und soll eine Herausforderung für Lernende darstellen, die mit einem für sie unbekannten System konfrontiert werden, wie es wohl auch im Alltag häufiger passieren kann. Über Versuch und Irrtum und einigen Beispielen als Hilfestellung sollen die einfachsten Funktionen von relationalen Datenbanken und der Syntax von SQL erschlossen werden.

Bei der Lösung der Aufgabe sollte zusätzlich mit Papier gearbeitet werden, um sich Notizen über die bereits gefundenen Informationen zu machen. Es wird hier bewusst auf JOINs verzichtet, die aber in einer weiteren Aufgabe folgen könnten. Die gesamte Datenbank ist als versteckter Code am Anfang dieser Wikiseite hinterlegt.

Persönliche Werkzeuge