<sub class="descriptionSection">02-01-2025 04:02:pm // #Tag // [[Programmierung]]</sub>
____
## Datenbank-Entwurf
Der Datenbank Entwurf besteht aus diesen Abschnitten:
- Anforderungs - / Informationsanalyse
- Entity-Relationship Modellierung
- Überführung ins relationale Datenmodell
- Erstellung der Datenbank
- Einfügen der Produktiven Daten
### Anforderungs - / Informationsanalyse
- Festlegung der Anwendungen
- Festlegung der Benutzergruppen
- Ermittlung der Datenobjekte mit ihren Eigenschaften und Beziehungen
- i.e was soll gespeichert werden? / wie sollen die Daten bearbeitet werden?
### Konzeptionelle Entwurf
- Erstellung von Entity Relationship Diagrammen
- Darstellung von Entitäten mit ihren Attributen
- Darstellung der Beziehungen zwischen Entitäten mit ihren Kardinalitäten
- Festlegung der Abfragen bzw. Views
### Logischer Entwurf
Beim Logischen Entwurf wird das E-R-Diagramm in ein relationales Datenmodell transformiert, unter beachtung der Transformations-Regeln (Normalformen)
Beim transformieren, werden auch die Redundanzen entfernt
### Implementierung (physischer Entwurf)
Die Datenbank und Skripte, die die Tabellen und Beziehungen darstellen, werden erstellt. Falls daten vom alten ins neue system übernommen werden sollen, müssen diese konvertiert und eingefügt werden.
### Betrieb und Wartung der Datenbank
Die Pflege der Daten erfolgt i. d. Regel durch Anwendungsprogramme (i.e Webfrontends, Nativ-Apps, etc.). Bei Änderungswünschen müssen die Datenstrukturen erweitert oder angepasst werden. Sicherungen müssen auch durchgeführt werden.
## ER-Diagramme
Ein ER-Diagramm ist eine theoretische Darstellung einer Datenbank. In diesem Diagramm wird dargestellt wie eine Datenbank geplant wird. Sie **kann** redundanzen und n:m verbindungen enthalten.
Die normalen bestandteile eines ER-Diagamms sind:
- Entität (Entity)
- Eindeutig identifizierbare Einheit z.B ein Individuum oder ein reales Objekt
- Entitätsmenge (Entity-Set)
- Fasst alle Entitäten zusammen die durch gleiche Eigenschaften aber nicht notwendigerweise aber durch gleiche Eigenschafts-Werte charakterisiert werden.
- Entitäts-Typ (Entity-Type)
- Zusammenfassung gleichartiger Entitäten unter einem Namen
- Beziehung, Assoziation (Relationship)
- Eine Assoziation ist eine Beziehung von einer Entität zu einer anderen
- Beziehungsmenge
- Fasst alle Beziehungen gleicher Art zusammen
- Beziehungs-Typ
- Fasst alle Bezihungen unter einer gleichen Bezeichnung zusammen. Ein Beziehungs-Typ wird durch eine Raute dargestellt.
- Eigenschaften oder Attribute
- Attribute beschreiben Eigenschaften von Entitäten genauer. Sie haben unter-eigenschaften wie:
- Attributs-Name
- Attributs-Wert
- Attribut-Wertebereich
- Attribute werden in Elipsen dargestellt
### Beziehungskardinalitäten
Es gibt verschiedene Kardinalitäten von Beziehungen. Zum Beispiel kann man abbilden, dass eine Entität mit anderen Entitäten aus einer anderen Menge maximal eine Beziehung haben darf (1:1).
Es gibt diese Kardinalitäten
- 1 : 1
- eins zu eins, maximal eine Verbindung pro Entität
- 1:n / n:1
- eins zu viele, eine entität kann unendlich viele beziehungen haben, allerdings dürfen bezogene entitäten nur eine verbindung haben
- n:m
- viele zu viele, unendlich viele entitäten können unendlich viele beziehungen haben
### Spezielle Assoziationen
#### Ternäre und n-äre beziehungen
In der Regel verbinden Beziehungen zwei Entitätstypen, allerdings können auch mehr verbunden werden:
![[Pasted image 20250103124757.png]]Die jeweiligen Entitätsmengen haben dann eine 1:1 beziehung, währen sie zu allen anderen eine n:m beziehung haben
#### Rekursive beziehungen
Eine Entität kann sich auf sich selbst beziehen:
![[Pasted image 20250103124841.png]]
#### Aggregation oder Part-Of-Beziehung
Eine Aggregation liegt vor, wenn ein Entitätstyp aus anderen Entitätstypen zusammengesetzt wird. Z.B ein Computer, der aus Prozessor, Laufwerk und Gehäuse besteht:
![[Pasted image 20250103124944.png]]
## Das Relationaledatenmodell
Das Relationale Datenmodell ist die basis von relationalen Datenbanken (Mysql, MariaDB, Postgresql, etc.)
Eine Relationale Datenbank enhält eine Menge von Tabellen (mathematisch: Relationen). In diesen Tabellen werden logisch zusammenhängende Daten gespeichert.
### Tabelle (Relation)
Tabelle = Relation. Eine Tabelle hat einen Namen und besteht aus Zeilen und Spalten, spaltennamen entsprechen den Attributen, die gespeichert werden. In jeder Zeile einer Tabelle wird ein Datensatz gespeichert. Ein Datensatz besteht aus Informationen, die zusammen gehören.
### Grapische Darstellung von Tabellen im Datenmodell
- Tabellen werden als Rechteck dargestellt.
- Rechteck wird in zwei Teile geteilt: Name und Attribute
Beispiel:
![[Pasted image 20250105200450.png]]
### Darstellung einer Tabelle in Mengenschreibweise
Das ist praktisch, da sie schnell geschrieben ist, und mainly im Typescript type format geschrieben wird. Beispiel:
```any
Mitglied:{[M_Nr: integer, Vorname:string, Nachname:string, Geburtstag:date]}
```
### Attribute und Tupel
In Tabellen werden die Spalten **Attribute** oder **Felder** genannt. Die Zeilen der Tabelle werden als Datensätze oder **Tupel** bezeichnet. Der Aufbau aller Datensätze einer Tabelle ist gleich!
Beispiel: Hier ist jede Zeile ein Datensatz oder Tupel, jede Spalte ein Attribut oder Feld:![[Pasted image 20250105200110.png]]
Andere einschränkung von Attributen:
- Ein Attribut hat **einen** Datentyp, jeder Wert des Attributs in der Tabelle muss diesem Typen entsprechen (Die Datenbank validiert das schon beim einfügen und wirft fehler, falls der Typ falsch ist)
- Ein Attribut kann leer sein (es sei denn es ist expliziert definiert das ein Wert vorhanden sein **muss**), ein leerer Tupel wird symbolisch als NULL dargestellt, in wirklichkeit ist es aber ein Indikator bit das von der Datenbank gesetzt wurde um zu checken ob ein Wert eingetragen wrude
### Mögliche Datensätze in einer Tabelle
Um herauszufinden, wieviele Tupel es maximal geben kann, werden alle möglichen Werte (die domäne des Types) für jedes Attribut des Tupels miteinander multipliziert:
```
Mitglied⊆integer x string x string x date
```
## Normalisieren von Entwürfen
Das Ziel vom Normalisieren einer Datenbank ist es **alle** Redundanzen zu entfernen (zumindest bei uns). Wir müssen die ersten 3 Normalformen wissen:
### Erste Normalform: Transformieren in Atomare Werte
Definition: Eine Relation ist in der ersten Normalform, wenn die Werte der Attribute elementar (atomar) sind und **keine** Wiederholungsgruppen enhalten.
Atomare Werte = Elementare Informatione, die nicht mehr tailbar sind.
Das bedeutet: Dinge wie Aufzählungen, Namen, usw, müssen aufgeteilt werden. Sie müssen nicht direkt in eine andere Tabelle gefügt werden (tatsächlich sollen sie das auch garnicht in der ersten Normalform), sondern pro wert wird einfach eine neue Spalte der Tabelle hinzugefügt:
![[Pasted image 20250105201459.png]]
### Zweite Normalform: Jedes Nichtschlüsselattribut vom gesamten Schlüssel abhängig
Definition: Eine Relation ist genau dann in der zweiten Normalform, wenn die 1NF erfüllt ist und jedes Nichtschlüsselattribut vom gesamten Schlüssel voll funktional abhängig ist. Die Schlüsselfelder sind im Folgenden gelb dargestellt.
Das bedeutet: Jedes Attribut einer Tabelle muss so vom jeweiligen Schlüssel der Tabelle, das es nicht alleine darstehen könnte (z.B: ein Namen kann nicht ohne eine ID stehen, da es mehrere Personen mit dem selben namen geben könnte)
![[Pasted image 20250105202311.png]]
### Dritte Normalform: Entfernen von logischen Feldern
Definition: Eine Relation (Tabelle) ist in der dritten Normalform, wenn die 2NF erfüllt ist und alle Nichtschlüsselattribute voneinander funktional unabhängig sind bzw. kein Nichtschlüsselattribut vom Schlüssel transitiv abhängt.
Das bedeutet: Jedes Attribut, das **nicht** durch logik herausgefunden werden kann, wird entfernt. Ein beispiel wäre ein Geburtsjahr: Wenn man das Geburtsdatum abspeichert, muss nicht auch noch das Alter als Integer abgespeichert werden, weil ja Apps das Alter ausrechnen könnten.
![[Pasted image 20250105202743.png]]