db:relationenmodell
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Vorhergehende ÜberarbeitungLetzte Überarbeitung | |||
— | db:relationenmodell [2016/03/02 08:52] – roehner | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== Relationenmodell ===== | ||
+ | ==== Abbildung eines ER-Diagramms auf Relationen ==== | ||
+ | Das ER-Diagramm stellt den Datenbankentwurf grafisch anschaulich dar, als Mensch kann man den Entwurf gut überblicken. Der Computer kommt mit dieser Form nicht so gut zurecht. Er hat seine Daten lieber in Schrift- als in Grafikform. Für die maschinelle Aufbereitung eines ER-Diagramms setzen wir die Entitäts- und Beziehungstypen deshalb in Schriftform um. | ||
+ | |||
+ | ===== Grundregel 1 für Entitätstypen ===== | ||
+ | <WRAP box round> | ||
+ | Entitätstypen werden als Relationen dargestellt, | ||
+ | Die Attribute des Primärschlüssels werden __unterstrichen__. | ||
+ | </ | ||
+ | |||
+ | <WRAP example round> | ||
+ | Beispiele für Relationen | ||
+ | <WRAP pre> | ||
+ | Schüler(__Schülernummer__, | ||
+ | Kurs(__Kursnummer__, | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | In relationalen Datenbanksystemen wie z.B. MySQL, Access oder Paradox werden auch Beziehungen auf Relationen abgebildet. Dabei gilt folgende | ||
+ | |||
+ | ===== Grundregel 2 für Beziehungstypen ===== | ||
+ | <WRAP box round> | ||
+ | Jede ER-Beziehung wird auf eine Relation abgebildet. Die Relation besteht aus den Primärschlüsseln | ||
+ | der beteiligten Entitätstypen sowie den Attributen der Beziehung. | ||
+ | </ | ||
+ | |||
+ | <WRAP example round> | ||
+ | Beispiel | ||
+ | |||
+ | Die ER-Beziehung //Schüler belegt Kurs// wird auf die Relation | ||
+ | <WRAP pre> | ||
+ | Belegt(↑__Schülernummer__, | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Der Primärschlüssel dieser Relation besteht aus den beiden Primärschlüsseln der Entitätstypen. Im Falle von 1:n bzw. 1: | ||
+ | |||
+ | ==== Optimierungen für 1: | ||
+ | Die Grundregel kann immer angewendet werden. Sie liefert unabhängig von der Kardinalität der Beziehung stets drei Relationen bei der Abbildung einer ER-Beziehung: | ||
+ | |||
+ | Es gibt viele Fälle, in denen man mit weniger Relationen auskommt. Diese Fälle können bei 1:1 und 1: | ||
+ | |||
+ | **Aufgabe 1**\\ | ||
+ | Jeder Oberstufenschüler hat einen Lehrer als Tutor. \\ | ||
+ | a) Stelle die Tutor-Beziehung zwischen Schüler und Lehrer als ER-Diagramm dar. \\ | ||
+ | b) Bilde gemäß der Grundregel auf Relationen ab. \\ | ||
+ | c) Veranschauliche die Relationen mit ausgefüllten Tabellen.\\ | ||
+ | d) Ermittle die Optionalität der Beziehung.\\ | ||
+ | e) Reduziere die Verteilung der gesamten Information auf zwei Tabellen.\\ | ||
+ | f) Vergleiche mit Aufgabe 2.\\ | ||
+ | [[Lösung von Aufgabe 1]] | ||
+ | |||
+ | **Aufgabe 2**\\ | ||
+ | Bücher können von Schülern ausgeliehen werden.\\ | ||
+ | a) Stelle die hat-ausgeliehen-Beziehung zwischen Schüler und Buch als ER-Diagramm dar. \\ | ||
+ | b) Bilde gemäß der Grundregel auf Relationen ab. \\ | ||
+ | c) Veranschauliche die Relationen mit ausgefüllten Tabellen.\\ | ||
+ | d) Ermittle die Optionalität der Beziehung.\\ | ||
+ | e) Reduziere die Verteilung der gesamten Information auf zwei Tabellen.\\ | ||
+ | f) Vergleiche mit Aufgabe 1.\\ | ||
+ | [[Lösung von Aufgabe 2]] | ||
+ | |||
+ | Die beiden 1: | ||
+ | |||
+ | ===== Optimierungsregel 1 für obligatorische 1: | ||
+ | <WRAP box round> | ||
+ | Eine auf der n-Seite obligatorische ER-Beziehung der Kardinalität 1:n kann auf zwei Relationen | ||
+ | abgebildet werden. Die Relation der n-Seite wird dazu um den Primärschlüssel der 1-Seite ergänzt. | ||
+ | </ | ||
+ | |||
+ | Die beiden Grundregeln liefern diese drei Relationen: | ||
+ | <WRAP pre> | ||
+ | Schüler(__SNr__, | ||
+ | Tutor(__Kürzel__, | ||
+ | hatTutor(↑__SNr__, | ||
+ | </ | ||
+ | |||
+ | Zur Optimierung integrieren wir den Primärschlüssel //Kürzel// der 1-Seite als Fremdschlüssel in die n-Seite. Dadurch wird eine Realtion eingespart. | ||
+ | <WRAP pre> | ||
+ | Schüler(__SNr__, | ||
+ | Tutor(__Kürzel__, | ||
+ | </ | ||
+ | |||
+ | Beim zweiten Beispiel treten Nullwerte auf, wenn man die Beziehungsrelation in die Relation der n-Seite integriert. | ||
+ | |||
+ | Bei einem nicht ausgeliehenden Buch bleibt der Fremdschlüssel // | ||
+ | Das Attribut hat dann den Wert //NULL//. Sind viele Bücher da und nur wenige Bücher ausgeliehen, | ||
+ | |||
+ | ===== Optimierungsregel 2 für optionale 1: | ||
+ | <WRAP box round> | ||
+ | Eine auf der n-Seite optionale ER-Beziehung der Kardinalität 1:n wird auf zwei Relationen | ||
+ | abgebildet, wenn die meisten Entitäten der n-Seite mit einer Entität der 1-Seite in Beziehung stehen. | ||
+ | Ansonsten wird die ER-Beziehung gemäß den beiden Grundregeln auf drei Relationen abgebildet. | ||
+ | </ | ||
+ | |||
+ | ===== Optimierungen für 1: | ||
+ | ===== Das Spind-Problem ===== | ||
+ | Wir betrachten die ER-Beziehung //Schüler hat Spind// | ||
+ | |||
+ | {{SchuelerHatSpind.gif}} | ||
+ | |||
+ | Nach der Grundregel wird dieses ER-Diagramm auf drei Relationen abgebildet: | ||
+ | <WRAP pre> | ||
+ | Schüler(__SNummer__, | ||
+ | hat(↑__SNummer__, | ||
+ | Spind(__Nummer__, | ||
+ | </ | ||
+ | |||
+ | Lässt sich das Relationenmodell vereinfachen? | ||
+ | |||
+ | **Fall A: Spinde an der Lichtenbergschule** | ||
+ | |||
+ | An der Lichtenbergschule können Spinde von Schülern gemietet werden. Die Vertragsfirma hat so viele Spinde aufgestellt, | ||
+ | |||
+ | <WRAP pre> | ||
+ | Schüler(__SNummer__, | ||
+ | Spind(__Nummer__, | ||
+ | </ | ||
+ | |||
+ | **Fall B: Spinde an einer amerikanischen Schule** | ||
+ | |||
+ | An einer amerikanischen Schule hat jeder Schüler einen Spind, wegen der ständigen Fluktuation in der Schülerpopulation gibt es einige Spinde in Reserve. | ||
+ | |||
+ | <WRAP pre> | ||
+ | Schüler(__SNummer__, | ||
+ | Spind(__Nummer__, | ||
+ | </ | ||
+ | |||
+ | **Fall C: Spinde beim Bund** | ||
+ | |||
+ | In einer Kaserne werden die Zimmer mit Rekruten voll belegt. Für jeden Rekruten gibt es genau einen Spind auf dem Zimmer. Die Rekrut-hat-Spind-Beziehung ist also auf beiden Seiten obligatorisch. In diesem Fall kommt man mit einer einzigen Relation aus: | ||
+ | <WRAP pre> | ||
+ | Rekrut(__SNummer__, | ||
+ | </ | ||
+ | |||
+ | Allerdings entspricht diese Relation nicht der [[Normalformen# | ||
+ | |||
+ | **Fall D: Spinde im Schwimmbad** | ||
+ | |||
+ | Gehen Schüler im Sommer ins Schwimmbad, so können sie einen Spind belegen. Bei kühler Witterung sind sicherlich nicht alle Spinde belegt. Die Schüler-Spind-Beziehung ist also auf beiden Seiten optional. Obwohl eine 1: | ||
+ | |||
+ | ===== Regel für 1: | ||
+ | <WRAP box round> | ||
+ | Eine ER-Beziehung der Kardinalität 1:1 kann auf **eine** Relation abgebildet werden, wenn sie auf | ||
+ | beiden Seiten obligatorisch ist. Ist sie nur auf einer Seite obligatorisch so kann die aus der | ||
+ | Grundregel kommende Beziehungsrelation in die Relation der obligatorischen Seite integriert werden. | ||
+ | Ist die Beziehung auf beiden Seiten optional, so wird eine Reduktion auf zwei Relationen nur dann | ||
+ | durchgeführt, | ||
+ | </ | ||
+ | |||
+ | ====Namenskonflikte==== | ||
+ | Wird zwecks Optimierung ein Primärschlüssel der Relation R< | ||
+ | wie ein Attribut der Relation R< | ||
+ | |||
+ | Im Beispiel Schulamt kommen diese beiden Relationen vor: | ||
+ | |||
+ | <WRAP pre> | ||
+ | Schule(__Name__, | ||
+ | Klasse(__Name__, | ||
+ | </ | ||
+ | |||
+ | Die 1: | ||
+ | in die Relation Klasse abgebildet, wodurch der Namenskonflikt bei den Name-Attributen entsteht. | ||
+ | |||
+ | <WRAP pre> | ||
+ | Schule(__Name__, | ||
+ | Klasse(__Name__, | ||
+ | </ | ||
+ | Ein Namenskonflikt wird dadurch aufgelöst, dass man den Fremdschlüssel geeignet umbenennt, | ||
+ | am besten durch Hinzunahme des Namens der Relation. Im Beispiel nennt man demgemäß | ||
+ | den Fremdschlüssel Name in // | ||
+ | |||
+ | <WRAP pre> | ||
+ | Schule(__Name__, | ||
+ | Klasse(__Name__, | ||
+ | </ | ||
+ | |||
+ | ====Aufgaben==== | ||
+ | Nachfolgend sind drei ER-Diagramme gegeben. | ||
+ | |||
+ | {{ERArztpraxis.png|ER-Diagramm Arztpraxis}}\\ | ||
+ | {{ERFussball.png|ER-Diagramm Fußball}}\\ | ||
+ | {{ERUnterricht.png|ER-Diagramm Unterricht}} | ||
+ | |||
+ | sowie ein {{ER2Relationen.odt|Dokument mit den drei ER-Diagrammen}} zum direkten Bearbeiten | ||
+ | |||
+ | a) Überführe die drei ER-Diagramme mit den beiden Grundregeln in nicht optimierte Relationenmodelle.\\ | ||
+ | b) Optimiere die drei Relationenmodelle aus a). | ||
db/relationenmodell.txt · Zuletzt geändert: 2017/05/16 20:05 von roehner