{"id":55000518,"date":"2021-04-01T00:00:00","date_gmt":"2021-04-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/518"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Inkonsistente_Verknuepfungen_finden","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html","title":{"rendered":"Inkonsistente Verkn&uuml;pfungen finden"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/6b8b48141eec47fca557830be9b7ef54\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class='introduction'>Inkonsistenzen in einem Datenbestand k&ouml;nnen an verschiedenen Stellen entstehen. Die eine M&ouml;glichkeit sind Inkonsistenzen, die in Folge von Duplikaten auftreten &#8211; also wenn Sie beispielsweise eine Kategorie in zwei verschiedenen Schreibweisen anlegen. Andere Inkonsistenzen treten bei verkn&uuml;pften Daten zwischen zwei Tabellen auf, deren Beziehung nicht mit referentieller Integrit&auml;t definiert ist. Hier kann es sein, dass das Fremdschl&uuml;sselfeld Werte enth&auml;lt, die gar nicht im Prim&auml;rschl&uuml;sselfeld der verkn&uuml;pften Tabelle auftauchen. Dieser Artikel zeigt, wie Sie solche Inkonsistenzen im Datenbestand aufdecken.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>2102_InkonsistenteVer-knuepfungen.accdb<\/b>.<\/p>\n<h2>Was sind inkonsistente Verkn&uuml;pfungen<\/h2>\n<p>Angenommen, Sie hinterlegen in einer Tabelle einer Datenbank ein Feld, dass die Datens&auml;tze dieser Datenbank eindeutig identifiziert (in der Regel ein Prim&auml;rschl&uuml;sselfeld). In einer anderen Tabelle definieren Sie ein sogenanntes Fremdschl&uuml;sselfeld, &uuml;ber das Sie die Datens&auml;tze der ersten mit denen der zweiten Tabelle verkn&uuml;pfen wollen, indem Sie dort die Werte des eindeutigen Feldes der ersten Datenbank eintragen. Wenn Sie das machen, ohne eine Beziehung mit referentieller Integrit&auml;t zwischen diesen beiden Tabellen zu erstellen, k&ouml;nnen Sie im Fremdschl&uuml;sselfeld der zweiten Tabelle nicht nur die Werte des Prim&auml;rschl&uuml;sselfeldes der ersten Tabelle hinterlegen, sondern auch alle m&ouml;glichen anderen Werte.<\/p>\n<p>Oder Sie hinterlegen im Fremdschl&uuml;sselfeld sogar Werte, die im Prim&auml;rschl&uuml;sselfeld der ersten Tabelle vorkommen, l&ouml;schen dann aber Datens&auml;tze aus der ersten Tabelle, die bereits vom Fremdschl&uuml;sselfeld referenziert sind.<\/p>\n<p>In diesen F&auml;llen erhalten Sie inkonsistente Daten, in diesem Fall im Zusammenhang mit einer Verkn&uuml;pfung. Das Fremdschl&uuml;sselfeld der zweiten Tabelle enth&auml;lt dann nicht mehr nur Werte, die im Prim&auml;rschl&uuml;sselfeld der erste Tabelle aufgef&uuml;hrt werden. So kann keine vollst&auml;ndige Zuordnung der Datens&auml;tze der beiden Tabellen mehr erfolgen.<\/p>\n<p>Ein Beispiel finden Sie in Bild 1. Hier gibt es in der Tabelle <b>tblProdukte <\/b>zwei Produkte, deren Werte im Feld <b>KategorieID <\/b>nicht im Feld <b>KategorieID <\/b>der Tabelle <b>tblKategorien <\/b>enthalten sind.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_518_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_518_001.png\" alt=\"Verkn&uuml;pfung mit Inkonsistenzen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Verkn&uuml;pfung mit Inkonsistenzen<\/p>\n<h2>Verhindern von inkonsistenten Verkn&uuml;pfungen<\/h2>\n<p>Wenn Sie das Datenmodell Ihrer Datenbank nach den ersten drei Normalformen auslegen (siehe Artikel <b>Normalisierung, Teil 1: Die erste Normalform <\/b>und folgende, <b>www.access-basics.de\/498<\/b>) und f&uuml;r alle Beziehungen referentielle Integrit&auml;t definieren, sollten keine inkonsistenten Verkn&uuml;pfungen in Ihrer Datenbank auftauchen. Access meldet dann beim Versuch, inkonsistente Daten anzulegen, einen Fehler.<\/p>\n<h2>Referentielle Integrit&auml;t<\/h2>\n<p>Um zu erkl&auml;ren, warum keine inkonsistenten Verkn&uuml;pfungen entstehen, wenn Sie referentielle Integrit&auml;t f&uuml;r eine Beziehung definiert haben, schauen wir uns kurz an, was referentielle Integrit&auml;t ist. Referentielle Integrit&auml;t stellt sicher, dass das an einer Beziehung beteiligte Fremdschl&uuml;sselfeld nur solche Werte annehmen kann, die entweder in dem Prim&auml;rschl&uuml;sselfeld der Tabelle mit dem an der Beziehung beteiligten Prim&auml;rschl&uuml;sselfeld enthalten sind oder den Wert <b>NULL <\/b>haben. Weitere Informationen &uuml;ber referentielle Integrit&auml;t erhalten Sie im Artikel <b>Referentielle Integrit&auml;t <\/b>(<b>www.access-basics.de\/515<\/b>).<\/p>\n<h2>Warum gibt es inkonsistente Verkn&uuml;pfungen<\/h2>\n<p>Stellt sich die Frage: Warum gibt es &uuml;berhaupt inkonsistente Verkn&uuml;pfungen, wenn man diese doch so einfach durch das Definieren von Beziehungen mit referentieller Integrit&auml;t verhindern kann Die Antwort ist einfach: Nicht jede Datenbank wird von Grund auf neu aufgebaut. Als Entwickler erhalten Sie oft Datenbanken, die von anderen Entwicklern definiert wurden. Oder Sie wollen Daten aus anderen Datenquellen wie beispielsweise Excel-Tabellen einlesen, deren Daten bereits eine Art Verkn&uuml;pfung zwischen zwei Tabellen aufweisen.<\/p>\n<p>Excel bietet aber keinen echten Mechanismus, mit dem die referentielle Integrit&auml;t durchgesetzt werden kann. Deshalb kommt es dort schnell zu Inkonsistenzen, ohne das der Benutzer es mitbekommt.<\/p>\n<h2>Wie finden wir inkonsistente Verkn&uuml;pfungen<\/h2>\n<p>Damit kommen wir schon zur wichtigsten Frage: Wenn unsere Datenbank eine Beziehung enth&auml;lt, f&uuml;r die wir noch keine referentielle Integrit&auml;t definiert haben, wie finden wir heraus, ob es inkonsistente Daten gibt und um welche es sich handelt<\/p>\n<p>Um herauszufinden, ob eine Verkn&uuml;pfung inkonsistente Daten enth&auml;lt, gibt es eine sehr einfache Methode. Wir versuchen einfach, eine Beziehung mit referentieller Integrit&auml;t zwischen den beiden Tabellen zu erstellen. In diesem Fall &ouml;ffnen wir das Beziehungen-Fenster (Ribbon-Eintrag <b>Datenbanktools|Be-zie-hun-gen|Beziehungen<\/b>), f&uuml;gen die beiden Tabellen <b>tblProdukte <\/b>und <b>tblKategorien <\/b>hinzu und ziehen dann das Feld <b>KategorieID <\/b>der Tabelle <b>tblProdukte <\/b>auf das gleichnamige Feld der Tabelle <b>tblKategorien<\/b>. Daraufhin erscheint der Dialog <b>Beziehungen bearbeiten<\/b>, in dem wir die Option <b>Mit referentieller Integrit&auml;t <\/b>aktivieren (siehe Bild 2).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_518_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_518_002.png\" alt=\"Versuch, eine Beziehung mit referentieller Integrit&auml;t zu definieren\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Versuch, eine Beziehung mit referentieller Integrit&auml;t zu definieren<\/p>\n<p>Daraufhin erscheint die Meldung aus Bild 3. Die Fehlermeldung liefert detailliert die Informationen, die man haben muss: Die Tabellen versto&szlig;en gegen die Regeln der referentiellen Integrit&auml;t und die Daten m&uuml;ssen so ge&auml;ndert werden, dass es in der Tabelle mit dem Prim&auml;rschl&uuml;sselfeld Datens&auml;tze f&uuml;r alle im Fremdschl&uuml;sselfeld der anderen Tabelle vorkommenden Werte gibt.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_518_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_518_003.png\" alt=\"Meldung beim Versuch, referentielle Integrit&auml;t f&uuml;r eine inkonsistente Beziehung zu definieren\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Meldung beim Versuch, referentielle Integrit&auml;t f&uuml;r eine inkonsistente Beziehung zu definieren<\/p>\n<h2>Daten mit inkonsistenten Verkn&uuml;pfungen finden<\/h2>\n<p>Nun m&uuml;ssen wir nur noch herausfinden, an welchen Daten es liegt. Dazu nutzen wir zun&auml;chst den entsprechenden Assistenten von Access. Diesen starten Sie &uuml;ber den Ribbon-Befehl <b>Erstellen|Abfragen|Abfrage-Assistent<\/b>. Im nun erscheinenden Dialog <b>Neue Abfrage <\/b>w&auml;hlen Sie den Eintrag <b>Abfrage-Assistent zur Inkonsistenzsuche <\/b>aus (siehe Bild 4).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_518_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_518_004.png\" alt=\"Starten des Assistenten zum Finden von inkonsistenten Verkn&uuml;pfungen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Starten des Assistenten zum Finden von inkonsistenten Verkn&uuml;pfungen<\/p>\n<h2>Erste Tabelle ausw&auml;hlen<\/h2>\n<p>Der erste Schritt des Assistenten fragt die Tabelle ab, deren Datens&auml;tze falsche oder fehlende Verkn&uuml;pfungen enth&auml;lt. Das ist die Tabelle, die das an der Beziehung beteiligte Fremdschl&uuml;sselfeld enth&auml;lt, in unserem Fall also <b>tblProdukte<\/b> (siehe Bild 5).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_518_005.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_518_005.png\" alt=\"Erster Schritt: Auswahl der Tabelle mit dem Fremdschl&uuml;sselfeld\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Erster Schritt: Auswahl der Tabelle mit dem Fremdschl&uuml;sselfeld<\/p>\n<h2>Zweite Tabelle ausw&auml;hlen<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000518\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000518?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000518\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Inkonsistenzen in einem Datenbestand k&ouml;nnen an verschiedenen Stellen entstehen. Die eine M&ouml;glichkeit sind Inkonsistenzen, die in Folge von Duplikaten auftreten &#8211; also wenn Sie beispielsweise eine Kategorie in zwei verschiedenen Schreibweisen anlegen. Andere Inkonsistenzen treten bei verkn&uuml;pften Daten zwischen zwei Tabellen auf, deren Beziehung nicht mit referentieller Integrit&auml;t definiert ist. Hier kann es sein, dass das Fremdschl&uuml;sselfeld Werte enth&auml;lt, die gar nicht im Prim&auml;rschl&uuml;sselfeld der verkn&uuml;pften Tabelle auftauchen. Dieser Artikel zeigt, wie Sie solche Inkonsistenzen im Datenbestand aufdecken.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022021,662021,44000006],"tags":[],"class_list":["post-55000518","post","type-post","status-publish","format-standard","hentry","category-66022021","category-662021","category-Abfragen_fuer_die_Datenauswahl"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Inkonsistente Verkn&uuml;pfungen finden - Access [basics]<\/title>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Inkonsistente Verkn&uuml;pfungen finden - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Inkonsistenzen in einem Datenbestand k&ouml;nnen an verschiedenen Stellen entstehen. Die eine M&ouml;glichkeit sind Inkonsistenzen, die in Folge von Duplikaten auftreten - also wenn Sie beispielsweise eine Kategorie in zwei verschiedenen Schreibweisen anlegen. Andere Inkonsistenzen treten bei verkn&uuml;pften Daten zwischen zwei Tabellen auf, deren Beziehung nicht mit referentieller Integrit&auml;t definiert ist. Hier kann es sein, dass das Fremdschl&uuml;sselfeld Werte enth&auml;lt, die gar nicht im Prim&auml;rschl&uuml;sselfeld der verkn&uuml;pften Tabelle auftauchen. Dieser Artikel zeigt, wie Sie solche Inkonsistenzen im Datenbestand aufdecken.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-01T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/6b8b48141eec47fca557830be9b7ef54\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"13\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/vg08.met.vgwort.de\/na\/6b8b48141eec47fca557830be9b7ef54\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html\",\"name\":\"Inkonsistente Verkn&uuml;pfungen finden - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html#primaryimage\"},\"datePublished\":\"2021-04-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Verknuepfungen_finden.html\",\"name\":\"Inkonsistente Verkn&uuml;pfungen finden\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000518"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000518\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}