owned this note
owned this note
Published
Linked with GitHub
# Entity-Relationship-Modell (ERM)
Zum Einstieg werden im Folgenden einige Begriffe rund um das Thema erläutert. [^ERM]
[^ERM]: Definition der Grundbegriffe in Anlehnung an den Wikipedia-Artikel [Entity-Relationship-Modell](https://de.wikipedia.org/wiki/Entity-Relationship-Modell)
## Grundbegriffe
Entity-Relationship-Modell
~ ist ein Modell zur Darstellung von Objekten (Entitäten) mit Eigenschaften (Attribute) und der Beziehungen (Relationship) zwischen den Objekten.
Darstellung der Elemente:
```graphviz
graph ERM {
layout=neato
node [shape=box]
Entity [pos="-2,0!"]
node [shape=ellipse]
attribute [pos="0,0!"]
node [shape=diamond fontsize=8]
Relationship [pos="2,0!"]
}
```
Entität (engl. Entity)
~ individuell identifizierbares Objekt der Wirklichkeit
:::info
**Beispiel:** Ein Autor, Ein Buch, Ein Verlag
:::
```graphviz
graph ER_Entity {
layout=neato
node [shape=box]
Autor [pos="-2,0!"]
Verlag [pos="2,0!"]
Buch [pos="0,0!"]
}
```
Attribut (engl. attribute)
~ Eigenschaften einer Entität (oder Beziehung)
:::info
**Beispiel:** Alter eines Autors, Name eines Autors, Name eines Buchs
:::
```graphviz
graph ERM_attribute {
layout=neato
node [shape=box]
Autor [pos="0,0!"]
node [shape=ellipse]
Alter [pos="0,1!"]
Name [pos="1,1!"]
Autor -- {Name , Alter }
}
```
Beziehung (engl. Realtionship)
~ Zusammenhang zwischen Entitäten
~ z. B. Ein Buch hat ein Titelbild, Ein Verlag verlegt Bücher
Kardinalität
~ beschreibt wie viele Beziehungen zwischen den Entitäten bestehen:
* 1:1-Beziehung
z. B. Ein Buch hat ein Titelbild
```graphviz
graph ERM_Relationship_1_1 {
layout=neato
node [shape=box]
Buch [pos="0,2!"]
Titelbild [pos="3,2!"]
node [shape=diamond fontsize=8]
hat [pos="1.5,2!"]
Buch -- hat [label="1"]
Titelbild -- hat [label="1"]
}
```
* 1:n-Beziehung
z. B. Ein Verlag verlegt n Bücher
```graphviz
graph ERM_Relationship_1_n {
layout=neato
node [shape=box]
Verlag [pos="0,2!"]
Buch [pos="3,2!"]
node [shape=diamond fontsize=8]
verlegt [pos="1.5,2!"]
Verlag -- verlegt [label="1"]
Buch -- verlegt [label="n"]
}
```
* n:m-Beziehung
z. B. Viele (n) Autoren schreiben viele (m) Bücher
```graphviz
graph ERM_Relationship_n_m {
layout=neato
node [shape=box]
Autor [pos="0,2!"]
Buch [pos="3,2!"]
node [shape=diamond fontsize=8]
schreibt [pos="1.5,2!"]
Autor -- schreibt [label="n"]
Buch -- schreibt [label="m"]
}
```
## ER-Modell in Tabellen
* Für jeden Entitätstyp wird eine Tabelle definiert.
* Für jeden N:M Beziehungstyp wid eine Tabelle benötigt, die die Attribute des Beziehungstyps und je einen Fremschlüssel für die beteiligten Entitätstypen enthält.
* 1:N Beziehungstypen werden umgesetzt, indem der Primärschlüssel der 1-Seite in die Tabelle der N-Seite als Fremdschlüssel eingetragen wird.
* Bei 1:1 Beziehungstypen gibt es mehrere Möglichkeiten.
* die einfachste Möglichkeit : Beide Entitätstypen werden zu einer Relation zusammengefasst
* Umsetzung mit 2 Tabellen. Den Primärschlüssel der einen Tabelle als Fremdschlüssel in die andere Tabelle eingetragen
```graphviz
graph ERM_attribute {
layout=neato
node [shape=box]
Kunde [pos="1,3!"]
node [shape=ellipse]
Vorname [pos="0,4!"]
Nachname [pos="0,2!"]
Land [pos="3,4!"]
KundenNr [pos="3,2!"]
Kunde -- {Vorname , Nachname, Land, KundenNr }
}
```
(Beispiel RM)
```graphviz
graph ERM_attribute {
rankdir="LR"
node [shape=box]
Kunde
node [shape=ellipse]
Vorname
Nachname
Land
KundenNr [label = <<u>KundenNr</u>>]
Kunde -- {Vorname , Nachname, Land, KundenNr }
}
```
Tabelle Kunde
| KundenNr | Vorname | Nachname | Land |
| -------- | -------- | -------- |------------- |
| 0001 | Person1 | Person1 | Deutschland |
| 0002 | Person2 | Person2 | Deutschland |
#### N:M - Beziehung
```graphviz
graph ERM_Relationship_1_n {
layout=neato
node [shape=box]
Mitarbeiter [pos="-3,3!"]
Kunde [pos="3,3!"]
node [shape=ellipse]
MitarbeiterNr [pos="-3,4!"]
Name [pos="-1,4!"]
node [shape=ellipse]
KundenNr [pos="1,4!"]
KundenName [pos="3,4!"]
node [shape=diamond fontsize=8]
betreut [pos="0,3!"]
Mitarbeiter -- betreut [label="N"]
Kunde -- betreut [label="M"]
Mitarbeiter -- {MitarbeiterNr, Name}
Kunde -- {KundenNr, KundenName}
}
```
Tabelle Mitarbeiter
| MitarbeiterNr | Name | ...|
| ------------- | ------------|----|
| 01 | Mitarbeiter1| |
| 02 | Mitarbeiter2| |
Tabelle Kunde
| KundeNr | Name | ...|
| ------------- | ------------|----|
| 0001 | Kunde1 | |
| 0002 | Kunde2 | |
Tabelle Kundenbetreuung
| MitarbeiterNr | KundeNr | ...|
| ------------- | ------------|----|
| 02 |0001 | |
| 01 |0002 | |
| 02 |0002 | |
| 23 |0963 | |
| ... | | |
MitarbeiterNr und KundeNr bilden den Primärschlüssel der Tabelle Kundenbetreuung
#### 1:N - Beziehung
```graphviz
graph ERM_Relationship_1_n {
layout=neato
node [shape=box]
Kunde [pos="-3,3!"]
Auftrag [pos="3,3!"]
node [shape=ellipse]
KundenNr [pos="-3,4!"]
Name [pos="-1,4!"]
node [shape=ellipse]
AuftragNr [pos="1,4!"]
Auftragsdatum [pos="3,4!"]
node [shape=diamond fontsize=8]
erteilt [pos="0,3!"]
Kunde -- erteilt [label="1"]
Auftrag -- erteilt [label="N"]
Kunde -- {KundenNr, Name}
Auftrag -- {AuftragNr, Auftragsdatum}
}
```
Tabelle Kunde (1-Seite)
| KundeNr | Name | ...|
| ------------- | ------------|----|
| 0001 | Kunde1 | |
| 0002 | Kunde2 | |
Tabelle Auftrag (N-Seite)
| AuftragNr| KundenNr | Auftragsdatum |...|
| -------- | -------- | --------------|---|
| 00000001 | 0001 | 2.1.2023 | |
| 00000002 | 0001 | 3.1.2023 | |
| 00000001 | 0002 | 3.1.2023 | |
| 00000002 | 0007 | 5.1.2002 | |
Auftrag enthält als Fremdschlüssel den Primärschlüssel von Kunde
#### 1:1 - Beziehung
```graphviz
graph ERM_Relationship_1_n {
layout=neato
node [shape=box]
Kunde [pos="-3,3!"]
Telefonnummer [pos="3,3!"]
node [shape=ellipse]
KundenNr [pos="-3,4!"]
Name [pos="-1,4!"]
node [shape=diamond fontsize=8]
hat [pos="0,3!"]
Kunde -- hat [label="1"]
Kunde -- {KundenNr, Name}
Telefonnummer -- hat [label="1"]
}
```
Die informationen können in einer Tabelle zusammengefasst werden:
#### Tabelle Kunde
| KundeNr | Name | ...|Telefonnummer |
| ------------- | ------------|----|------------- |
| 0001 | Kunde1 | |04461/123456 |
| 0002 | Kunde2 | |04421/654321 |
| ... | | | |
## ER-Diagramm
Aufgabe:
Entwerfen Sie ein Entity-Relationship-Diagramm für den folgenden Sachverhalt:
```graphviz
graph ER {
layout=neato
node [shape=box]
Autor [pos="0,2!"]
Verlag [pos="3,0!"]
Buch [pos="3,2!"]
node [shape=ellipse]
ISBN [pos="4.5,1.5!"]
Alter
{ node [label="Name"]
verlag_name [pos="4.5,0.15!"]
autor_name [pos="0.1,0.8!"]
buch_name [pos="4.5,2.2!"]
}
node [shape=diamond fontsize=8]
verfasst [pos="1.5,2!"]
verlegt [pos="3,1!"]
Autor -- {autor_name, Alter }
Autor -- verfasst [label="n"]
Buch -- {buch_name ISBN }
Buch -- verfasst [label="m"]
Buch -- verlegt [label="n"]
Verlag -- verlag_name
Verlag -- verlegt [label="1"]
}
```
---
---
**TODO**
* [ ] Aufgabe für ERM erstellen
* [ ] Überführen in Tabellen
* [ ] PK muss unterstrichen sein
---
---
Tipps:
* Entitäten sind immer in der Einzahl zu schreiben.
* Beziehungen können auch Attribute haben
## relationale Datenbank
* Relation > Tabelle
* Tupel > Zeile
* Attribut > Spalte
Weiteres
* [Martin-Notation](https://de.wikipedia.org/wiki/Martin-Notation)
* Veweis auf SQL
:::info
Texte sind in Anlehnung an den Wikipedia-Artikel zum [ER-Modell](https://de.wikipedia.org/wiki/Entity-Relationship-Modell#Beschreibung_der_Modellkomponenten) entstanden.
:::