# Daten analysieren und modellieren (Modul 162)

## Grundbegriffe: Nachricht, Information, Daten, Wissen
* **Nachricht**: Rohdaten oder Signale, z.B. Messwerte oder Sprache, die von einer Quelle übertragen werden.  
* **Information**: Daten, die verarbeitet und mit Bedeutung versehen wurden. Information erweitert das Wissen des Empfängers. Man definiert Information oft als den Anteil einer Nachricht, der neu ist (ohne Redundanz).  
* **Wissen**: Die Gesamtheit von Informationen, Erfahrungen und Einsichten, die eine Person hat. Wissen entsteht, wenn man Informationen versteht und verknüpft.  
* **Redundanz**: Wiederholung gleicher Daten in einer Nachricht. Sie vermindert den Neuheitswert. Geringere Redundanz bedeutet in der Regel mehr (neue) Information.  

## Strukturierte vs. unstrukturierte Daten
Daten können **strukturiert** (in klar definierten Feldern) oder **unstrukturiert** (z.B. freier Text, Bilder, Audio) vorliegen. Strukturierte Daten sind in Tabellen aus Zeilen und Spalten organisiert, z.B. in Excel-Tabellen oder relationalen Datenbanken. Dadurch können sie leicht ausgewertet werden. Unstrukturierte Daten sind nicht in einem festen Schema; sie erfordern oft Spezialwerkzeuge zur Analyse (z.B. Text-Mining bei Textdaten).

## Datenaufbau und -aussage
Eine **relationale Tabelle** besteht aus Zeilen (Datensätzen, auch *Tupel* genannt) und Spalten (Attributen). Jedes Tupel repräsentiert ein Objekt oder Ereignis (z.B. einen Kunden oder eine Bestellung). Die Spalten enthalten die Eigenschaften des Objekts (z.B. Name, Preis, Menge). Die Werte in den Tabellenzellen machen Aussagen über reale Entitäten. Durch Auswertungen und Verknüpfungen der Spaltenwerte gewinnt man Information.

## Datenanalyse in Excel: Sortieren und Filtern
Mit Excel kann man Daten schnell analysieren, indem man **sortiert** und **filtert**:
- **Sortieren**: Markiere den Datenbereich und wähle **Daten → Sortieren**. Du kannst nach einer oder mehreren Spalten sortieren (z.B. zuerst nach Warengruppe, dann nach Warenart, schließlich nach Artikel).
- **AutoFilter**: Aktiviere über **Daten → Filter** den AutoFilter. In den Spaltenköpfen erscheinen Dropdown-Pfeile. Dort kann man Kriterien setzen. Beispiel:  
  - Filtern nach bestimmten Werten: Wähle in der Spalte *Warenart* die Werte *Fisch* und *Wurst* aus, um nur diese anzuzeigen (logisches ODER).  
  - Bedingte Filter: Wähle in der Spalte *Warengruppe* zwei Werte (z.B. *Frischkost* und *Kühlwaren*) und in der Spalte *vorrätige Ware* die Regel **Größer als 200**, um nur die relevanten Artikel anzuzeigen.  
- **Top-N Auswahl**: Um die Top 5 (oder Top 10) Werte anzuzeigen, verwendet man im AutoFilter den Befehl *Zahlenfilter → Top-10* (oder Top 5) und gibt die gewünschte Anzahl an. Damit sieht man z.B. die 5 höchsten Lagerwerte.  
- Nach Abschluss speichere die Datei (z.B. *Waren-E.xlsx*). Über den Filter-Button **Alle anzeigen** kannst du alle Zeilen wieder einblenden. Schließe die Datei ohne weitere Änderungen.

## Datenvisualisierung in Excel
Excel unterstützt verschiedene Diagrammtypen zur Visualisierung:
- **Säulen- und Balkendiagramme**: Gut zum Vergleich von Werten. Markiere deine Daten und wähle unter **Einfügen → Säulendiagramm** oder **Balkendiagramm**. Ein *gestapeltes Säulendiagramm* zeigt die Aufteilung einer Gesamtsumme (z.B. Umsatz nach Produktgruppen).  
- **Verbunddiagramm (Kombinationsdiagramm)**: Kombiniert z.B. Säulen und Linien. Wähle **Einfügen → Kombinationsdiagramm**. Ordne einer Datenreihe die Säulen zu und einer anderen eine Linie. Das ist nützlich, um z.B. Rohdaten als Säulen und einen Durchschnitt oder Trend als Linie darzustellen.  
- **Diagramm anpassen**: Man kann Datenreihen hinzufügen oder entfernen, Achsenbeschriftungen formatieren, Legenden verschieben und Achsen umschalten (Zeilen-/Spaltenansicht). Ebenso können Gitterlinien und Wertebeschriftungen ein- oder ausgeblendet werden.

## Entity-Relationship-Modell (ERM)
Ein **Entity-Relationship-Modell** (ERM) bildet konzeptionell Datenstrukturen ab:
- **Entität**: Ein eindeutig identifizierbares Objekt oder Sachverhalt (z.B. *Kunde*, *Artikel*, *Auftrag*). In Diagrammen oft als Rechteck gezeichnet (Chen-Notation) oder als Tabelle mit Überschrift und Werten (Crow's-Foot).  
- **Attribut**: Eine Eigenschaft einer Entität (z.B. Name, Preis, Geburtsdatum). In Chen-Notation als Ellipse gezeichnet, im Crow's-Foot-ERM oft in der Tabelle notiert.  
- **Beziehung** (*Relationship*): Verknüpfung zwischen Entitäten (z.B. ein *Kunde* *legt einen Auftrag an*). Beziehungen werden durch Linien dargestellt.  
- **Kardinalitäten**: Geben das Zahlenverhältnis der Beziehung an: **1:1** (z.B. Person – Personaldaten), **1:N** (z.B. eine Abteilung hat viele Mitarbeiter) oder **N:M** (z.B. ein Student belegt mehrere Kurse und ein Kurs hat mehrere Studierende).  
  In Crow's-Foot-ERM nutzt man spezielle Pfeilsymbole (*Krähenfüße*) an den Linien, um N-Beziehungen anzuzeigen.

## Logisches, relationales Datenmodell
Das ER-Modell wird in ein **relationales Modell** überführt:
- Jede Entität wird zu einer **Tabelle (Relation)**. Die Attribute der Entität werden zu Spalten dieser Tabelle.  
- Jeder Datensatz (Tupel) füllt eine Zeile der Tabelle mit konkreten Werten.  
- **Relationenschreibweise**:  
  - Ohne Typen: `Kunde(KundenID, Name, Stadt, Primärschlüssel(KundenID))` (Tabellenname(Kundennummer, Spalte1, ..., Primärschlüssel(n))).  
  - Mit Datentypen (z.B. MySQL):  
    ```sql
    CREATE TABLE Kunde (
      KundenID INT PRIMARY KEY,
      Name VARCHAR(50),
      Stadt VARCHAR(30)
    );
    ```  
    Hier ist **KundenID** der Primärschlüssel (PK), der jede Zeile eindeutig identifiziert.

## Schlüssel und Beziehungen
- **Primärschlüssel (PK)**: Schlüsselfeld in einer Tabelle, das jede Zeile eindeutig identifiziert (z.B. Kundennummer, Matrikelnummer). Ein PK darf nicht NULL sein und muss für jeden Datensatz verschieden sein.  
- **Fremdschlüssel (FK)**: Ein Attribut in einer Tabelle, das auf den Primärschlüssel einer anderen Tabelle verweist. Damit wird eine Beziehung zwischen Tabellen hergestellt und referenzielle Integrität gesichert. Beispiel: In der Tabelle `Auftrag` kann `KundenID` ein FK sein, der auf `Kunde(KundenID)` zeigt.  
- **Beziehungstypen**: In relationalen Tabellen werden 1:N-Beziehungen umgesetzt, indem man den Fremdschlüssel in der „N“-Tabelle ablegt. N:M-Beziehungen benötigen eine zusätzliche Zwischentabelle mit je zwei Fremdschlüsseln (z.B. `Student_Kurs(StudentID, KursID)`).

## Datentypen in relationalen Datenbanken
Jede Spalte erhält einen Datentyp, der den erlaubten Wertebereich definiert:
- **Ganzzahlen**: `TINYINT` (0–255, 1 Byte), `SMALLINT` (-32.768 bis 32.767, 2 Byte), `INT` (~-2,1 Mrd. bis +2,1 Mrd., 4 Byte), `BIGINT` (sehr große Ganzzahlen, 8 Byte).  
- **Dezimal/Zahl**: `DECIMAL(p,s)` für exakte Festkommazahlen (z.B. `DECIMAL(10,2)` für Währungen), `FLOAT`/`DOUBLE` für Fließkommazahlen (für ungefähre Werte).  
- **Zeichenketten**: `CHAR(n)` (feste Länge, mit Leerzeichen aufgefüllt), `VARCHAR(n)` (variable Länge). Beispiel: `VARCHAR(100)` für Text bis 100 Zeichen.  
- **Datum und Zeit**: `DATE` (Datum, z.B. 2023-06-15, benötigt 3 Bytes), `DATETIME` (Datum + Uhrzeit, 8 Bytes), `TIME` (nur Zeit, 3 Bytes).  
- **Weitere**: `TEXT`, `BLOB` für sehr lange Texte oder Binärdaten, `BOOLEAN` (manchmal als TINYINT(1) implementiert) für Wahr/Falsch.

## SQL-Grundlagen (Sprachschichten)
- **DDL (Data Definition Language)**: Befehle zur Definition von Datenstrukturen (Tabellen, Indizes, Schemata). Beispiel: `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`.  
- **DML (Data Manipulation Language)**: Befehle zur Datenmanipulation. Beispiel: `INSERT INTO`, `UPDATE`, `DELETE`.  
- **DQL (Data Query Language)**: Befehle zur Datenabfrage. Hauptbefehl: `SELECT`. Beispiel: `SELECT Name, Stadt FROM Kunde WHERE KundenID = 1;` liest Name und Stadt des Kunden mit ID 1.  
- **DCL (Data Control Language)**: Befehle für Zugriffsrechte. Beispiele: `GRANT`, `REVOKE`.

## Normalisierung
Die Normalisierung reduziert Redundanz und verhindert Datenanomalien. Man führt sie schrittweise durch:
1. **0. Normalform (0NF)**: Ausgangszustand ohne besondere Regel. Tabellen können wiederholende Gruppen enthalten oder mehrere Werte in einer Zelle (z.B. Liste von Projekten).  
2. **1. Normalform (1NF)**: Jedes Feld enthält nur einen Wert (Atomarität). Wiederholende Gruppen werden aufgelöst, indem für jede wiederholte Einheit eine eigene Zeile entsteht.  
3. **2. Normalform (2NF)**: Die Tabelle ist in 1NF. Zudem muss jedes Nicht-Schlüssel-Attribut vom gesamten Primärschlüssel voll funktional abhängen. Bei zusammengesetzten Schlüsseln dürfen keine Attribute nur von einem Teil des Schlüssels abhängen.  
4. **3. Normalform (3NF)**: Die Tabelle ist in 2NF. Außerdem dürfen keine transitiven Abhängigkeiten bestehen: Kein Nicht-Schlüssel-Attribut darf von einem anderen Nicht-Schlüssel-Attribut abhängig sein. Alle Attribute hängen nur noch direkt vom Primärschlüssel ab.  

**Beispiel-Anomalien**: Ohne Normalisierung kann es zu Einfüge-, Änderungs- oder Lösch-Anomalien kommen (z.B. mehrfach gespeicherte Daten, die inkonsistent werden).

## Beispiel: Normalisierung einer Tabelle
Ausgangstabelle **PERSONAL_PROJEKT** (nicht in 1NF):

```text
P# | P-Name | Abt# | Abt-Name  | Pj#         | Pj-Name | Pj-Std
-----------------------------------------------------------
101| Müller | 1    | Motoren   | 11, 12      | A, B    | 60, 40
102| Meier  | 2    | Karosserie| 13          | C       | 100
103| Krause | 2    | Karosserie| 11, 12, 13  | A, B, C | 20, 50, 30
```

- Diese Tabelle ist nicht in 1NF, weil in einer Zeile mehrere Projekt-Einträge vorkommen (z.B. 11 und 12 in einer Zeile).  
1. **1. NF**: Werte aufteilen – für jedes Projekt eine eigene Zeile eintragen. Mitarbeiter 101 hat dann zwei Zeilen, mit Projekten 11 und 12.  
2. **2. NF**: Themen aufteilen – wir erstellen separate Tabellen:  
   - `PERSONAL(P#, P-Name, Abt#)`,  
   - `PROJEKT(Pj#, Pj-Name)`,  
   - `PERSONAL_PROJEKT(P#, Pj#, Pj-Std)` (Verknüpfungstabelle für N:M),  
   - `ABTEILUNG(Abt#, Abt-Name)`.  
   Dadurch hängt jedes Attribut vollständig von seinem Primärschlüssel ab.  
3. **3. NF**: In dieser Aufteilung sind schon alle Nicht-Schlüssel-Attribute direkt vom Schlüssel abhängig. Es gibt keine weiteren (transitiven) Abhängigkeiten, daher ist 3NF erfüllt.

## Zusammenfassung
- **Strukturierte Daten** (Tabellen) sind einfach auszuwerten; relationale Datenbanken bieten mit Tabellen und SQL eine standardisierte Grundlage.  
- **ER-Modelle** (z.B. in MySQL Workbench) visualisieren Entitäten und Beziehungen. Sie dienen als konzeptionelle Planung, bevor man eine physische Datenbank erstellt.  
- **Primärschlüssel (PK)** sichern die Eindeutigkeit von Datensätzen. **Fremdschlüssel (FK)** verknüpfen Tabellen und sorgen für referenzielle Integrität.  
- **Datentypen** definieren, welche Art von Daten in einer Spalte stehen kann (z.B. Ganzzahlen, Zeichenketten, Datum). Die richtige Wahl unterstützt die Datenqualität.  
- **SQL-Grundlagen**: Man definiert Tabellen mit DDL (`CREATE TABLE`), pflegt Daten mit DML (`INSERT`, `UPDATE`, `DELETE`) und fragt sie mit DQL (`SELECT`) ab.  
- **Normalisierung (bis 3NF)**: Daten werden so aufgeteilt, dass jede Tabelle nur einen Themenbereich abbildet. Dies vermeidet Redundanz und Daten-Anomalien (z.B. Inkonsistenzen).