{"id":181288,"date":"2023-07-22T21:30:28","date_gmt":"2023-07-22T20:30:28","guid":{"rendered":"https:\/\/liora.io\/de\/?p=181288"},"modified":"2026-02-06T06:31:16","modified_gmt":"2026-02-06T05:31:16","slug":"fremdschluessel-sql-ein-wichtiges-schutzsystem","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/fremdschluessel-sql-ein-wichtiges-schutzsystem","title":{"rendered":"Fremdschl\u00fcssel SQL : Ein wichtiges Schutzsystem"},"content":{"rendered":"<h3>Fremdschl\u00fcssel SQL: Wer ein SQL-Datenbankverwaltungssystem entwirft, tut gut daran, das Fremdschl\u00fcsselsystem zu kennen und zu implementieren. Langfristig wird er davon profitieren.<\/h3>\n<p>Ein Fremdschl\u00fcssel ist eine Spalte (oder mehrere Spalten) in einer Datenbank, die mit der Spalte Prim\u00e4rschl\u00fcssel in einer anderen Tabelle verkn\u00fcpft ist. Der Prim\u00e4rschl\u00fcssel ist eine einfache Kennung. Die n\u00fctzlichen &#8211; und ver\u00e4nderbaren &#8211; Informationen sind in der Fremdtabelle enthalten.<\/p>\n<p>Auch interessant:<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"426\"><\/colgroup>\n<tbody>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;MySQL Relationale Datenbanksoftware&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/mysql-eine-relationale-datenverwaltungssoftware\"><a href=\"https:\/\/liora.io\/de\/mysql-eine-relationale-datenverwaltungssoftware\" target=\"_blank\" rel=\"noopener\">MySQL Relationale Datenbanksoftware<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;SQL Tutorial&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/sql-tutorial\"><a href=\"https:\/\/liora.io\/de\/sql-tutorial\" target=\"_blank\" rel=\"noopener\">SQL Tutorial<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Apache Cassandra noSQL BDD&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/apache-cassandra-die-beliebteste-nosql-bdd\"><a href=\"https:\/\/liora.io\/de\/apache-cassandra-die-beliebteste-nosql-bdd\" target=\"_blank\" rel=\"noopener\">Apache Cassandra noSQL BDD<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;SQL Joins&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/alles-uber-sql-joins-verstehen\"><a href=\"https:\/\/liora.io\/de\/alles-uber-sql-joins-verstehen\" target=\"_blank\" rel=\"noopener\">SQL Joins<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;SQL Count Tutorial&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/sql-count-unser-tutorial\"><a href=\"https:\/\/liora.io\/de\/sql-count-unser-tutorial\" target=\"_blank\" rel=\"noopener\">SQL Count Tutorial<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;SQL Datei \u00f6ffnen&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/sql-datei-oeffnen-unser-tutorial\"><a href=\"https:\/\/liora.io\/de\/sql-datei-oeffnen-unser-tutorial\" target=\"_blank\" rel=\"noopener\">SQL Datei \u00f6ffnen<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Welchen Nutzen hat ein Fremdschl\u00fcssel SQL ?<\/h3>\n<p>Angenommen, du verwaltest eine Tabelle Artikel, in der es eine Spalte namens Kategorie gibt. F\u00fcr jeden Artikel muss diese Kategorie einzeln ausgef\u00fcllt werden.<\/p>\n<p>Als Beispiel k\u00f6nnten wir die Kategorie &#8222;Metallprodukt&#8220; haben. \u00dcber Nacht \u00e4ndert sich die Gesetzgebung und die Kategorie wird zu &#8222;Metallprodukt&#8220;.<\/p>\n<p>Was ist zu tun? Muss ich jetzt alle Zeilen \u00e4ndern, in denen die Kategorie &#8222;Metallprodukt&#8220; vorkommt? Leider ja. Wenn die Artikeltabelle Zehntausende von Eintr\u00e4gen umfasst, ist das ein sehr langwieriger Prozess.<\/p>\n<p>Um solche Situationen zu vermeiden, wurde der Begriff des Fremdschl\u00fcssels definiert. In dem oben beschriebenen Fall besteht die Idee darin, eine separate Tabelle mit dem Namen Kategorie zu erstellen, in der wir als <strong>Prim\u00e4rschl\u00fcssel<\/strong> eine Kennung (eine Nummer f\u00fcr jede Kategorie) haben, die mit der entsprechenden Beschreibung verkn\u00fcpft ist.<\/p>\n<p>In der Tabelle Artikel kann dann f\u00fcr jedes Produkt, das im Katalog angeboten wird, die entsprechende ID aus der Tabelle Kategorien angegeben werden. Es ist dann m\u00f6glich, die Liste jedes Artikels auszudrucken und gleichzeitig (durch einen Join) die entsprechende Kategorie anzuzeigen.<\/p>\n<p>Wie wir sehen k\u00f6nnen, ist die Situation der Kategorie, die ihren Namen \u00e4ndert, hier gel\u00f6st.<\/p>\n<h3>Eltern- und Tochtertabelle<\/h3>\n<p>Eine Tabelle, die von einer anderen Tabelle referenziert wird, wird als &#8222;\u00fcbergeordnete Tabelle&#8220; bezeichnet. Dies w\u00e4re in diesem Fall die Tabelle Kategorien.<\/p>\n<p>Und eine &#8222;Tochtertabelle&#8220; ist eine Tabelle, die auf eine externe Tabelle verweist.<\/p>\n<h3>Ein praktisches Beispiel<\/h3>\n<p>Hier ist ein weiteres Beispiel f\u00fcr die Verwendung eines Fremdschl\u00fcssels in einem expliziteren Fall.<\/p>\n<h4>KUNDEN-Tabelle<\/h4>\n<style type=\"text\/css\">\n.tg  {border-collapse:collapse;border-spacing:0;}<br \/>\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;<br \/>\n  overflow:hidden;padding:10px 5px;word-break:normal;}<br \/>\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;<br \/>\n  font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}<br \/>\n.tg .tg-97aw{font-family:\"Trebuchet MS\", Helvetica, sans-serif !important;font-size:16px;text-align:center;vertical-align:top}<br \/>\n.tg .tg-lyi1{font-family:\"Trebuchet MS\", Helvetica, sans-serif !important;font-size:16px;font-weight:bold;text-align:center;<br \/>\n  vertical-align:top}<br \/>\n<\/style>\n<table style=\"undefined;table-layout: fixed; width: 400px\">\n<colgroup>\n<col style=\"width: 100px\">\n<col style=\"width: 100px\">\n<col style=\"width: 100px\">\n<col style=\"width: 100px\">\n<\/colgroup>\n<thead>\n<tr>\n<th>Id_Client<\/th>\n<th>Nachname<\/th>\n<th>Vorname<\/th>\n<th>Alter<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Martin<\/td>\n<td>Germaine<\/td>\n<td>32<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>Culprit<\/td>\n<td>Thomas<\/td>\n<td>22<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Albanez<\/td>\n<td>Francis<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>De Jonqui\u00e8re<\/td>\n<td>Martine<\/td>\n<td>33<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>KUNDEN ist hier die Tabelle &#8222;Verwandte&#8220;. Wenn die Kundin Nr. 4, Martine de Jonqui\u00e8re, sich scheiden lassen w\u00fcrde und morgen wieder ihren M\u00e4dchennamen (Heras) annehmen w\u00fcrde, w\u00fcrde es gen\u00fcgen, diese Information in der Tabelle &#8222;Verwandte&#8220; zu \u00e4ndern.<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/weiterbildung-data-engineer\"><br \/>\nAlles \u00fcber die Fremdsprachenschl\u00fcssel<br \/>\n<\/a><\/p>\n<h4>BESTELL-Tabelle<\/h4>\n<style type=\"text\/css\">\n.tg  {border-collapse:collapse;border-spacing:0;}<br \/>\n.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;<br \/>\n  overflow:hidden;padding:10px 5px;word-break:normal;}<br \/>\n.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;<br \/>\n  font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}<br \/>\n.tg .tg-97aw{font-family:\"Trebuchet MS\", Helvetica, sans-serif !important;font-size:16px;text-align:center;vertical-align:top}<br \/>\n.tg .tg-lyi1{font-family:\"Trebuchet MS\", Helvetica, sans-serif !important;font-size:16px;font-weight:bold;text-align:center;<br \/>\n  vertical-align:top}<br \/>\n<\/style>\n<table style=\"undefined;table-layout: fixed; width: 375px\">\n<colgroup>\n<col style=\"width: 125px\">\n<col style=\"width: 150px\">\n<col style=\"width: 100px\">\n<\/colgroup>\n<thead>\n<tr>\n<th>Id_Bestellung<\/th>\n<th>Date_Bestellung<\/th>\n<th>Id_Kunde<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>11\/04\/2023<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>10\/05\/2023<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>12\/05\/2023<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>26\/05\/2023<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>16\/06\/2023<\/td>\n<td>1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In diesem Beispiel finden wir die Spalte &#8222;Kunden_Id&#8220; in der Tabelle BESTELLUNGEN (die die &#8222;Tochter&#8220;-Tabelle ist). Sie zeigt auf die Spalte &#8222;Kunden_Id&#8220; in der Tabelle KUNDEN. So k\u00f6nnten wir hier durch einen Join herausfinden, dass Martine de Jonqui\u00e8res dreimal bestellt hat:<strong> einmal im April und zweimal im Juni.<\/strong><\/p>\n<p>In der Tabelle KUNDEN ist die Spalte KUNDEN_ID der Prim\u00e4rschl\u00fcssel.<\/p>\n<p>In der Tabelle BESTELLUNGEN ist die Spalte KUNDEN_ID der Fremdschl\u00fcssel.<\/p>\n<h3>Vorteile von Fremdschl\u00fcsseln<\/h3>\n<h4>Referentielle Integrit\u00e4t<\/h4>\n<p>Der Hauptvorteil, der mit der <strong>Verwendung von Fremdschl\u00fcsseln<\/strong> verbunden ist, ist die referentielle Integrit\u00e4t: Keine Zeile in der Tochtertabelle ist vollst\u00e4ndig und g\u00fcltig, solange es keinen entsprechenden Datensatz in der Elterntabelle gibt.<\/p>\n<h4>Koh\u00e4renz der Informationen<\/h4>\n<p>Alle Tabellen, die auf den<strong> Fremdschl\u00fcssel verweisen,<\/strong> stellen sicher, dass sie konsistente und aktuelle Daten ausgeben k\u00f6nnen. Zur Erinnerung: Wenn Martine de Jonqui\u00e8res ihren Namen \u00e4ndert, wird diese \u00c4nderung von allen Tabellen aus sichtbar, die auf ihren Identifikator verweisen.<\/p>\n<h3>Nachteile von Fremdschl\u00fcsseln<\/h3>\n<h4>Verringerte Verarbeitungsgeschwindigkeit<\/h4>\n<p>Es ist offensichtlich, dass der Fremdschl\u00fcssel eine l\u00e4ngere <strong>Computerverarbeitungszeit<\/strong> erfordert. Jedes Mal, wenn du eine neue Zeile in eine Tabelle wie BESTELLUNGEN einf\u00fcgst, musst du \u00fcberpr\u00fcfen, ob die entsprechende Kunden-ID in der Tabelle KUNDEN vorhanden ist.<\/p>\n<h4>Komplexit\u00e4t<\/h4>\n<p>Der Verweis auf die Kunden-ID Nr. 4 kann komplexer sein, als einfach nur den Namen Martine de Jonqui\u00e8res anzugeben. Daher ist das Lesen einer Datenbank wie die der BESTELLUNGEN auf den ersten Blick nicht ganz einfach.<\/p>\n<h3>Fremdschl\u00fcssel SQL sind dennoch zu empfehlen<\/h3>\n<p>Trotz der Nachteile, die die Verwendung von Fremdschl\u00fcsseln mit sich bringen kann, ist die Verwendung von Fremdschl\u00fcsseln f\u00fcr diejenigen, die<a href=\"https:\/\/liora.io\/de\/sql-vs-nosql-unterschiede-anwendungen-vor-und-nachteile\"> SQL-Datenbanksysteme<\/a> entwerfen, sehr zu empfehlen. Auf lange Sicht wird er davon profitieren. Einfach ausgedr\u00fcckt k\u00f6nnte man sagen, dass es wichtig ist, Fremdschl\u00fcssel immer dann zu verwenden, wenn man es mit einem Datentyp zu tun hat, der sich im Laufe der Zeit \u00e4ndern kann. Die hier behandelten Beispiele zeigen deutlich, was man damit erreichen kann. Daher ist es von entscheidender Bedeutung, Fremdschl\u00fcssel bereits beim Entwurf einer SQL-Datenbank zu definieren.<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\"><br \/>\nLernen, SQL-Datenbanken zu verwalten<br \/>\n<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fremdschl\u00fcssel SQL: Wer ein SQL-Datenbankverwaltungssystem entwirft, tut gut daran, das Fremdschl\u00fcsselsystem zu kennen und zu implementieren. Langfristig wird er davon profitieren. Ein Fremdschl\u00fcssel ist eine Spalte (oder mehrere Spalten) in einer Datenbank, die mit der Spalte Prim\u00e4rschl\u00fcssel in einer anderen Tabelle verkn\u00fcpft ist. Der Prim\u00e4rschl\u00fcssel ist eine einfache Kennung. Die n\u00fctzlichen &#8211; und ver\u00e4nderbaren &#8211; [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":181290,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2476],"class_list":["post-181288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/181288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=181288"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/181288\/revisions"}],"predecessor-version":[{"id":217347,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/181288\/revisions\/217347"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/181290"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=181288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=181288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}