-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtransformationen.html
More file actions
160 lines (160 loc) · 12.6 KB
/
transformationen.html
File metadata and controls
160 lines (160 loc) · 12.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE html>
<html data-wf-page="6414b378f9c7afa62594814b" data-wf-site="640b3e76d7d422a8f3c9b5af">
<head>
<meta charset="utf-8">
<title>Transformation</title>
<meta content="ER_transformation" property="og:title">
<meta content="ER_transformation" property="twitter:title">
<meta content="width=device-width, initial-scale=1" name="viewport">
<meta content="Webflow" name="generator">
<link href="css/normalize.css" rel="stylesheet" type="text/css">
<link href="css/webflow.css" rel="stylesheet" type="text/css">
<link href="css/index.css" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com" rel="preconnect">
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script>
<script type="text/javascript">
WebFont.load({
google: {
families: ["Righteous:regular"]
}
});
</script>
<script type="text/javascript">
! function(o, c) {
var n = c.documentElement,
t = " w-mod-";
n.className += t + "js", ("ontouchstart" in o || o.DocumentTouch && c instanceof DocumentTouch) && (n.className += t + "touch")
}(window, document);
</script>
<link href="images/favicon.ico" rel="shortcut icon" type="image/x-icon">
<link href="images/webclip.png" rel="apple-touch-icon">
</head>
<body class="body-2">
<div data-animation="default" data-collapse="medium" data-duration="400" data-easing="ease" data-easing2="ease" role="banner" class="navbar-logo-left-container shadow-three w-nav">
<div class="container">
<div class="navbar-wrapper">
<a href="index.html" class="navbar-brand w-nav-brand">
<div class="text-block"><span class="text-span">S</span>(cratch)<span class="text-span-2">QL</span></div>
</a>
<nav role="navigation" class="nav-menu-wrapper w-nav-menu">
<ul role="list" class="nav-menu-two w-list-unstyled">
<li>
<div data-hover="false" data-delay="0" class="nav-dropdown w-dropdown">
<div class="nav-dropdown-toggle w-dropdown-toggle">
<div class="nav-dropdown-icon w-icon-dropdown-toggle"></div>
<div class="text-block-4">Themen</div>
</div>
<nav class="nav-dropdown-list shadow-three mobile-shadow-hide w-dropdown-list">
<a href="einfuehrung.html" class="nav-dropdown-link w-dropdown-link">Einführung</a>
<a href="modellierung.html" id="1" class="nav-dropdown-link w-dropdown-link">Modellierung</a>
<a href="#" class="nav-dropdown-link w-dropdown-link">Transformation</a>
<a href="abfragengrundlagen.html" class="nav-dropdown-link w-dropdown-link">Abfragengrundlage</a>
</nav>
</div>
</li>
<li class="mobile-margin-top-10">
<a href="game.html" class="button-primary w-button">Try it out</a>
</li>
</ul>
</nav>
<div class="menu-button w-nav-button">
<div class="w-icon-nav-menu"></div>
</div>
</div>
</div>
</div>
<div class="w-container">
<h1 class="heading-3"><strong>Relationenmodell</strong></h1>
<div class="text-block-3">Das Stichwort Relational findet sich auch hier wieder. Nicht nur in der realen Welt und in der abstrahierten Abbildung der ER-Diagramme, sondern auch in Form von Tabellen ist es relevant. In dieser Tabellenform werden nämlich die Relationen abgespeichert, die wir mithilfe eines ER-Diagramms darstellen.<br><br>Laut Definition ist eine <strong>relationale Datenbank</strong> eine digitale <a href="https://de.wikipedia.org/wiki/Datenbank" target="_blank">Datenbank</a>, die zur elektronischen <a href="https://de.wikipedia.org/wiki/Datenverarbeitung" target="_blank">Datenverwaltung</a> dient und auf einem <a href="https://de.wikipedia.org/wiki/Datenbanktabelle" target="_blank">tabellenbasierten</a> <a href="https://de.wikipedia.org/wiki/Relation_(Mathematik)" target="_blank">relationalen </a> <a href="https://de.wikipedia.org/wiki/Datenbankmodell" target="_blank">Datenbankmodell </a> beruht. Grundlage des Konzeptes relationaler Datenbanken ist die Relation. Sie stellt eine mathematische Beschreibung einer Tabelle dar. Operationen auf diesen Relationen werden durch die <a href="https://de.wikipedia.org/wiki/Relationale_Algebra" target="_blank">relationale Algebra </a> bestimmt. <br></div>
<ul role="list">
<li class="list-item-2"><strong>ER-Modellierung</strong> wurde dafür geschaffen. ER heißt Entity Relationship.</li>
<li class="list-item">Damit erstellen wir <strong>ER-Diagramme.</strong></li>
</ul>
<div class="rich-text-block w-richtext">
<h2><strong>Grundlegendes Konzept:</strong></h2>
<p>Eine relationale Datenbank kann man sich als eine Sammlung von <a href="https://de.wikipedia.org/wiki/Datenbanktabelle" target="_blank">Tabellen </a> (den Relationen) vorstellen, in welchen Datensätze abgespeichert sind. Jede Zeile in einer Tabelle ist ein <a href="https://de.wikipedia.org/wiki/Datensatz" target="_blank">Datensatz</a> und stellt in unserem Fall eine Entität dar. Jede Zeile besteht aus einer Reihe von Attributwerten (<a href="https://de.wikipedia.org/wiki/Attribut_(Datenbank)" target="_blank">Attribute</a> = Eigenschaften), den Spalten der Tabelle. Die Anzahl und der Typ der Attribute für eine Relation nennt man Relationenschema. Das Bild illustriert die Relation <em>R</em> mit Attributen <em>A<sub>1</sub></em> bis <em>A<sub>n </sub></em> in den Spalten.</p>
</div>
<div class="columns w-row">
<div class="column w-col w-col-5"><img src="images/drittesbsp.png" loading="lazy" sizes="100vw" srcset="images/drittesbsp-p-500.png 500w, images/drittesbsp-p-800.png 800w, images/drittesbsp.png 898w" alt=""></div>
<div class="column-2 w-col w-col-7"><img src="images/Bildschirmfoto-2023-03-17-um-19.40.42.png" loading="lazy" alt="" class="image-2"></div>
</div>
<div class="rich-text-block-4 w-richtext">
<p>In diesem Beispiel heißt die Relation Schüler und stellt somit den Entitätstypen dar. <br>Das Relationenschema besteht aus drei Attributen, die verschiedene Werttypen haben. <br>Schüler-ID ist der Primärschlüssel und daher als Attribut unterstrichen. <br>Jede Zeile stellt somit einen Schüler mit seinen Eigenschaften dar. Alle sind in der Relation ‘Schüler’. </p>
<p> </p>
<p></p>
<p>Jetzt wissen wir in welcher Form eine relationale Datenbank die Relationen abspeichert. Diesen tabellarischen Zustand wollen wir nun erreichen. Das erstellte ER-Diagramm kann man nun in diese Tabellen umwandeln. </p>
</div>
<div class="rich-text-block w-richtext">
<h2><strong>Transformation:</strong></h2>
<p>Eine relationale Datenbank kann man sich als eine Sammlung von <a href="https://de.wikipedia.org/wiki/Datenbanktabelle" target="_blank">Tabellen </a> (den Relationen) vorstellen, in welchen Datensätze abgespeichert sind. Jede Zeile in einer Tabelle ist ein <a href="https://de.wikipedia.org/wiki/Datensatz" target="_blank">Datensatz</a> und stellt in unserem Fall eine Entität dar. Jede Zeile besteht aus einer Reihe von Attributwerten (<a href="https://de.wikipedia.org/wiki/Attribut_(Datenbank)" target="_blank">Attribute</a> = Eigenschaften), den Spalten der Tabelle. Die Anzahl und der Typ der Attribute für eine Relation nennt man Relationenschema. Das Bild illustriert die Relation <em>R</em> mit Attributen <em>A<sub>1</sub></em> bis <em>A<sub>n </sub></em> in den Spalten.</p>
</div>
<ol role="list" class="list">
<li>Jeder Entitätstyp wird als Tabelle dargestellt. Jede Tabelle benötigt einen Primärschlüssel.</li>
<li>Jede n:m-Beziehung wird durch eine eigene Tabelle dargestellt.</li>
<li>Jede 1:n- und 1:1-Beziehung mit eigenen Attributen wird wie bei Regel 2 durch eine eigene Tabelle dargestellt.</li>
<li>Jede 1:n-Beziehung ohne eigene Attribute wird so dargestellt, dass der Primärschlüssel des 1-Entitätstyps Fremdschlüssel des n-Entitätstyps wird.</li>
<li>Jede 1:1-Beziehung ohne eigene Attribute wird so dargestellt, dass der Primärschlüssel des ersten Entitätstyps beim zweiten Entitätstyp Primär- und Fremdschlüssel zugleich wird.</li>
<li>Sind Regel 4 oder 5 nicht anwendbar, dann wird für die Beziehung eine gesonderte Tabelle angelegt.</li>
</ol>
<h3 class="heading-4">Beispiel Transformation:</h3>
<div class="w-richtext">
<p>Jeder Entitätstyp ist eine eigene Tabelle mit einem Primärschlüssel. Optimalerweise ist der Primärschlüssel ein einzelnes Attribut. Im Zweifel wird ein künstlicher Primärschlüssel zugewiesen, wie z.B eine ID. Jede Zeile einer Tabelle ist eine Entität des Entitätstyps.</p>
<p>Relationen werden aufgeteilt. Dazu geht man je nach Kardinalität unterschiedlich vor</p>
<ol start="1" role="list">
<li></li>
</ol>
</div><img src="images/zweitesbsp.png" loading="lazy" sizes="100vw" srcset="images/zweitesbsp-p-500.png 500w, images/zweitesbsp-p-800.png 800w, images/zweitesbsp.png 918w" alt="" class="image">
<div class="columns-2 w-row">
<div class="w-col w-col-4"><img src="images/viertesbsp2.png" loading="lazy" alt=""></div>
<div class="w-col w-col-3"><img src="images/Bildschirmfoto-2023-03-17-um-19.50.51.png" loading="lazy" alt="" class="image-3"></div>
<div class="w-col w-col-5"><img src="images/Bildschirmfoto-2023-03-17-um-19.49.23.png" loading="lazy" alt="" class="image-4"></div>
</div>
<div class="rich-text-block-5 w-richtext">
<ol start="2" role="list">
<li></li>
</ol>
<p>m:n-Kardinalitäten erfordern eine zusätzliche Tabelle für die Relation. (Das erstellen der Tabelle für die Entitätstypen (Hier: Schüler und Kurs) wurden schon in Regel 1 erklärt.) In der zusätzlichen Tabelle gibt es eine Spalte für jeden Primärschlüssel der beteiligten Entitätstypen. Primärschlüssel, die in einer „fremden“ Tabelle auftauchen, nennt man dort Fremdschlüssel.</p>
</div><img src="images/transofrmation2.png" loading="lazy" width="809" sizes="(max-width: 767px) 100vw, (max-width: 991px) 728px, 809px" srcset="images/transofrmation2-p-500.png 500w, images/transofrmation2.png 660w" alt="">
<div class="w-richtext">
<p>In diesem Beispiel besucht Schüler Nr. 23 in realität zwei Kurse.</p>
<p></p>
<ol start="3" role="list">
<li></li>
</ol>
</div>
<div class="w-richtext">
<p>Jede 1:n- und 1:1-Beziehung mit eigenen Attributen wird wie bei Regel 2 durch eine eigene Tabelle dargestellt. Hätten diese beiden “Hat” Beziehungen Attribute, würde die Regel greifen, sonst nicht.</p>
<p></p>
<ol start="4" role="list">
<li></li>
</ol>
<p>Bei 1:n-Kardinalitäten wird in die Tabelle der n-Kardinalität eine zusätzliche Spalte mit dem Primärschlüssel der 1-Kardinalität aufgenommen. Dies ist nun ein Fremdschlüssel in der zweiten Tabelle.</p>
</div><img src="images/schritt5.png" loading="lazy" width="1161" sizes="(max-width: 767px) 100vw, (max-width: 991px) 728px, 940px" srcset="images/schritt5-p-500.png 500w, images/schritt5.png 638w" alt="">
<div class="w-richtext">
<p></p>
<ol start="5" role="list">
<li></li>
</ol>
<p>Bei 1:1-Kardinalitäten fasst man beide Entitätstabellen zu einer Tabelle zusammen oder der Primärschlüssel des ersten Entitätstyps wird beim zweiten Entitätstyp Primär- und Fremdschlüssel zugleich. (Möchte man das nicht, kann man wahlweise wie in Regel 2 oder 4 vorgehen.)</p>
<p></p>
<ol start="6" role="list">
<li></li>
</ol>
<p>Sind Regel 4 und 5 nicht anwendbar, also in allen anderen Fällen (Auch bei Kardinalitäten mit 0...n) geht man wie in ERegel 2 vor und erstellt für die Relation eine neue Tabelle.</p>
</div>
</div>
<section class="footer-dark wf-section">
<div class="container-3">
<div class="footer-wrapper">
<a href="index.html" class="footer-brand w-inline-block">
<div class="text-block"><span class="text-span">S</span>(cratch)<span class="text-span-2">QL</span></div>
</a>
</div>
</div>
<div class="footer-divider"></div>
</section>
<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=640b3e76d7d422a8f3c9b5af" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="js/webflow.js" type="text/javascript"></script>
</body>
</html>