| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
| gf2:datenbanken:einleitung [2024/05/06 13:48] – marroc | gf2:datenbanken:einleitung [2024/05/23 11:03] (aktuell) – lehmannr |
|---|
| |
| Die untenstehende Tabelle zeigt einen Teil dieser Daten: Benutzer Ihres sozialen Netzwerkes (in der Titelzeile gelb markierte Spalten) haben Fotos gepostet (blau markiert) und diese wurden dann von anderen Benutzern kommentiert (grün markiert). | Die untenstehende Tabelle zeigt einen Teil dieser Daten: Benutzer Ihres sozialen Netzwerkes (in der Titelzeile gelb markierte Spalten) haben Fotos gepostet (blau markiert) und diese wurden dann von anderen Benutzern kommentiert (grün markiert). |
| |
| Diese Art der Speicherung ist bereits eine einfache **Datenbank**. Das unten abgebildete Element wird als **Tabelle** bezeichnet. Sie besteht aus Spalten und Zeilen. Die Spalten werden **Felder** genannt: diese Felder stellen ein bestimmtes Merkmal (ein sogenanntes **Attribut**) dar, beispielsweise die Nutzernamen des Netzwerks. Die Zeilen sind die Einträge (auch **Datensätze** genannt): In diesem Fall entspricht jede Zeile einem Kommentar, der bei einem geposteten Bild gemacht wurde. | |
| </WRAP> | </WRAP> |
| <WRAP column 30%> | <WRAP column 30%> |
| </WRAP> | </WRAP> |
| </WRAP> | </WRAP> |
| | Diese Art der Speicherung ist bereits eine einfache **Datenbank**. Das unten abgebildete Element wird als **Tabelle** bezeichnet. Sie besteht aus Spalten und Zeilen. Die Spalten werden **Felder** genannt: diese Felder stellen ein bestimmtes Merkmal (ein sogenanntes **Attribut**) dar, beispielsweise die Nutzernamen des Netzwerks. Die Zeilen sind die Einträge (auch **Datensätze** genannt): In diesem Fall entspricht jede Zeile einem Kommentar, der bei einem geposteten Bild gemacht wurde. |
| | |
| |
| \\ | \\ |
| <WRAP nicebox blue> | <WRAP nicebox blue> |
| **Redundanzen:**\\ | **Redundanzen:**\\ |
| Redundant bedeutet mehrfach (im Überfluss) vorhanden sein, beispielsweise in der Programmierung wenn oft die gleiche Programmzeile oder ein ganzes Stück eines Programms sich immer wieder im Code wiederholt (so wird ein Programm sehr viel länger und somit auch fehleranfälliger) oder auch hier bei den Datenbanken ist die Redundanz ein Thema.\\ | Redundant bedeutet<color #7092be> ** mehrfach (im Überfluss) vorhanden **</color> sein, beispielsweise in der Programmierung wenn oft die gleiche Programmzeile oder ein ganzes Stück eines Programms sich immer wieder im Code wiederholt (so wird ein Programm sehr viel länger und somit auch fehleranfälliger) oder auch hier bei den Datenbanken ist die Redundanz ein Thema.\\ \\ |
| Redundanzen bedeutet hier, dass Informationen unnötigerweise mehrmals in der Datenbank abgespeichert werden. Das führt immer zu Speicherplatzverschwendung, Einbussen in der Zeit (wenn wir beispielsweise Daten suchen oder ändern wollen), Energieverschwendung und sollte in Datenbanken immer vermieden werden! | Redundanzen bedeutet bei Datenbanken, dass Informationen unnötigerweise mehrmals in der Datenbank abgespeichert werden. Das führt immer zu Speicherplatzverschwendung, Einbussen in der Zeit (wenn wir beispielsweise Daten suchen oder ändern wollen), Energieverschwendung und sollte in Datenbanken immer vermieden werden! |
| </WRAP> | </WRAP> |
| |
| |
| === Lösung: relationelle Datenbank === | === Lösung: relationelle Datenbank === |
| Eine effiziente und einfache Lösung des Problems ist die sogenannte **relationale Datenbank**. Dabei werden die Daten auf mehrere Tabellen verteilt, die miteinander in Verbindung stehen, also verknüpft sind. | Eine effiziente und einfache Lösung des Problems ist die sogenannte **relationale Datenbank**. Dabei werden die Daten auf mehrere <color #7092be>Tabellen</color> verteilt, die <color #7092be>miteinander in Verbindung stehen</color>, also verknüpft sind. |
| |
| Um dies zu erreichen, muss für <color #7092be>jede Gruppe von Feldern</color>, die **redundante** Elemente enthalten, eine neue Tabelle erstellt werden. Man achtet auch darauf, dass die entstehenden Tabellen inhaltlich zusammengehörende Daten enthalten. \\ | Um dies zu erreichen, muss für <color #7092be>jede Gruppe von Feldern</color>, die **redundante** Elemente enthalten, eine neue Tabelle erstellt werden. Man achtet auch darauf, dass die entstehenden Tabellen inhaltlich zusammengehörende Daten enthalten. \\ |
| |
| In unserem Beispiel gibt es Redundanzen bei den Benutzern und bei den geposteten Bildern. D.h. zusätzlich zur Tabelle "Kommentare" müssen wir zwei Tabellen "Benutzer" und "Bilder" erstellen, welche die Benutzer unseres Netzwerks und die geposteten Bilder enthalten. | In unserem Beispiel gibt es Redundanzen bei den Benutzern und bei den geposteten Bildern. Dies bedeutet, zusätzlich zur Tabelle "Kommentare" müssen wir zwei Tabellen "Benutzer" und "Bilder" erstellen, welche die Benutzer unseres Netzwerks und die geposteten Bilder enthalten. |
| |
| Die **Tabelle "Benutzer"** sieht nun folgendermassen aus: | Die **Tabelle "Benutzer"** sieht nun folgendermassen aus: |
| <WRAP nicebox blue> | <WRAP nicebox blue> |
| **Primärschlüssel:**\\ | **Primärschlüssel:**\\ |
| Primärschlüssel sind Felder in Tabellen, die für jeden Datensatz (jede Zeile in der Tabelle) einen absolut eindeutigen Wert enthalten. Primärschlüssel dienen dazu, jeden Datensatz eindeutig identifizieren zu können. Man sollte stets versuchen, Namen von Menschen als Primärschlüssel zu vermeiden, da mehrere Menschen gleich heissen können. Das würde dann zu Problemen führen. | <color #7092be>Primärschlüssel</color> sind Felder in Tabellen, die für jeden Datensatz (jede Zeile in der Tabelle) einen <color #7092be>**absolut eindeutigen Wert**</color> enthalten. Primärschlüssel dienen dazu, jeden Datensatz eindeutig identifizieren zu können. \\ |
| | \\ |
| | Bemerkung: Man sollte stets versuchen, Namen von Menschen als Primärschlüssel zu vermeiden, da mehrere Menschen gleich heissen können. Das würde dann zu Problemen führen. |
| </WRAP> | </WRAP> |
| |
| Auch bei der Tabelle der Bilder wurde ein Primärschlüssel **photo_id** hinzugefügt, damit man die Bilder eindeutig indentifizieren kann. Die gesamten Benutzerdaten werden nicht mehr in dieser Tabelle gespeichert. Stattdessen speichert man lediglich die **user_id** des Benutzers, der das Bild gepostet hat. | Auch bei der Tabelle der Bilder wurde ein Primärschlüssel **photo_id** hinzugefügt, damit man die Bilder eindeutig indentifizieren kann. Die gesamten Benutzerdaten werden nicht mehr in dieser Tabelle gespeichert. Stattdessen speichert man lediglich die **user_id** des Benutzers, der das Bild gepostet hat. |
| |
| Und nun kommen wir schliesslich zur ursprünglichen **Tabelle "Kommentare"**, welche die Kommentare der geposteten Bilder speichert. Sie enthält nun viel weniger Felder, da die Informationen zu den Benutzern und zu den Bildern in den entsprechenden Tabellen gespeichert sind. Damit man aber weiss, um welche Benutzer oder um welches Bild es sich handelt, sind diese durch die Felder **photo_user_id**, **photo_id** und **com_user_id** verknüpft. Diese drei Felder sind Primärschlüssel von anderen Tabellen und man spricht hier von sogenannten **Fremdschlüsseln**. \\ | Und nun kommen wir schliesslich zur ursprünglichen **Tabelle "Kommentare"**, welche die Kommentare der geposteten Bilder speichert. Sie enthält nun viel weniger Felder, da die Informationen zu den Benutzern und zu den Bildern in den entsprechenden Tabellen gespeichert sind. Damit man aber weiss, um welche Benutzer oder um welches Bild es sich handelt, sind diese durch die Felder <color #7092be>**photo_user_id**, **photo_id**</color> und <color #7092be>**com_user_id**</color> verknüpft. \\ |
| | \\ |
| | Diese drei Felder sind Primärschlüssel von anderen Tabellen und man spricht hier von sogenannten **Fremdschlüsseln**. \\ |
| |
| {{:gf2:datenbanken:tabelle_comments.png?700|}} | {{:gf2:datenbanken:tabelle_comments.png?700|}} |
| |
| In dieser Tabelle verweist das Feld "photo_user_id" auf die Tabelle "Benutzer" und der Inhalt des Feldes entspricht der "user_id". Der Verweis auf die Tabelle "Fotos" funktioniert auf ähnliche Weise (über das Feld photo_id, welches in der Tabelle Fotos ebenfalls photo_id heisst). Schliesslich ist auch das Feld com_user_id eine Verknüpfung auf die Tabelle "Benutzer". Dieser Fremdschlüssel gibt an, welcher Benutzer den Kommentar erstellt hat. | In dieser Tabelle verweist das Feld "photo_user_id" auf die Tabelle "Benutzer" und der Inhalt des Feldes entspricht der "user_id". Der Verweis auf die Tabelle "Fotos" funktioniert auf ähnliche Weise (über das Feld photo_id, welches in der Tabelle Fotos ebenfalls photo_id heisst). Schliesslich ist auch das Feld com_user_id eine Verknüpfung auf die Tabelle "Benutzer". |
| | \\ Dieser Fremdschlüssel gibt an, welcher Benutzer den Kommentar erstellt hat. |
| |
| <WRAP nicebox blue> | <WRAP nicebox blue> |
| **Fremdschlüssel:**\\ | **Fremdschlüssel:**\\ |
| Fremdschlüssel sind Datenbankfelder in einer Tabelle, die sich auf Datensätze anderer Tabellen beziehen. Normalerweise bezieht sich ein Fremdschlüssel immer auf den Primärschlüssel der anderen Tabelle. | <color #7092be>Fremdschlüssel</color> sind <color #7092be>**Datenbankfelder**</color> in einer Tabelle,<color #7092be>** die sich auf Datensätze anderer Tabellen beziehen **</color>. Normalerweise bezieht sich ein Fremdschlüssel immer auf den Primärschlüssel der anderen Tabelle. |
| </WRAP> | </WRAP> |
| Bei der Verwendung einer relationalen Datenbank wird der benötigte Speicherplatz | Bei der Verwendung einer relationalen Datenbank ist der benötigte Speicherplatz |
| geringer sein als beim ursprünglichen Beispiel (mit nur einer Tabelle) und somit das gewünschte Ziel, den Speicherplatz zu reduzieren, erreicht werden.\\ | geringer, als es ursprünglich mit nur einer Tabelle der Fall war. Dadurch wurde das ursprüngliche Ziel (die Speicheroptimierung) erreicht. \\ \\ |
| | Die relationale Datenbank bringt noch weitere Vorteile mit sich: Wenn ein Benutzer beispielsweise seine Mailadresse ändert, muss man nur einen einzigen Eintrag (Datensatz) in der Tabelle "Benutzer" ändern, anstatt mehrere Änderungen in der Tabelle "Kommentare" zu tätigen. Die Aktualisierung wird also erleichtert. Das gilt auch für Änderungen in der Tabelle Bilder. |
| <WRAP nicebox blue> | <WRAP nicebox blue> |
| **Relationale Datenbanken:**\\ | **Relationale Datenbanken:**\\ |
| In Relationalen Datenbanken werden die Daten immer in Form von Tabellen abgespeichert. Dabei hat jede Tabelle einen eigenen Primärschlüssel. Fremdschlüssel werden hierbei benutzt, um verschiedene Tabellen so miteinander zu verbinden, dass Redundanzen möglichst vermieden werden.\\ | In Relationalen Datenbanken werden die Daten immer in Form von Tabellen abgespeichert. Dabei hat jede Tabelle einen eigenen Primärschlüssel. \\ |
| Relationale Datenbanken gehören zu den üblichsten und am meisten verwendeten der Welt und werden heutzutage in fast allen Bereichen eingesetzt. | Fremdschlüssel werden benutzt, um verschiedene Tabellen so <color #7092be>miteinander zu verbinden, dass Redundanzen möglichst vermieden</color> werden.\\ |
| | Relationale Datenbanken sind das am häufigsten verwendete Konzept, um Daten zu speichern. Sie werden heutzutage in fast allen Bereichen eingesetzt, in welchen Daten eine Rolle spielen. |
| </WRAP> | </WRAP> |
| |
| Das hat noch weitere Vorteile: Wenn ein Benutzer beispielsweise seine Mailadresse ändert, genügt es, einen einzigen Eintrag (Datensatz) in der Tabelle "Benutzer" zu ändern, anstatt mehrere Änderungen in der Tabelle "Kommentare" zu tätigen. Die Aktualisierung wird also erleichtert. Das gilt auch für Änderungen in der Tabelle Bilder. | |
| |
| <WRAP nicebox green> | <WRAP nicebox green> |
| <WRAP group> | <WRAP group> |
| <WRAP column 60%> | <WRAP column 60%> |
| Nun werden Sie selbst Administrator/in deines eigenen Netzwerkes namens InstaHub. Dies beinhaltet Nutzer, Fotos, Kommentare und noch vieles mehr. Sie haben als Administrator alle Rechte über die Nutzer und kennen alle Daten der Nutzer. \\ Jeder und jede Lernende hat sein bzw. ihr eigenes Netzwerk, welche sich durch die Namen unterscheiden. Unter dem Link xyz.instahub.org, wobei xyz Ihr persönlicher Teil des Links ist (vgl. Lektion) erreichen Sie Ihre Seite und kann sich jeder mit dem Benutzernamen //admin// und dem Ihnen mitgeteilten persönlichen Passwort einloggen.\\ | Nun werden Sie selbst Administrator/in ihres eigenen Netzwerkes namens InstaHub. Dies beinhaltet Nutzer, Fotos, Kommentare und noch vieles mehr. Sie haben als Administrator alle Rechte über die Nutzer und kennen alle Daten der Nutzer. \\ |
| | |
| | Jeder und jede Lernende hat sein bzw. ihr eigenes Netzwerk, welche sich durch die Namen unterscheiden. Unter dem Link xyz.instahub.org, wobei xyz Ihr persönlicher Teil des Links ist (vgl. Lektion) erreichen Sie Ihre Seite und Sie können sich mit dem Benutzernamen //admin// und dem persönlichen Passwort einloggen.\\ |
| |
| |
| Klicken Sie zunächst auf das Datenbanksymbol oben rechts (das mittlere Symbol, siehe Abbildung) und wählen Sie "Suchen". \\ | Klicken Sie zunächst auf das Datenbanksymbol oben rechts (das mittlere Symbol, siehe Abbildung) und wählen Sie "Suchen". \\ |
| Danach können Sie Ihre Social-Netzwerk-Datenbank durchsuchen. Standardmässig ist als einziges die Tabelle "Users" gefüllt, d.h. Ihr Netzwerk besteht aus ca. 200 Benutzern, die jedoch noch nichts gepostet haben. \\ | Danach können Sie Ihre Social-Netzwerk-Datenbank durchsuchen. Standardmässig ist als einziges die Tabelle "Users" gefüllt, d.h. Ihr Netzwerk besteht aus ca. 200 Benutzern, die jedoch noch nichts gepostet haben. \\ |
| Wählen Sie die Tabelle "users" aus und bearbeiten Sie mithilfe der Hacken ✔ "Spalten filtern" (welche Spalten sollten dargestellt werden) und ✔ "Ergebnisse Filtern" (welche Zeilen sollen ausgewählt und herausgefiltert werden) die folgenden Aufträge: | Wählen Sie die Tabelle "users" aus und bearbeiten Sie mithilfe der Haken ✔ "Spalten filtern" (welche Spalten sollten dargestellt werden) und ✔ "Ergebnisse Filtern" (welche Zeilen sollen ausgewählt und herausgefiltert werden) die folgenden Aufträge: |
| |
| </WRAP> | </WRAP> |