Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
q2:das_relationenmodell [2017/07/14 09:47] – admin03 | q2:das_relationenmodell [2017/07/14 18:54] (aktuell) – admin03 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ===== Relationenmodell |
+ | ==== Abbildung eines ER-Diagramms auf Relationen ==== | ||
+ | Im letzten Theorieteil wurde das ER-Modell als Hilfsmittel zum Erstellen einer Abstraktion der Realität vorgestellt und an Beispielen erläutert. Leider lassen sich so erstellte Konzepte nicht so ohne weiteres auf einem Rechner implementieren. Die klassischen DBMS-Systeme, | ||
- | Zwischen den einzelnen Entity-Typen können Beziehungen | + | Eine Relationale Datenbank besteht aus einer oder mehreren Tabellen |
- | {{ : | + | ^Kurs-Nummer^Kurs-Thema^Jahrgangsstufe^Typ^ |
+ | |11| Mechanik I|E1 |GK| | ||
+ | |12| Mechanik I|E1 |GK| | ||
+ | |3| Datenbanken|Q2 |GK| | ||
+ | |25| Short Stories|Q1| LK| | ||
+ | Dabei wird einschränkend vorausgesetzt, | ||
- | Allerdings sind die zweiwertigen Beziehungen die weitaus wichtigsten. Bei ihnen unterscheidet man zwischen | + | Jedes Attribut in einer Tabelle besitzt einen bestimmten vorbestimmten Wertebereich, |
- | <WRAP round info> | + | Wie im ER-Modell definiert man Schlüssel. Ein Attribut oder eine Kombination von Attributen ist dann ein Schlüssel, wenn es keine zwei Entities in der Tabelle mit denselben Werten der Kombination gibt. Einer davon wird als Primärschlüssel ausgewählt. Mit Hilfe solcher Schlüssel werden Beziehungen zwischen verschiedenen Tabellen hergestellt. So könnten wir unsere Tabelle für Kurse um das Attribut Lehrer-Nr. er¬weitern, |
- | (1) 1:1-Beziehungen: | + | |
- | Schulbsp.: Schüler - erhält - Abiturzeugnis. Jeder Schüler | + | ^Lehrer-Nr. ^Name ^Vorname ^Titel^ |
+ | |421 |Müller| Manfred |StR| | ||
+ | |665 |Maier |Marlene |OStR| | ||
+ | |||
+ | |||
+ | Damit haben wir gleichzeitig die 1:n - Beziehung | ||
+ | |||
+ | Jetzt findet sich auch eine Lösung für das Problem mit dem Mehrfachattribut Vorher besuchte Schule. Es muss eine eigene Tabelle für Schulen erstellt werden, die eine Beziehung über Schüler-Nr. zur Tabelle LSchüler schafft. | ||
+ | |||
+ | ^Schüler-Nr. ^Schule^ | ||
+ | |421 |Grundschule Fuldatal| | ||
+ | |421 |Gesamtschule Geistal| | ||
+ | |665 |Integrierte Gesamtschule Obersuhl| | ||
+ | |665 |Gesamtschule Obersberg| | ||
+ | |||
+ | Einziger Schlüssel für diese Tabelle ist die Kombination Lehrer-Nr. - Fach. | ||
+ | |||
+ | Hier kann auch eine Lösung sinnvoll sein, die eine Tabelle Schule ohne Schülernummern verwendet, insbesondere, | ||
+ | |||
+ | Man erkennt, dass sich das ER-Bsp. in das R-Modell umsetzen lässt. Wir haben schon Mehrfach- und zusammengesetzte Attribute erledigt und 1:n - Beziehungen eingebaut | ||
+ | |||
+ | ^Schüler-Nr. ^Kurs-Nr.^ Note ^Fehlstunden^ | ||
+ | |7 |12| 12 |0| | ||
+ | |8 |11 |4 |14| | ||
+ | |9 |11 |9 |2| | ||
+ | |||
+ | Wie man sieht, lassen sich hier auch ohne Probleme die Attribute der Beziehung unterbringen. Schlüssel in dieser Tabelle ist die Kombination Schüler - Kurs-Nr.. Man spricht häufig von einer Zwischentabelle. | ||
+ | |||
+ | Wir versuchen jetzt, die allgemeinen Prinzipien einer Umsetzung vom ER-Modell ins R-Modell anzugeben: | ||
+ | |||
+ | |||
+ | |||
+ | =====1 Grundregel: Jeder Entity-Typ wird eine eigene Tabelle.===== | ||
+ | |||
+ | <WRAP box round> | ||
+ | Entitätstypen werden als Relationen dargestellt, | ||
+ | Die Attribute des Primärschlüssels werden __unterstrichen__. | ||
</ | </ | ||
- | <WRAP round info> | + | |
- | (2) 1: | + | < |
- | Schulbsp.: Lehrer - ist Tutor von - Schüler. Jeder Schüler hat nur einen Tutor, aber jeder Lehrer, der Tutor ist, hat mehrere Schüler in seiner Tutorengruppe. | + | Beispiele für Relationen |
- | n: | + | <WRAP pre> |
+ | Schüler(__Schülernummer__, Name, Vorname, StrasseNr, PLZOrt, Geburtsdatum)\\ | ||
+ | Kurs(__Kursnummer__, | ||
</ | </ | ||
- | <WRAP round info> | ||
- | (3) n: | ||
- | Schulbsp.: Schüler - besucht - Kurs. Jeder Schüler besucht mehrere Kurse, und Kurse werden von mehreren Schülern besucht. | ||
</ | </ | ||
- | In der grafischen Realisierung des ER-Modells werden die Komplexitäten an die Linien, die die Beziehung darstellen, geschrieben. | ||
- | Die Entscheidung über die Kardinalität einer Richtung der Beziehung wird über die sogenannte **KaMe-Frage** | + | In relationalen Datenbanksystemen wie z.B. MySQL, Access oder Paradox werden auch Beziehungen auf Relationen abgebildet. Dabei gilt folgende |
- | getroffen. | + | |
+ | ===== Grundregel 2 für Beziehungstypen ===== | ||
<WRAP box round> | <WRAP box round> | ||
- | ==KaMe-Frage== | + | 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. 1:1 - und 1:n - Beziehungen lassen sich allerdings durch zusätzliche Attribute in einer Tabelle erfassen. Dabei wird der Schlüssel der 1-Tabelle ein zusätzliches Attribut in der n-Tabelle. (vgl: Optimierung) | ||
+ | </ | ||
+ | |||
+ | <WRAP example round> | ||
+ | Beispiel | ||
- | **Kann eine** Entität des Typs A **mit mehreren** Entitäten des Typs B in Beziehung | + | Die ER-Beziehung |
- | | + | <WRAP pre> |
- | | + | Belegt(↑__Schülernummer__, |
+ | </ | ||
</ | </ | ||
- | Die Komplexität lässt sich noch weiter spezifizieren, | + | Der Primärschlüssel dieser Relation besteht aus den beiden Primärschlüsseln der Entitätstypen. Im Falle von 1:n bzw. 1:1-Beziehungen |
- | Manchmal wird diese Unterscheidung durch die Angabe von Intervallen gekennzeichnet, | + | ==== Optimierungen |
- | Man spricht auch von Kardinalitäten (für 1:1, n:1, usw) und von Optionalitäten | + | Die Grundregel kann immer angewendet werden. Sie liefert unabhängig von der Kardinalität der Beziehung stets drei Relationen |
- | Auch bei Attributen wird diese Unterscheidung manchmal durchgeführt. So könnte | + | |
- | ====== Mehrfache | + | Es gibt viele Fälle, in denen man mit weniger Relationen auskommt. Diese Fälle können bei 1:1 und 1:n-Beziehungen |
+ | Die beiden 1: | ||
- | Beziehungen | + | ===== Optimierungsregel 1 für obligatorische 1:n-Beziehungen |
+ | <WRAP box round> | ||
+ | Eine auf der n-Seite obligatorische ER-Beziehung | ||
+ | abgebildet werden. Die Relation der n-Seite wird dazu um den Primärschlüssel der 1-Seite ergänzt. | ||
+ | </ | ||
- | {{ :q2: | + | Die beiden Grundregeln liefern diese drei Relationen: |
+ | <WRAP pre> | ||
+ | Schüler(__SNr__, | ||
+ | Tutor(__Kürzel__, | ||
+ | hatTutor(↑__SNr__, | ||
+ | </ | ||
- | Eine Beziehung kann auch zwischen mehr als Typen bestehen. Wir betrachten | + | Zur Optimierung integrieren wir den Primärschlüssel //Kürzel// der 1-Seite |
+ | <WRAP pre> | ||
+ | Schüler(__SNr__, Nachname, Vorname, StraßeNr, PLZ, Ort, ↑Kürzel)\\ | ||
+ | Tutor(__Kürzel__, | ||
+ | </ | ||
- | {{ : | + | Beim zweiten Beispiel treten Nullwerte auf, wenn man die Beziehungsrelation in die Relation der n-Seite integriert. |
- | Ein Entitytyp kann auch mehrfach an einer Beziehung teilnehmen. Man spricht | + | 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, | ||
- | {{ :q2:errekursion.png?400 |}} | + | ===== Optimierungsregel 2 für optionale 1:n-Beziehungen ===== |
+ | <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// | ||
- | ====== Optionalität von Beziehungen====== | + | {{SchuelerHatSpind.gif}} |
- | Die Komplexität lässt sich noch weiter spezifieren, | + | |
- | **MuMi-Frage** | + | Nach der Grundregel wird dieses ER-Diagramm auf drei Relationen abgebildet: |
+ | <WRAP pre> | ||
+ | Schüler(__SNummer__, | ||
+ | hat(↑__SNummer__, | ||
+ | Spind(__Nummer__, | ||
+ | </ | ||
- | Die Entscheidung über die Optionalität einer Richtung der Beziehung wird über die sogenannte **MuMi-Frage** | + | Lässt sich das Relationenmodell vereinfachen? |
- | getroffen. | + | |
+ | **Fall A: Spinde an der Modellschuleschule** | ||
+ | |||
+ | An der Modellschuleschule 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> | <WRAP box round> | ||
- | **Muss eine** | + | Eine ER-Beziehung der Kardinalität 1:1 kann auf **eine** |
- | Ja | + | beiden Seiten obligatorisch ist. Ist sie nur auf einer Seite obligatorisch so kann die aus der |
- | Nein | + | Grundregel kommende Beziehungsrelation |
+ | Ist die Beziehung | ||
+ | durchgeführt, wenn die meisten Entitäten der einen Seite mit der der anderen Seite verbunden sind. | ||
</ | </ | ||
+ | ====Namenskonflikte==== | ||
+ | Wird zwecks Optimierung ein Primärschlüssel der Relation R< | ||
+ | wie ein Attribut der Relation R< | ||
- | Manchmal wird diese Unterscheidung durch die Angabe von Intervallen gekennzeichnet, | + | Im Beispiel Schulamt kommen |
- | Man spricht auch von Kardinalitäten (für 1:1, n:1, usw) und von Optionalitäten | + | |
- | Auch bei Attributen wird diese Unterscheidung manchmal durchgeführt. So könnte bei Adressen die Angabe von Straße, PLZ und Ort zwingend vorgeschrieben sein, die Angabe einer Telefonnummer jedoch optional sein. Man kennzeichnet solche optionalen Attribute manchmal mit einem Kreis an die Verbindungslinie zwischen Entity und Attribut. | + | |
+ | <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 // |