Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
info:sek1:db-instahub [2020/12/13 23:26] demeny [Datenbanken mit InstaHub] |
info:sek1:db-instahub [2021/01/24 17:50] (aktuell) demeny [Mithilfe des Datenbanksystems zum ER-Diagramm] |
||
|---|---|---|---|
| Zeile 3: | Zeile 3: | ||
| InstaHub ist ein soziales Netzwerk, welches im Unterricht eingesetzt wird, um die Themen Datenbanken, Umgang mit sozialen Netzen und Datenschutz zu lehren.((https://instahub.org/)) | InstaHub ist ein soziales Netzwerk, welches im Unterricht eingesetzt wird, um die Themen Datenbanken, Umgang mit sozialen Netzen und Datenschutz zu lehren.((https://instahub.org/)) | ||
| {{ :info:sek1:instahub.png?nolink |}} | {{ :info:sek1:instahub.png?nolink |}} | ||
| - | Es wird ein soziales Netzwerk simuliert, indem du die administrative Rolle einnimmst. Wir lassen also die theoretische Entity-Relationship-Modellierung hinter uns und wollen nun praktisch arbeiten. | + | Es wird ein soziales Netzwerk simuliert, in dem du die administrative Rolle einnimmst. Wir lassen also die theoretische Entity-Relationship-Modellierung hinter uns und wollen nun praktisch arbeiten. |
| - | ===== Aufgabe 1: Eigenen Hub erstellen ===== | + | ===== Eigenen Hub erstellen ===== |
| <callout type="success" icon="glyphicon glyphicon-flag"> | <callout type="success" icon="glyphicon glyphicon-flag"> | ||
| **Erstelle** dir dein eigenes soziales Netzwerk, auch Hub genannt, auf InstaHub: | **Erstelle** dir dein eigenes soziales Netzwerk, auch Hub genannt, auf InstaHub: | ||
| - | * **Informiere** dich über den Benutzername deines Informatiklehrkraft im Lernplan auf LernSax. Diesen brauchst du, damit dein Hub der korrekten Lehrkraft zugeordnet wird. | + | * **Informiere** dich über den Benutzername deiner Informatiklehrkraft im Lernplan auf LernSax. Diesen brauchst du, damit dein Hub der korrekten Lehrkraft zugeordnet wird. |
| * **Folge** den Anweisungen der [[https://youtu.be/U1xOqqxlswQ |Videoanleitung]]. | * **Folge** den Anweisungen der [[https://youtu.be/U1xOqqxlswQ |Videoanleitung]]. | ||
| * **Gedulde** dich bis der Hub durch deine Lehrkraft freigeschaltet wurde. Dies geschieht manuell und kann ein wenig dauern. | * **Gedulde** dich bis der Hub durch deine Lehrkraft freigeschaltet wurde. Dies geschieht manuell und kann ein wenig dauern. | ||
| Zeile 17: | Zeile 17: | ||
| </callout> | </callout> | ||
| - | ===== Aufgabe 2: Erste Abfragen ===== | + | ===== Zurechtfinden im Hub ===== |
| - | ... | + | <callout type="success" icon="glyphicon glyphicon-flag"> |
| + | Nun sollst du dich mit der grundlegenden Bedienung des sozialen Netzwerks vertraut machen. | ||
| + | * **Logge** dich hierfür mit den dir bekannten Zugangsdaten aus Aufgabe 1 in deinen eigenen Hub ein. | ||
| + | * **Suche** die Nutzerin //stella439// und like ihr Drohnenbild. | ||
| + | * **Füge** unter dem Bild auch einen Kommentar **hinzu**, indem du auf die "Sprechblase" drückst. | ||
| + | </callout> | ||
| + | |||
| + | <button type="success" collapse="stella">Lösung: So sieht die Seite von stella439 aus.</button> | ||
| + | <collapse id="stella" collapsed="true"> | ||
| + | Du gelangst auf die Seite von stella439, indem du ihren Namen in die Suche eingibst.\\ | ||
| + | {{ :info:sek1:ih_stella.png?nolink |}} | ||
| + | </collapse> | ||
| + | |||
| + | ===== SQL-Abfragen ===== | ||
| + | SQL ist eine Datenbanksprache zum Verwalten und Auswerten einer Datenbasis. Wir wollen sie erlernen, um an erweiterte Informationen unseres Hubs zu kommen. | ||
| + | <callout type="success" icon="glyphicon glyphicon-flag"> | ||
| + | Um einen ersten Einblick zu erlangen, schaue dir das [[https://youtu.be/K0tXhRP32Uo|Video zu SQL-Abfragen]] an. Achte dabei besonders auf die Struktur von SQL-Abfragen. | ||
| + | </callout> | ||
| + | <callout type="info" icon="glyphicon glyphicon-info-sign"> | ||
| + | Groß- und Kleinschreibung ist bei SQL-Abfragen unwichtig. Gewöhne dir dennoch an SQL-Befehle GROß zu schreiben. | ||
| + | </callout> | ||
| + | |||
| + | Das Ausführen des SQL-Befehls | ||
| + | <code SQL> | ||
| + | SELECT id, username, name, city | ||
| + | FROM users; | ||
| + | </code> | ||
| + | liefert die folgende Ergebnistabelle: | ||
| + | {{ :info:sek1:ih_ergebnis.png?nolink&700 |}} | ||
| + | Sie zeigt einen Ausschnitt aus der Entitymenge //users// mit den gewählten Attributen //id, username, name, city//. Zu jeder Entität sind zu den verschiedenen Eigenschaften nun auch Attributwerte eingetragen. Diese Informationen konnten den bisherigen ER-Diagrammen nicht entnommen werden. | ||
| + | |||
| + | SQL-Abfragen sind stets gleich aufgebaut. Sie beginnen mit einer Auswahl von Attributen, gefolgt von Tabellennamen und gegebenenfalls weiterer Einschränkungen oder Bedingungen. | ||
| + | |||
| + | <code SQL> | ||
| + | SELECT attribut1, attribut2, ... | ||
| + | FROM tabelle | ||
| + | WHERE bedingung | ||
| + | ORDER BY attribut; | ||
| + | </code> | ||
| + | |||
| + | <callout type="success" icon="glyphicon glyphicon-flag"> | ||
| + | Notiere dir in deinem digitalen Hefter die allgemeine Struktur von SQL-Abfragen. | ||
| + | </callout> | ||
| + | |||
| + | ===== Übung 1 ===== | ||
| + | <callout type="success" icon="glyphicon glyphicon-flag"> | ||
| + | Löse folgende Aufgaben und schreibe dir die SQL-Befehle ebenfalls in deinen digitalen Hefter. Kontrolliere die Anzahl der Ergebnisse mit der Vorgabe in Klammern. Diese Angaben gelten nur, wenn du bisher keine weiteren Änderungen an der Datenbasis vorgenommen hast. | ||
| + | - Zeige alle Attribute von //users//. (204) | ||
| + | - Erstelle eine Übersicht von //users// bestehend aus //id// und dem Echtnamen (//name//). (204) | ||
| + | - Gib die Anzahl an Fotos an, die in deinem Hub gespeichert sind. (1522) | ||
| + | - Zeige eine Tabelle, die die Städte der Benutzer*innen ausgibt. (204) | ||
| + | - Manche Städte erscheinen mehrfach: Aus wie vielen verschiedenen Städten kommen die Nutzer*innen des Hubs? Informiere dich hierzu zum SQL-Befehl [[https://www.w3schools.com/sql/sql_distinct.asp|DISTINCT]]. (111) | ||
| + | - Welche der Städte ist bei alphabetischer Sortierung an erster Stelle? Informiere dich hierzu zum SQL-Befehl [[https://www.w3schools.com/sql/sql_orderby.asp|ORDER BY]]. (Albertshofen) | ||
| + | - Erstelle eine Liste, die Benutzername und dazugehörige Stadt zeigt. Diese Übersicht soll absteigend nach Stadt sortiert sein. (204) | ||
| + | - Überprüfe, dass jeder Benutzer nur aus zwei Geschlechtern wählen konnte. (2) | ||
| + | - Ermittle den Namen der kleinsten Person des Hubs. (Marie Bohm) | ||
| + | - Ermittle die Namen der größten Personen des Hubs. Ordne diese aufsteigend nach Namen (//name//). (Fabian Probst, ..., Yves Bach) | ||
| + | </callout> | ||
| + | <button type="success" collapse="lsg_sql">Lösung</button> | ||
| + | <collapse id="lsg_sql" collapsed="true"> | ||
| + | - <code SQL>SELECT * | ||
| + | FROM users;</code> | ||
| + | - <code SQL>SELECT id, name | ||
| + | FROM users;</code> | ||
| + | - <code SQL>SELECT * | ||
| + | FROM photos;</code> | ||
| + | - <code SQL>SELECT city | ||
| + | FROM users;</code> | ||
| + | - <code SQL>SELECT DISTINCT city | ||
| + | FROM users;</code> | ||
| + | - <code SQL>SELECT city | ||
| + | FROM users | ||
| + | ORDER BY city;</code> | ||
| + | - <code SQL>SELECT username, city | ||
| + | FROM users | ||
| + | ORDER BY city DESC;</code> | ||
| + | - <code SQL>SELECT DISTINCT gender | ||
| + | FROM users;</code> | ||
| + | - <code SQL>SELECT name, centimeters | ||
| + | FROM users | ||
| + | ORDER BY centimeters;</code> | ||
| + | - <code SQL>SELECT name, centimeters | ||
| + | FROM users | ||
| + | ORDER BY centimeters DESC, name;</code> | ||
| + | </collapse> | ||
| + | |||
| + | ===== Übung 2 ===== | ||
| + | <callout type="success" icon="glyphicon glyphicon-flag"> | ||
| + | Bei den bisherigen Aufgaben genügte jeweils das Filtern von Daten in einer Tabelle - sogenannte einfache Abfragen. Nun soll es schrittweise schwieriger werden. Notiere dir neue Befehle und dazugehörige Beispiele in den Hefter. Los geht's: | ||
| + | - Gib aus, wie viele Mitglieder in Berlin wohnen. (14) Erweitere hierzu die SQL-Befehle um [[https://www.w3schools.com/sql/sql_where.asp|WHERE]] und nutze die Bedingung city="Berlin". Zusatztipp: Um eine elegantere Ausgabe zu erzeugen, nutzen wir in der Sekundarstufe II den SQL-Befehl COUNT(). | ||
| + | - Ersetze in der vorhergehenden Abfrage "=" zu "!=". Beschreibe, welche Änderung dies bewirkt. Betrachte dazu die Ausgabe der dazugehörigen Abfrage. (190) | ||
| + | - Ermittle alle Städte, die mit B beginnen. Informiere dich hier zum SQL-Befehl [[https://www.w3schools.com/sql/sql_like.asp|LIKE]] und den Platzhalter % sowie _. (31) | ||
| + | - Erstelle eine Übersicht aller Mitglieder, deren Namen auf "mann" endet. Ordne diese in alphabetisch aufsteigender Reihenfolge. (15) | ||
| + | - Frauen sind in Deutschland im Mittel 166 cm groß. Gib die Namen aller Nutzerinnen aus, die unterdurchschnittlich groß sind. (69) Um mehrere Bedingungen zu verknüpfen, informiere dich über die SQL-Befehle [[https://www.w3schools.com/sql/sql_and_or.asp|AND und OR]]. | ||
| + | - Männer sind in Deutschland im Mittel 180 cm groß. Gib die Namen aller Nutzer aus, die unterdurchschnittlich groß sind. (57) | ||
| + | - Verbinde die beiden vorhergehenden Abfragen und erzeuge so eine Liste mit allen "kleinen" Nutzer*innen. (126) Tipp: Klammern setzen. | ||
| + | - Finde heraus, welche Fotos die Nutzerin "stella439" kommentiert hat. Du kannst es Schritt für Schritt in ggf. mehreren Abfragen erledigen oder du gestaltest die Abfrage so geschickt, dass du sie in einer bündelst. Tipp: Du brauchst //users// und //comments// und solltest wissen, dass //users.id// und //comments.user_id// gleich sind. Hast du die Punktnotation bemerkt? | ||
| + | - Anna teilt ihrem Freund das nächste Urlaubsziel verschlüsselt mit: Die Initialien der Nutzerin, die mit "Kann man das Photo irgendwo kaufen?" kommentiert, weisen auf das Land unseres nächsten Urlaubs hin. Finde heraus, wohin die Reise geht. | ||
| + | </callout> | ||
| + | |||
| + | <button type="success" collapse="lsg_sql2">Lösung</button> | ||
| + | |||
| + | <collapse id="lsg_sql2" collapsed="true"> | ||
| + | - <code SQL>SELECT * | ||
| + | FROM users | ||
| + | WHERE city = "Berlin";</code> | ||
| + | - <code SQL>SELECT * | ||
| + | FROM users | ||
| + | WHERE city != "Berlin"; | ||
| + | -- "!=" steht für ungleich. Folglich werden alle Mitglieder*innen ausgegeben, die nicht in Berlin wohnen.</code> | ||
| + | - <code SQL>SELECT * | ||
| + | FROM users | ||
| + | WHERE city LIKE "B%"; | ||
| + | -- % ist ein Platzhalter für beliebig viele Zeichen. | ||
| + | -- _ ist ein Platzhalter für genau ein Zeichen.</code> | ||
| + | - <code SQL>SELECT * | ||
| + | FROM users | ||
| + | WHERE name LIKE "%mann" | ||
| + | ORDER BY name ASC;</code> | ||
| + | - <code SQL>SELECT name | ||
| + | FROM users | ||
| + | WHERE centimeters < 166 AND gender = "female"; | ||
| + | -- Durch die Und-Verknüpfung werden nur Dateneinträge gezeigt, die gleichzeitig beide Bedingungen erfüllen. Bei jedem Eintrag gilt also, dass die Person kleiner als 166 cm und weiblich ist. </code> | ||
| + | - <code SQL>SELECT name | ||
| + | FROM users | ||
| + | WHERE centimeters < 180 AND gender = "male";</code> | ||
| + | - <code SQL>SELECT name | ||
| + | FROM users | ||
| + | WHERE (centimeters < 166 AND gender = "female") OR (centimeters < 180 AND gender = "male"); | ||
| + | -- Die Klammerung bewirkt, dass beide Bedingungen getrennt voneinander bearbeitet werden. Durch die Oder-Verknüpfung werden dann alle Datensätze gelistet, bei denen die 1., die 2. oder beide Bedingungen erfüllt sind.</code> | ||
| + | - <code SQL>SELECT * | ||
| + | FROM users, comments | ||
| + | WHERE users.username = "stella439" AND users.id = comments.user_id; | ||
| + | -- Bei dieser Abfrage müssen zwei Tabellen abgefragt werden. Beide Tabellen haben die Nutzer-ID gemeinsam, weshalb gilt: users.id = comments.user_id. Da die Abfrage über mehrere Tabellen geht, müssen die Attribute mittels der Punktnotation der korrekten Tabelle zugeordnet werden. Dies kennst du bereits aus dem KOAM-Modell.</code> | ||
| + | - <code SQL>SELECT users.name | ||
| + | FROM users, comments | ||
| + | WHERE body LIKE "Kann man das Photo irgendwo kaufen?" AND users.id = comments.user_id AND users.gender = "female"; | ||
| + | -- Es erscheint: Greta Bauer mit den Initialien GB. Es geht also in das Vereinigte Königreich.</code> | ||
| + | </collapse> | ||
| + | |||
| + | |||
| + | ===== Mithilfe des Datenbanksystems zum ER-Diagramm ===== | ||
| + | Mittlerweile hast du einen Einblick in die Datenorganisation deines InstaHubs gewonnen. Aber wie schaut eigentlich das ER-Diagramm zu InstaHub aus? | ||
| + | |||
| + | <callout type="success" icon="glyphicon glyphicon-flag"> | ||
| + | Erstelle zuletzt das ER-Diagramm deines InstaHubs. Fokussiere dich auf die Zusammenhänge zwischen //users//, //photos//, //comments//, //likes// und //tags//. Lasse Attribute außen vor - notiere aber die Entitymengen, Beziehungen und Primärschlüssel. | ||
| + | </callout> | ||
| + | |||
| + | <button type="success" collapse="lsg_sql3">Lösungsvorschlag</button> | ||
| + | <collapse id="lsg_sql3" collapsed="true"> | ||
| + | Hier siehst du einen Lösungsvorschlag. Aus einem konkreten Datenbanksystem das ER-Modell zu erstellen, ist keine einfache Aufgabe. Deine Lösung weicht gegebenenfalls ab. Du solltest jedoch nachvollziehen können, wieso auch diese Variante möglich ist und insbesondere die Kardinalitätsangaben begründen können. | ||
| + | {{ :info:sek1:er-instahub.png?nolink |}} | ||
| + | </collapse> | ||