Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
planung:datenbanken [2023/06/05 08:38] marrocplanung:datenbanken [2023/06/05 22:16] (aktuell) marroc
Zeile 164: Zeile 164:
  
 Die Assoziationen (teilweise auch Kardinalität genannt) gibt es verschiedene Typen. Die Assoziationen (teilweise auch Kardinalität genannt) gibt es verschiedene Typen.
-  * **Einfache Assoziation:** jeder Entität wird wieder "genau eine" Entität zugeordnen, gewissermassen eine **1:1 Beziehung**. \\ Beispiel 1:Ein Land hat genau eine Hauptstadt. Eine Hauptstadt kann genau einem Land zugeordent werden. \\ Beispiel 2: Jeder Schüler hat einen Wiki-Login-Name. Ein Wiki-Login-Name kann einem Schüler zugeornet werden.+  * **Einfache Assoziation:** jeder Entität wird wieder "genau eine" Entität zugeordnen, gewissermassen eine **1:1 Beziehung**. \\ Beispiel 1:Ein Land hat genau eine Hauptstadt. Eine Hauptstadt kann genau einem Land zugeordent werden. \\ Beispiel 2: Jeder Schüler hat einen Instahub. Ein Instahub kann einem Schüler zugeornet werden.
   * **Konditionelle Assoziation**: jeder Entität wird höchstens eine Entität zugeordnet, eine keins-oder-eins Beziehung. \\ Beispiel 1: Ein (schweizer) Staatsangehöriger hat genau einen oder keinen (schweizer) Reisepass. Jeder Reisepass gehört einem Staatsangehörigen \\ Beispiel 2: Jedes Englischbuch im Klassenzimmer gehört einem Lernenden bzw. einer Lernenden. Nicht unbedingt jeder Lernende muss sein Englischbuch im Klassenzimmer dabei haben.   * **Konditionelle Assoziation**: jeder Entität wird höchstens eine Entität zugeordnet, eine keins-oder-eins Beziehung. \\ Beispiel 1: Ein (schweizer) Staatsangehöriger hat genau einen oder keinen (schweizer) Reisepass. Jeder Reisepass gehört einem Staatsangehörigen \\ Beispiel 2: Jedes Englischbuch im Klassenzimmer gehört einem Lernenden bzw. einer Lernenden. Nicht unbedingt jeder Lernende muss sein Englischbuch im Klassenzimmer dabei haben.
   * **Mehrfache Assoziation**: jeder Entität werden "mehrere" Entitäten zugeordnet. Diese Beziehung ist eine mehr-zu-mehr-Beziehung und wird oft als komplex bezeichnet. Oft spricht man hier auch von einer m:n Beziehung. \\ Beispiel 1 einer n:m Beziehung: Im Sozalen Netzwerk können mehrer User mehrere Bilder kommentieren. \\ Beispiel 2 einer 1:n Bezieung: Ein bestimmtes Kunstwerk (Bild) kann nur in einem Museum gleichzeitig ausgestellt werden, jedoch hat ein Museum mehrere Kunstwerke ausgestellt.   * **Mehrfache Assoziation**: jeder Entität werden "mehrere" Entitäten zugeordnet. Diese Beziehung ist eine mehr-zu-mehr-Beziehung und wird oft als komplex bezeichnet. Oft spricht man hier auch von einer m:n Beziehung. \\ Beispiel 1 einer n:m Beziehung: Im Sozalen Netzwerk können mehrer User mehrere Bilder kommentieren. \\ Beispiel 2 einer 1:n Bezieung: Ein bestimmtes Kunstwerk (Bild) kann nur in einem Museum gleichzeitig ausgestellt werden, jedoch hat ein Museum mehrere Kunstwerke ausgestellt.
Zeile 188: Zeile 188:
  
  
-<WRAP nicebox blue>+<WRAP nicebox green>
 ** ERM - Aufgabe ** \\ ** ERM - Aufgabe ** \\
 Erstellen Sie ein ERM zum folgenden Szenario. Dies wird sicher am einfachsten auf Papier erstellt. Indentifizieren Sie die Primär- und Fremdschlüssel, bestimmen Sie die jeweiligen Entitätsbeziehungen und erstellen Sie ein Diagramm. Achtung, vermutlich braucht dies auch etwas Platz! Erstellen Sie ein ERM zum folgenden Szenario. Dies wird sicher am einfachsten auf Papier erstellt. Indentifizieren Sie die Primär- und Fremdschlüssel, bestimmen Sie die jeweiligen Entitätsbeziehungen und erstellen Sie ein Diagramm. Achtung, vermutlich braucht dies auch etwas Platz!
Zeile 204: Zeile 204:
  
 ==== Abbildungsregeln für die drei Beziehungstypen ==== ==== Abbildungsregeln für die drei Beziehungstypen ====
 +Eine relationale Datenbank besteht somit aus mehreren untereinander in Beziehung stehenden Tabellen. Beim Entwerfen solcher gut funktionierender Datenbanken sind Regeln zu beachten, mit denen innerhalb von Tabellen Abhängigkeiten freigelegt werden könne und so redundante Information (Anomalien) vermieden werden können. 
 +
 === Abbildungsregel für 1:1 Beziehungen - KANN-Regel === === Abbildungsregel für 1:1 Beziehungen - KANN-Regel ===
-Die **KANN-Regel** bedeutet, dass man bei einer einfach-zu-einfach Beziehung Tabellen erstellen kann, aber nicht miss. Man kann also 2 Tabellen erstellen, wobei es keine Rolle spielt, ob man (in diesem Beispiel Land bei Hauptstadt als Fremdschlüssel definiert oder umgekehrt Hauptstadt bei Land als Fremdschlüssel definiert). \\  +Die **KANN-Regel** bedeutet, dass man bei einer einfach-zu-einfach Beziehung zwei Tabellen erstellen kann, aber nicht miss. Es spielt keine Rolle, ob man (im Beispiel Land-Hauptstadt bei der Land-Tabelle die Hauptstadt als Fremdschlüssel definiert oder umgekehrt bei der Hauptstadt-Tabelle das Land als Fremdschlüssel definiert). \\ 
- +
-Alternativ ist es hier aber auch möglich, nur 1 Tabelle zu erstellen, die alle Länder und Hauptstädte enthält. In diesem Fall braucht man keinen Fremdschlüssel für diese Beziehung!\\ +
  
 +Alternativ ist es hier aber auch möglich, nur 1 Tabelle zu erstellen, die alle Länder und Hauptstädte enthält. Natürlich braucht es in diesem Fall keinen Fremdschlüssel mehr, jedoch nach wie vor einen Primärschlüssel.
 +----
  
 === Abbildungsregel - MUSS-Regel für einfach-mehrfache Beziehungen === === Abbildungsregel - MUSS-Regel für einfach-mehrfache Beziehungen ===
Zeile 216: Zeile 217:
  
 **Beispiel einer einfach-zu-mehrfachen-Beziehung**\\  **Beispiel einer einfach-zu-mehrfachen-Beziehung**\\ 
-Jeder Auftrag (zum Beispiel Bestellung) gehört zu genau 1 Kunden, während jeder Kunde mehrere Bestellungen tätigen kann (siehe Video weiter oben)+Jeder Auftrag (zum Beispiel Bestellung-Kunden-Firma im Video) gehört zu genau 1 Kunden, während jeder Kunde mehrere Bestellungen tätigen kann. 
-<WRAP nice green box> +---- 
-**Auftrag:** \\ +
-Zeichnen Sie kurz das ERM mit Kunde Bestellungen und diskutieren Sie zu zweit die Beziehungen und die oben beschriebenen Regeln für dieses Beispiel. +
-</WRAP>+
 === Abbildungsregeln - MUSS-Regel für komplexe Beziehungen === === Abbildungsregeln - MUSS-Regel für komplexe Beziehungen ===
  
-Die **MUSS-Regel für komplexe Beziehungen** bedeutet, dass man bei komplexen (mehrfach-zu-mehrfach, also n:m) Beziehungen für jede der beiden Entitäten eine Tabelle braucht und __zusätzlich__ für die Beziehung selber eine eigene / weitere / dritte Tabelle erstellen muss. In der dritten Tabelle müssen beide Fremdschlüssel (für beide Entitäten) enthalten sein. Der Primärschlüssel der dritten Tabelle wird aus den beiden Fremdschlüsseln der anderen Tabellen zusammengesetzt.  +Die **MUSS-Regel für komplexe Beziehungen** bedeutet, dass man bei komplexen (mehrfach-zu-mehrfach, also n:m) Beziehungen für jede der beiden Entitäten eine Tabelle braucht und __zusätzlich__ für die Beziehung selber eine eigene / weitere / dritte Tabelle erstellen muss. In der dritten Tabelle müssen beide Fremdschlüssel (für beide Entitäten) enthalten sein. Der Primärschlüssel der dritten Tabelle wird aus den beiden Fremdschlüsseln der anderen Tabellen zusammengesetzt. \\  
-<WRAP nice green box> +Hier kann unser Beispiel vom Anfang mit den Instahub User Photos - Kommentaren genannt werden.
-**Auftrag:** \\ +
-Besprechen Sie kurz zu zweit diese "Muss-Regel" für unser Instahub-Beispiel und auch für die Zoo Aufgabe. +
-</WRAP>+
  
-====== Lab Datenbanken: Einführung in SQL ======+---- 
 +<WRAP nicebox green> 
 +**Auftrag ERM und die Regeln :** \\ 
 +  - Besprechen Sie kurz zu zweit diese genannten Regeln für unser Instahub-Beispiel und auch für die Zoo Aufgabe. Entwerfen Sie so die Datenbank in groben Zügen (Wie viele Tabelle, welche Attribute, ...) 
 +  - Füllen Sie die folgenden Begriffe in das leere ERM und bestimmen Sie die Kardinalitäten. Ergänzen Sie das ERM durch einige wenige Attribute. ERklären Sie in groben Zügen die Struktur der Datenbank, unter Beachtung der oben formulierten Regeln. 
 +</WRAP> 
 +====== Einführung in SQL ======
 Stuctured Quere Language (SQL) ist eine standardisierte Abfrage-Sprache um Daten in Datenbanken zu speichern, zu manipulieren und herauszufiltern (zu erhalten). \\ Stuctured Quere Language (SQL) ist eine standardisierte Abfrage-Sprache um Daten in Datenbanken zu speichern, zu manipulieren und herauszufiltern (zu erhalten). \\
 Im folgenden lernen Sie ein paar Grundzüge dieser Abfragesprache kennen, die sie für verschiedenste Datenbanksysteme (wie MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres, u.v.m.) verwenden können.\\ Im folgenden lernen Sie ein paar Grundzüge dieser Abfragesprache kennen, die sie für verschiedenste Datenbanksysteme (wie MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres, u.v.m.) verwenden können.\\
Zeile 237: Zeile 239:
 |FROM |Enthält die Tabellen mit den Feldern, die in der SELECT-Klausel angegeben sind |In welchen Tabellen liegen die Felder (Spalten), die wir erhalten wollen? | |FROM |Enthält die Tabellen mit den Feldern, die in der SELECT-Klausel angegeben sind |In welchen Tabellen liegen die Felder (Spalten), die wir erhalten wollen? |
 |WHERE |Gibt Feldkriterien an, die jeder Datensatz erfüllen muss, um in die Ergebnisse einbezogen zu werden|Hier lassen sich Datensätze herausfiltern (z.B. wenn wir nur gewisse Daten einer Tabelle anzeigen wollen). | |WHERE |Gibt Feldkriterien an, die jeder Datensatz erfüllen muss, um in die Ergebnisse einbezogen zu werden|Hier lassen sich Datensätze herausfiltern (z.B. wenn wir nur gewisse Daten einer Tabelle anzeigen wollen). |
 +=== Vergleichsoperatoren ===
 +^Zeichen ^Bedeutung ^
 +|= |Gleich wie |
 +|> |Grösser als |
 +|>= |Grösser oder gleich gross wie |
 +|< |Kleiner als |
 +|%%<=%% |Kleiner oder gleich gross wie |
 +|<> |Ungleich wie (unterschiedlich) |
 +|BETWEEN a AND b |Zwischen a und b |
 +
 Beispiel mit Instahub: Beispiel mit Instahub:
 //Suchen Sie alle Usernamen der Benutzerinnen aus Ihrer Datenbank.// //Suchen Sie alle Usernamen der Benutzerinnen aus Ihrer Datenbank.//
-Hier kann über die Suche auch die SQL-Abfrage angezeigt werden.{{ :planung:datenbanken_sql2.png?direct&400|}}+Hier kann über die Suche auch die SQL-Abfrage angezeigt werden.{{ :planung:datenbanken_sql2.png?direct&600|}}
 Die SQL-Abfrage ist somit: Die SQL-Abfrage ist somit:
 <code SQL> <code SQL>
Zeile 248: Zeile 260:
  
 <WRAP nicebox green> <WRAP nicebox green>
-Bearbeiten Sie die folgenden kurzen Aufträge mit Hilfe Ihres Insthubs. Dabei nutzen Sie wieder die Datenbank-Suche oben rechts.  +Bearbeiten Sie die folgenden kurzen Aufträge mit Hilfe Ihres Insthubs. Dabei nutzen Sie wieder die Datenbank-Suche oben rechts in Instahub. Notieren Sie anschliessend die SQL-Abfragen. Ziel ist es, in einem zweiten Schritt nicht mehr über die Suche sondern direkt SQL-Abfragen formulieren zu können
-  -  +  - Alle Benutzer:innen,deren Usernamen mit dem Buchstaben "S" beginnt. 
 +  - Alle Usernamen der männlichen Benutzer. 
 +  - Die Benutzer:innen, welche das Wort „Johan“ im Benutzernamen haben. 
 +  - Die Benutzer, die noch nicht 18 Jahre alt sind. 
 +  - Die Benutzerinnen, die älter als 30 sind. 
 +  - Die Benutzer, die kleiner als 1.65m und die Benutzerinnen, die grösser als 175 sind. 
 +  - Formulieren Sie weitere Abfragen, die Sie sich gegenseitig als Aufgaben stellen.  
 +</WRAP>
  
  
 +<accordion>
 +<panel title = 'Lösungen'>
 +1. Aufgabe
 +<code SLQ>
 +SELECT username
 +FROM users
 +WHERE username LIKE "S%"
 +</code>
  
 +2. Aufgabe
 +<code SLQ>
 +SELECT username
 +FROM users
 +WHERE gender = "male"
 +</code>
  
 +3. Aufgabe
 +<code SLQ>
  
-==== SHOW TABLES ==== +</code
-Zunächst mal würden wir gerne herausfinden, welche Tabellen in unserer Datenbank "STUDENTS" überhaupt enthalten sind und wie diese heissen.\\ +</panel
-Tippen Sie hierfür den folgenden Befehl ein und klicken Sie auf "RUN"+</accordion>
-<file SQL> +
-SHOW TABLES; +
-</file>\\ +
-=== Resultat === +
-Wir sehen nun, dass diese Datenbank aus nur 1 Tabelle besteht, die sich "Students" nennt. +
-{{:wiki:db_wiki_show_tables.png?nolink&1200|}} +
- +
- +
-==== SELECT & FROM ==== +
-Wir würden nun gerne eine Tabelle erhalten, bei der wir nur die Nachnamen und Vornamen aller Studentinnen und Studenten haben, also ohne die anderen Felder (wie S_ID, Geburtsdatum, Nationalität, ...). +
-Wenn wir das Deutsch ansprechen würde, dann würden wir sagen "NIMM die Vornamen und Nachnamen VON der Tabelle Students!\\ +
-Im folgenden Beispiel machen wir genau das, aber mit der Sprache SQL ausgedrückt. Also SELECT Nachname, Vorname FROM Students. \\ +
-Beachten Sie, dass jedes SQL-Statement mit einem Semikolon ; abgeschlossen werden muss! +
-=== Abfrage === +
-<file SQL> +
-SELECT Nachname, Vorname  +
-FROM Students; +
-</file>\\ +
-=== Resultat === +
-{{:wiki:BSP_1.png?280|}} +
- +
-Beim obigen Beispiel sehen wir schön, wie wir mit Hilfe der SELECT-Klausel die anzuzeigenden Felder anwählen können. Wir können also die Tabelle sozusagen vertikal (von oben nach unten) filtern.\\ +
-Wenn wir nun jedoch die Tabelle stattdessen horizontal (von links nach rechts) filtern wollen, also nur gewisse Datensätze erhalten wollen, macht man dies mit Hilfe der WHERE-Klausel. Studieren Sie hierzu das folgende Beispiel! +
- +
-==== SELECT DISTINCT==== +
-Probieren Sie die folgenden beiden Abfragen. Inwiefern unterscheiden sich diese? +
-<file SQL> +
-SELECT Nationalität +
-FROM Students; +
-</file>\\ +
- +
-<file SQL> +
-SELECT distinct Nationalität +
-FROM Students; +
-</file>\\ +
-==== WHERE ==== +
-Probieren Sie das folgende Beispiel aus:\\ +
-<file SQL> +
-SELECT Nachname, Vorname, Nationalität +
-FROM Students +
-WHERE Nationalität="Schweiz"; +
-</file> +
-{{:wiki:BSP_2.png?400|}} +
- +
-=== Vergleichsoperatoren === +
-^Zeichen ^Bedeutung ^ +
-|= |Gleich wie | +
-|> |Grösser als | +
-|>= |Grösser oder gleich gross wie | +
-|< |Kleiner als | +
-|%%<=%% |Kleiner oder gleich gross wie | +
-|<> |Ungleich wie (unterschiedlich) | +
-|BETWEEN a AND b |Zwischen a und b |+
  
-Wenn wir nun zum Beispiel wissen wollen, wer alles vor dem Jahr 2000 geboren ist, könnten wir das in der WHERE-Klausel mit dem folgenden Query realisieren:\\ 
-<file SQL> 
-SELECT Nachname, Vorname, Nationalität, Geburtsdatum 
-FROM Students 
-WHERE Geburtsdatum<"2000-01-01"; 
-</file> 
 ==== AND und OR ==== ==== AND und OR ====
 Die WHERE-Klausel lässt sich beliebig mit den Ausrücken AND und OR erweitern. Falls wir zum Beispiel alle Studentinnen und Studenten finden wolle, die entweder aus der Schweiz oder (**OR**) aus Deutschland stammen, würden wir das folgende Query eingeben:\\ Die WHERE-Klausel lässt sich beliebig mit den Ausrücken AND und OR erweitern. Falls wir zum Beispiel alle Studentinnen und Studenten finden wolle, die entweder aus der Schweiz oder (**OR**) aus Deutschland stammen, würden wir das folgende Query eingeben:\\
  • planung/datenbanken.1685947134.txt.gz
  • Zuletzt geändert: 2023/06/05 08:38
  • von marroc