{"id":249,"date":"2008-11-28T21:20:25","date_gmt":"2008-11-28T19:20:25","guid":{"rendered":"http:\/\/robert.kolatzek.org\/wblog\/?p=249"},"modified":"2008-11-28T21:20:25","modified_gmt":"2008-11-28T19:20:25","slug":"relationale-datenbanken-verstehen","status":"publish","type":"post","link":"https:\/\/blog.kolatzek.org\/wblog\/249\/relationale-datenbanken-verstehen","title":{"rendered":"Relationale Datenbanken verstehen&#8230;"},"content":{"rendered":"<p>Viele meiner Studienkollegen und -Kolleginen spart sich w\u00e4hrend des Studiums der Informationswissenschaft das Kapitel \u00fcber die Datenbanksysteme (aus unserer Informationswissenschaftler-&#8222;Bibel&#8220; mit dem K\u00fcrzel &#8218;KSS&#8216;). Die Folge ist die Verwendung unterschiedlicher Datenbank-\u00e4hnlichen-Tools fernab des &#8222;state of the art&#8220;. Dabei ist das so einfach&#8230; Es mag seltsam klingen, aber meiner Erfahrung nach haben vor allem Humanisten und Frauen mit diesem &#8222;Denksystem&#8220; ein Problem. [<em>Bitte beachten Sie: Dies ist nicht abwertend gemeint, sondern widerspiegelt meine Erfahrung und einen f\u00fcr mich unerkl\u00e4rlichen Zusammenhang.<\/em>] Deshalb m\u00f6chte ich es so darstellen, dass jeder es verstehen kann.<!--more--><\/p>\n<p>F\u00fcr die Entstehung relationaler Datenbanksysteme ist vor allem die Idee der <a title=\"Normalisierung nach Wikipedia (vorsicht - kompliziert)\" href=\"http:\/\/de.wikipedia.org\/wiki\/Normalisierung_(Datenbank)\" target=\"_self\">Normalisierung<\/a> von Werten in einer Datenbank verantwortlich. Man m\u00f6chte den Zustand erreichen, dass ein bestimmter Wert wie &#8222;25,8&#8220; oder &#8222;rot&#8220; nur einmal vorkommt &#8211; also nicht redundant (mehrfach) abgespeichert wird. Man benutzt einen Stellvertreter &#8211; die ID. Eine ID ist meist nummerisch und zwar deshalb, weil es f\u00fcr die Datenbank einfach ist, die n\u00e4chte freie ID (f\u00fcr einen neuen Wert) zu generieren. Sie z\u00e4hlt einfach eins hoch (die_h\u00f6chste_ID+1). Dies nennt man oft &#8218;autoincrement&#8216;. Dies hat den Vorteil, dass das Schloss (die Burg) vom Schloss (in der T\u00fcr) unterschieden werden kann. Au\u00dferdem ist eine nummerische ID einfacher zu verarbeiten (weil k\u00fcrzer) als lange Zeichenketten.<\/p>\n<p>Das Erste, was Sie sich aus diesem Abschnitt merken sollen, ist die Tatsache, dass jeder Wert etwas eigenst\u00e4ndiges ist. Die Farbe Rot ist nicht einfach nur ein &#8222;Anh\u00e4ngsel&#8220; eines Autos. Rot ist ein eigener Wert, genau wie das Auto selbst! Beide gehen Koalitionen ein und sind niemals Bestandteile voneinander. Nat\u00fcrlich kann man nicht das Rot selbst sehen, weil es nur in Verbindung mit einem Tr\u00e4ger vorkommt (wie Forma und Materia beim Aristoteles). Trotzdem: Auch wenn rot ein Adjektiv oder Adverb ist, ist es etwas eigenst\u00e4ndiges, nichts minderwertiges&#8230;<\/p>\n<p>Nun zum ersten Beispiel: wir erfassen Automarken mit den m\u00f6glichen und \u00fcblichen Eigenschaften (Sprit, Farbe)<\/p>\n<ul>\n<li>Ferrari: Benziner; rot<\/li>\n<\/ul>\n<p>Jetzt wird es aber kompliziert:<\/p>\n<ul>\n<li>Golf: Diesel oder Benziner; rot, blau oder silber<\/li>\n<\/ul>\n<p>Was ist das Problem? Wir haben nur die Eigenschaft &#8222;Sprit&#8220; (f\u00fcr einen Wert) und die Eigenschaft &#8222;Farbe&#8220; (nicht &#8222;Farben&#8220;). Was ist die L\u00f6sung? Wir bauen f\u00fcr jedes der drei Dinge eigene Tabelle: eine f\u00fcr das Auto, eine f\u00fcr den Sprit und eine f\u00fcr die Farbe. Ferrari bekommt die ID 1 und Golf die ID 2. Es ergibt sich die Sprit-Tabelle (Sprit = AutoID):<\/p>\n<ul>\n<li>Benzin = 1<\/li>\n<li>Benzin = 2<\/li>\n<li>Diesel = 2<\/li>\n<\/ul>\n<p>Schon mal besser. Jeder Wert kommt selbst\u00e4ndig vor (die erste Normalform) anstatt ein Glied einer Kette zu sein. &#8222;Benzin&#8220; kommt als Wert sowohl dem Ding mit der ID 1 (Ferrari) als auch dem Anderen Ding mit der ID 2 (Golf) zu. Da mehrere Werte einem Ding zukommen k\u00f6nnen, nennt man diese Relation 1-zu-m (ein Auto aber mehrere Sprit-Arten m\u00f6glich).<\/p>\n<p>In SQL kann man es so zusammenbringen: &#8222;Select * from Auto,Sprit where Auto.ID=Sprit.AutoID&#8220;. Schon haben wir das gleiche wie oben&#8230; (Farben lassen wir mal aus)<\/p>\n<p>Doch etwas stimmt da noch nicht. Haben wir nicht von Vermeidung von Redundanzen gesprochen? Warum muss &#8222;Benzin&#8220; zwei mal drin vorkommen? Richtig! Es gibt nur ein &#8222;Benzin&#8220; (na gut es gibt ja noch &#8222;Super&#8220; &#8211; aber das lassen wir lieber mal&#8230;). Benutzen wir mal Stellvertreter. Benzin wird durch &#8222;1&#8220; und Diesel durch &#8222;2&#8220; repr\u00e4sentiert &#8211; aber nur unter der Voraussetzung, dass sie so behandelt werden wie Autos. Damit haben wir die Tabelle &#8222;Sprit&#8220; (ID, Spritart):<\/p>\n<ul>\n<li>1 = Benzin<\/li>\n<li>2 = Diesel<\/li>\n<\/ul>\n<p>Damit erreichen wir die &#8222;zweite Normallform&#8220;. Die Koalition (oder richtiger: &#8222;Relation&#8220;) dieser beiden Dinge halten wir in einer dritten Tabelle namens &#8222;AutoUndSprit&#8220; fest. Sie beinhaltet nur die AutoID und die SpritID:<\/p>\n<ul>\n<li>1 = 1<\/li>\n<li>2 = 1<\/li>\n<li>2 = 2<\/li>\n<\/ul>\n<p>&#8222;Ferrari&#8220;, &#8222;Golf&#8220;, &#8222;Benzin&#8220; und &#8222;Diesel&#8220; kommen nur noch einmal vor, aber nicht ihre Stellvertreter. In der dritten Tabelle k\u00f6nnen beliebige Werte aus der Auto-Tabelle auf die Werte aus der Sprit-Tabelle treffen. Und das so oft wie sie wollen. So einen Mischmasch nennt man auch fachm\u00e4nnisch eine m-zu-n-Relation (beliebig viele Autos k\u00f6nnen [rein theoretisch] beliebig viele Sprit-Arten fahren und umgekehrter Weise k\u00f6nnen beliebig viele Sprit-Arten in beliebig viele Auto-Typen getankt werden). Das Nennt man die &#8222;dritte Normalform&#8220;. Und so sieht die &#8222;Zusammenstellung&#8220; aus:<\/p>\n<ul>\n<li>Ferrari = &#8222;1&#8220; ; &#8222;1&#8220; = &#8222;1&#8220; ; &#8222;1&#8220; = Benzin<\/li>\n<li>Golf = &#8222;2&#8220; ; &#8222;2&#8220; = &#8222;1&#8220; ; &#8222;1&#8220; = Benzin<\/li>\n<li>Golf = &#8222;2&#8220; ; &#8222;2&#8220; = &#8222;2&#8220; ; &#8222;2&#8220; = Diesel<\/li>\n<\/ul>\n<p>Und so w\u00fcrde das SQL aussehen: &#8222;Select * from Auto,AutoUndSprit,Sprit where Auto.ID=AutoUndSprit.AutoID and AutoUndSprit.SpritID=Sprit.ID&#8220;. Was hinter &#8222;where&#8220; kommt, ist genau das, was in der Zusammenstellung mit &#8222;;&#8220; als Trenner zwischen Tabellen ausgezichnet wurde.<\/p>\n<p>Wenn Sie jetzt Gleiches mit den Farben hinbekommen, haben Sie alles Verstanden und k\u00f6nnen sich als Kenner ralationaler Datenbanken (wie z.B. MySQL) bezeichnen.<\/p>\n<p>Und hier ein Hinweis auf die richtige L\u00f6sung:<\/p>\n<ul>\n<li>Ferrar = &#8222;1&#8220; ; &#8222;1&#8220; = &#8222;1&#8220; ; &#8222;1&#8220; = rot<\/li>\n<li>Golf = &#8222;2&#8220; ; &#8222;2&#8220; = &#8222;1&#8220; ; &#8222;1&#8220; = rot<\/li>\n<li>Golf = &#8222;2&#8220; ; &#8222;2&#8220; = &#8222;2&#8220; ; &#8222;2&#8220; = blau<\/li>\n<li>Golf = &#8222;2&#8220; ; &#8222;2&#8220; = &#8222;3&#8220; ; &#8222;3&#8220; = silber<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Viele meiner Studienkollegen und -Kolleginen spart sich w\u00e4hrend des Studiums der Informationswissenschaft das Kapitel \u00fcber die Datenbanksysteme (aus unserer Informationswissenschaftler-&#8222;Bibel&#8220; mit dem K\u00fcrzel &#8218;KSS&#8216;). Die Folge ist die Verwendung unterschiedlicher Datenbank-\u00e4hnlichen-Tools fernab des &#8222;state of the art&#8220;. Dabei ist das so einfach&#8230; Es mag seltsam klingen, aber meiner Erfahrung nach haben vor allem Humanisten und [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[3,8],"tags":[12,14,72,101],"class_list":["post-249","post","type-post","status-publish","format-standard","hentry","category-informationswissenschaft","category-software","tag-arbeit","tag-auto","tag-mysql","tag-software-co","entry"],"_links":{"self":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/comments?post=249"}],"version-history":[{"count":0,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/249\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/media?parent=249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/categories?post=249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/tags?post=249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}