Schlagwort-Archive: Podcast

Zuuug!

Wir haben jetzt JR-Railpässe und sind damit schon eine Menge durch Japan gefahren. Wir erzählen von Kyoto, Nara, Hiroshima und Kobe. Außerdem haben wir ein paar Sounds aus Japan mitgebracht.

Das Geraschel bei dem Shinkansen-Tonbeispiel stammt übrigens von japanischen Mitreisenden, die ihre Bento-Boxen ausgepackt haben. 🙂

Und hier noch die Erklärung zu den Umziehbrettchen.

Andreas erklärt Anke mal wieder was über Datenbanken. Konkret geht es heute darum, wie man N:M-Beziehungen aus dem E/R-Modell in Tabellen umsetzt und wie das mit SQL geht. Auch über dieses Thema kann man noch in Andreas’ Blogbeitrag von früher nachlesen.

Und hier wieder was Anke in MySQL eingegeben hat:

mysql> show tables;
+----------------+
| Tables_in_todo |
+----------------+
| Person |
| Todoeintrag |
+----------------+
2 rows in set (0,00 sec)

mysql> select * from Person;
+------------------+---------+----------+
| IdentifierPerson | Name | Nachname |
+------------------+---------+----------+
| 1 | Andreas | Hess |
+------------------+---------+----------+
1 row in set (0,00 sec)

mysql> select * from Todoeintrag;
+-----------------------+--------------------+------------+-------------------+------------------+
| IdentifierTodoeintrag | Text | Prioritaet | Faelligkeitsdatum | IdentifierPerson |
+-----------------------+--------------------+------------+-------------------+------------------+
| 1 | Handgepäck packen | 10 | 2019-04-10 | 1 |
+-----------------------+--------------------+------------+-------------------+------------------+
1 row in set (0,00 sec)

mysql> alter table Todoeintrag drop column identifierPerson;
ERROR 1828 (HY000): Cannot drop column 'IdentifierPerson': needed in a foreign key constraint 'todoeintrag_ibfk_1'

mysql> alter table Todoeintrag drop constraint todoeintrag_ibfk_1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint todoeintrag_ibfk_1' at line 1

mysql> alter table Todoeintrag drop foreign key todoeintrag_ibfk_1;
Query OK, 0 rows affected (0,01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table Todoeintrag drop column identifierPerson;
Query OK, 0 rows affected (0,06 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> create table zustaendigfuer (IdentifierTodoeintrag integer, IdentifierPerson integer, foreign key (IdentifierTodoeintrag) references Todoeintrag(IdentifierTodoeintrag), foreign key (IdentifierPerson) references Person(IdentifierPerson), primary key (IdentifierTodoeintrag, IdentifierPerson));
Query OK, 0 rows affected (0,01 sec)

mysql> insert into zustaendigfuer values (1,1);
Query OK, 1 row affected (0,01 sec)

mysql> select * from zustaendigfuer;
+-----------------------+------------------+
| IdentifierTodoeintrag | IdentifierPerson |
+-----------------------+------------------+
| 1 | 1 |
+-----------------------+------------------+
1 row in set (0,00 sec)

mysql> insert into zustaendigfuer values (1,1);
ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'

mysql> insert into zustaendigfuer values (1,2);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (todo.zustaendigfuer, CONSTRAINT zustaendigfuer_ibfk_2 FOREIGN KEY (IdentifierPerson) REFERENCES person (identifierperson))

mysql> alter table zustaendigfuer add column Stunden time;
Query OK, 0 rows affected (0,05 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> select * from zustaendigfuer;
+-----------------------+------------------+---------+
| IdentifierTodoeintrag | IdentifierPerson | Stunden |
+-----------------------+------------------+---------+
| 1 | 1 | NULL |
+-----------------------+------------------+---------+
1 row in set (0,00 sec)

mysql> update zustaendigfuer set Stunden='02:00:00' where IdentifierTodoeintrag=1 AND IdentifierPerson=1;
Query OK, 1 row affected (0,01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from zustaendigfuer;
+-----------------------+------------------+----------+
| IdentifierTodoeintrag | IdentifierPerson | Stunden |
+-----------------------+------------------+----------+
| 1 | 1 | 02:00:00 |
+-----------------------+------------------+----------+
1 row in set (0,00 sec)

mysql> update zustaendigfuer set Stunden='26:00' where IdentifierTodoeintrag=1 AND IdentifierPerson=1;
Query OK, 1 row affected (0,01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from zustaendigfuer;
+-----------------------+------------------+----------+
| IdentifierTodoeintrag | IdentifierPerson | Stunden |
+-----------------------+------------------+----------+
| 1 | 1 | 26:00:00 |
+-----------------------+------------------+----------+
1 row in set (0,00 sec)

Geflasht!

Unserer Weltreise hat begonnen und wir sind tatsächlich in Tokio!

Unsere Vorbereitung mit einer To-Do-Liste mit *zig* Einträgen hat nur bedingt was gebracht, denn, wie es in unserem Outro immer heißt: “Irgendwas läuft schief!” Wir haben unsere JR Railpässe daheim vergessen.

Das hat uns nicht davon abgehalten, uns von Tokio flashen zu lassen. Wir berichten von japanischen Toiletten, einer Speisekarte, von der wir nichts verstanden haben, einem Tempel in Asakusa und koreanischer Popkultur in Shin-Okubo.

Im Blog zeigen wir dazu Fotos, die uns noch lange erfreuen werden und ganz am Schluss spielen wir für ein paar Sekunden jenen K-Pop an, mit dem wir beim Mittagessen beschallt wurden. (“Yes or Yes” von “Twice”).

Ach ja, und in dieser Episode gibt es ausnahmsweise mal gar nix über Datenbanken. Wir müssen bei all den Eindrücken unser Hirn erst wieder frei kriegen, bevor dort wieder was über Entities, Relationships und SQL rein passt.

Check-In

Am Securitycheck für die Gates D1-10 hatte sich vor ein paar Stunden jemand übergeben. Zwar hatte das Reinigungspersonal alles Sichtbare entfernt, aber der beißend-saure Geruch hing noch immer in der Luft als wir dort ankamen. Während wir versuchten sämtliche Elektronik aus unserem Handgepäck in verschiedene Plastikbehälter zu packen ohne uns durch den Geruch angestachelt ebenfalls zu übergeben, ermahnte uns die Stimme von Bruce Willis in regelmäßigen Abständen unser Gepäck zu keinem Zeitpunkt aus den Augen zu lassen. Ein Unterfangen das Angesichts der zehn befüllten Plastikkisten ans Unmögliche grenzte.

Eine der zahlreichen Dutyfree-Parfümerien hatte das gesamte Personal mit kleine parfümierten Teststreifen ausgestattet, damit diese die restlichen Stunden ihrer Schicht ohne Zwischenfall durchleben konnten.

Wahrscheinlich hatte die Buchauswahl am einzigen  Zeitschriften Kiosk zwischen Kontrolle und Gate, bei einem Passagier die Flugangst und damit den Brechreiz erst ausgelöst. Neben zwei Liebesromanen waren dort ausschließlich Katastrophenromane insbesondere von Flugzeugabstürzen zu finden.

Die perfekte Organisation der japanischen Fluglinie ließ ab dem Ankommen am Gate allerdings keinen Zweifel mehr offen, dass irgendetwas schief gehen könnte. Mit äußerster Freundlichkeit wurden wir ordentlich und diszipliniert ins Flugzeug geleitet.

P.S.: Eine Checkliste mit 40 Positionen und eine Packliste mit 80 Objekten haben uns übrigens nicht daran gehindert, die japanischen Zugtickets zu Hause zu vergessen. Schaut die nächsten Tage mal rein ob und wie wir es noch bekommen, oder ob wir tatsächlich noch mal 1000 Euro für neue Zugtickets ausgeben müssen.

Jetzt wird’s ernst!

Der Tag der Abreise rückt näher: Am Donnerstag fliegen wir nach Tokio und unsere Weltreise geht los. Wir sind leicht nervös.

Die beste Nachbarin der Welt wird sich während unserer Abwesenheit um unsere Meerschweinchen (Ein stetiger Quell der Freude!) kümmern und hat jetzt schon für uns Streu und Heu eingekauft.

Derweil war Andreas in Kiel, mit unserem Freund Florian, der an der dortigen Fachhochschule Lehrbeauftragter ist, im Computermuseum und fand es echt gut!

Die Reisevorbereitungen sind in vollem Gange und inzwischen ist schon vieles vorausgeplant. Kanada hat sich als ausgesprochen teuer erwiesen. Für Neuseeland sieht es momentan so aus, dass wir wohl auf der Nordinsel bleiben, da es auf Südinsel zu dieser Jahreszeit kalt und verregnet sein wird und außerdem der Coastal Pacific nicht fährt.

Im Datenbanken-Teil sind wir bei der Umsetzung vom Entity-Relationship-Modell ins relationale Modell, also in Tabellen, angelangt. Das ist in diesem Blogeintrag von Andreas erklärt. Kurz gefasst: Aus Entitätstypen werden Tabellen, die Attribute werden zu Spalten. Für jede Tabellen sollte es einen Identifier geben, einen Primärschlüssel. Wenn sich kein Attribut dafür anbietet, nimmt man einen künstlichen Schlüssel, den man vom DBMS generieren lässt. 1:N-Beziehungen können mit einer zusätzlichen Spalte, einem Fremdschlüssel, in der Tabelle auf der N-Seite umgesetzt werden.

Für die Spalten muss man Datentypen festlegen. Wichtige Datentypen in SQL sind:

INTEGER – Ganzzahlen
NUMERIC(n,m), DECIMAL(n,m) – Dezimalzahlen mit Längenangabe (Stellen insgesamt, Nachkommastellen)
FLOAT(n), DOUBLE, REAL – Gleitkommazahlen (ist oftmals keine gute Idee, mehr dazu später)
CHARACTER(n), VARCHAR(n) – Zeichenketten (mit Längenangabe)
DATE, TIME, DATETIME, TIMESTAMP – Datum und Uhrzeit
CLOB, BLOB – große Texte, große Daten
BOOLEAN – wahr/falsch

Und hier ist, was Anke während der Aufnahme als Übung mit MySQL gemacht hat:

mysql> create database todo;
Query OK, 1 row affected (0,43 sec)


mysql> use todo;
Database changed

mysql> create table Person (IdentifierPerson integer primary key auto_increment, Name varchar(20) not null, Nachname varchar(30) not null);
Query OK, 0 rows affected (0,44 sec)

mysql> create table Todoeintrag (IdentifierTodoeintrag integer primary key auto_increment, Text varchar(200) not null, Prioritaet integer, Faelligkeitsdatum date, IdentifierPerson integer not null, Foreign key (IdentifierPerson) references Person(IdentifierPerson));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into Person values (null, "Andreas", "Hess");
Query OK, 1 row affected (0,12 sec)


mysql> select * from Person;
+------------------+---------+----------+
| IdentifierPerson | Name    | Nachname |
+------------------+---------+----------+
|                1 | Andreas | Hess     |
+------------------+---------+----------+
1 row in set (0,03 sec)

mysql> insert into Todoeintrag values (null, "Handgepäck packen", 10, "2019-04-10", 1);
Query OK, 1 row affected (0,04 sec)


mysql> select * from Todoeintrag;
+-----------------------+--------------------+------------+-------------------+------------------+
| IdentifierTodoeintrag | Text               | Prioritaet | Faelligkeitsdatum | IdentifierPerson |
+-----------------------+--------------------+------------+-------------------+------------------+
|                     1 | Handgepäck packen  |         10 | 2019-04-10        |                1 |
+-----------------------+--------------------+------------+-------------------+------------------+
1 row in set (0,00 sec)


mysql> insert into Todoeintrag values (null, "Handgepäck packen", 10, "2019-04-10", 5);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`todo`.`todoeintrag`, CONSTRAINT `todoeintrag_ibfk_1` FOREIGN KEY (`IdentifierPerson`) REFERENCES `person` (`identifierperson`))

Reisevorbereitungen – Packtaschen

Wie in der letzten Podcast-Folge erzählt haben wir auf den letzten Dienstreisen das Pack-System getestet.

Die Kleidung wird immer pro Wochentag in Taschen gepackt, so dass man immer nur eine aus dem Rucksack ziehen muss und nicht lange rumwühlt. Damit ich weiß, welche Tasche ich gerade brauche, habe ich sie mit verschiedenen laminierten Anhänger versehen, die immer den geplanten Wochentag angeben.

Reisevorbereitungen – Packtaschen weiterlesen

Dienstreisen

Anke und Andreas berichten von Dienstreisen nach Dublin und Leipzig. Andreas ist dabei viel mit Straßenbahnen gefahren. Da kommen bestimmt noch ein paar Bilder davon ins Blog.

Auch was die Reisevorbereitungen angeht hat sich einiges getan. Anke hat ein System eingeführt, das für jeden Wochentag eine kleine Tasche vorsieht. Die Bildungsreise nach Japan wurde abgesagt, wir organisieren jetzt selbst. Anke will die Haseninsel in der Nähe von Hiroshima besuchen.

Im Datenbanken-Teil erklärt Andreas das Entity-Relationship-Modell. Da hat er auch schon mal was drüber gebloggt. Wer also ein Entity-Relationship-Diagramm auch mal sehen will, sollte sich diesen Artikel mal zu Gemüte führen. Das E/R-Diagramm, über das Andreas in dieser Folge spricht, hat er auch gebloggt. Seine Vorlesungsfolien darüber sind dort auch verlinkt. Der Artikel von damals gibt auch für die nächste Episode noch was her, anschließend muss Andreas wohl im Blog nachlegen.

Ansonsten fährt Andreas niemals in den Straßen von Tokio. Er arbeitet nämlich für die badische Regierung. In seiner Position wäre das also wenig ratsam. 😉

Checklisten

Unsere Weltreise wirft ihre Schatten voraus: Anke berichtet von der Vorbesprechung zur Bildungsreise nach Japan, zu der außer uns wohl nur Lehrerinnen fahren. Reiseleiter Chris hat uns eine Checkliste und viele nützliche Tipps gegeben. Andreas’ Cousin Rudi und seine Frau Olivia sind gerade in Neuseeland und bloggen von dort. Da werden sicher auch viele interessante Sachen für uns dabei sein.

Für unsere Reise ist noch ganz schön viel zu planen und die To-Do-Liste soll natürlich mit einer Datenbank umgesetzt werden. Andreas erklärt Anke, dass ein relationales Datenbank-Management-System Daten in Tabellen speichert und was DML, DDL und SQL bedeuten. Anke wundert sich, dass es relationale Datenbanken erst seit 1970 gibt.

Zu dem, was Andreas heute über Datenbanken erzählt hat, hat er vor anderthalb Jahren schon mal was gebloggt.

Intro und Outro sind wie immer von der großartigen Band Revolte Tanzbein, denen wir nochmals danken, dass wir “Panama” dafür benutzen dürfen. Unser Dank geht auch an unseren Freund David Göbel, der unser Logo gestaltet hat.

Statt Outtakes gibt es diesmal ein kurzes Zitat aus dem Hörbuch “Der Aufstieg und Fall des D.O.D.O.” von Neal Stephenson und Nicole Galland. Wir hoffen, dass Euer Verhältnis zu Datenbanken anders ist als das der Romanfiguren und Ihr uns viel Feedback (und positive Bewertungen) gebt.

Trailer

Wir stellen uns und unseren neuen Podcast vor.

Wir wollen auf eine Weltreise gehen und Japan, Neuseeland, Australien und Kanada besuchen.

Unser Plan ist, dass wir nicht nur über unsere Erlebnisse berichten, sondern auch über Datenbanken sprechen.

Unser Dank geht an die großartige Band Revolte Tanzbein dafür, dass wir Ihren Song “Panama” als Intro benutzen dürfen sowie an unseren Freund David Göbel, der unser Logo gestaltet hat.