Schema

Aus FLBK-Wiki
Version vom 26. November 2025, 11:01 Uhr von Flbkwikiadmin (Diskussion | Beiträge) (Komponenten eines Datenbankschemas)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Das Datenbankschema ist die konkrete Implementierungsstruktur einer Datenbank, die festlegt, wie Daten organisiert und gespeichert werden.

Einführung

Das Schema (auch Datenbankschema Schema genannt) legt fest, welche Daten in einer Datenbank in welcher Form gespeichert werden können und welche Beziehungen zwischen den Daten bestehen. Das Schema legt auch die Tabellen und deren Attribute sowie zur Sicherstellung der Konsistenz die Integritätsbedingungen fest. Hierzu gehören insbesondere die Festlegung von Wertebereichen einzelner Attribute und von Fremdschlüsselbeziehungen sowie Existenz- und Eindeutigkeitsbedingungen wie zum Beispiel die Referenzielle Integrität. Dieses Modell wird physisch in der Datenbank angelegt und ist der letzte Schritt des Entwicklungsprozesses einer Datenbank.

Die Entwicklung eines Schemas beginnt mit der fachlichen Modellierung eines semantischen Modells ohne technische Details. Dieses Modell wird dann in den dargestellten Schritten meist vollautomatisiert in das physische Schema der Datenbank überführt. Im schlechtesten Falle muss der SQL-Code angepasst werden. Alle SQL-Befehle der Data Manipulating Language (DML), die durch das DBMS an die Datenbank geschickt werden, werden nun überprüft, ob sie die Integritätsbedingungen des aktuellen Schemas verletzten. Wenn ja, werden die SQL-Befehle abgelehnt!

Arten von Datenbankschemata

Konzeptionelles Schema

Das konzeptionelle Schema beschreibt die logische Struktur der gesamten Datenbank aus fachlicher Sicht, unabhängig von der technischen Implementierung. Es definiert Entitäten, Attribute und Beziehungen.

Logisches Schema

Das logische Schema beschreibt die Datenstruktur in einem bestimmten Datenmodell (z.B. relational, hierarchisch, netzwerkartig) und ist bereits näher an der technischen Umsetzung.

Physisches Schema

Das physische Schema beschreibt die konkrete Implementierung auf dem Speichermedium, inklusive Indexstrukturen, Partitionierung und Speicherparametern.

Komponenten eines Datenbankschemas

Tabellen: Strukturen zur Speicherung von Daten

Attribute/Spalten: Eigenschaften der Entitäten

Datentypen: Definition der zulässigen Wertebereiche

Primärschlüssel: Eindeutige Identifikation von Datensätzen

Fremdschlüssel: Definition von Beziehungen zwischen Tabellen

Indizes: Beschleunigung von Datenabfragen

Integritätsbedingungen: Regeln zur Sicherstellung der Datenkonsistenz

Entwicklung eines Datenbankschemas

Die Entwicklung folgt typischerweise diesen Schritten:

  • Anforderungsanalyse
  • Konzeptionelles Design (ER-Modell)
  • Logisches Design
  • Normalisierung
  • Physisches Design
  • Implementierung

Vorteile eines definierten Schemas

Datenkonsistenz: Durch Integritätsbedingungen

Datenintegrität: Schutz vor inkonsistenten Daten

Performance: Optimierte Abfragen durch Indizes

Wartbarkeit: Klare Struktur erleichtert Änderungen

Dokumentation: Selbst-dokumentierende Struktur

Beispiel Friseursalon

ERM zum Friseursalon
Darstellung in der MySQL-Workbench

Wir erstellen eine Datenbank in mittels SQL-Befehlen. Auf der rechten Seiten ist das Schema in der MySQL Workbench sowie das Schema als ERM dargestellt.

CREATE SCHEMA `friseursalon`;

CREATE TABLE `friseursalon`.`salon` (
    `idsalon` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(45) NOT NULL,
    PRIMARY KEY (`idsalon`)
);

CREATE TABLE `friseursalon`.`mitarbeiter` (
    `idmitarbeiter` INT NOT NULL AUTO_INCREMENT,
    `nachname` VARCHAR(45) NOT NULL,
    `vorname` VARCHAR(45) NOT NULL,
    `idsalon` INT NOT NULL,
    PRIMARY KEY (`idmitarbeiter`),
    INDEX `fksalon` (`idsalon` ASC),
    CONSTRAINT `fksalon` FOREIGN KEY (`idsalon`) 
        REFERENCES `friseursalon`.`salon` (`idsalon`) 
        ON DELETE NO ACTION 
        ON UPDATE NO ACTION
);

CREATE TABLE `friseursalon`.`kunde` (
    `idkunde` INT NOT NULL AUTO_INCREMENT,
    `nachname` VARCHAR(45) NOT NULL,
    `vorname` VARCHAR(45) NOT NULL,
    PRIMARY KEY (`idkunde`)
);

CREATE TABLE `friseursalon`.`termin` (
    `idtermin` INT NOT NULL AUTO_INCREMENT,
    `datum` VARCHAR(45) NULL,
    `rechnungsbetrag` DOUBLE NULL,
    `idmitarbeiter` INT NOT NULL,
    `idkunde` INT NOT NULL,
    PRIMARY KEY (`idtermin`),
    INDEX `fkmitarbeiter` (`idmitarbeiter` ASC),
    INDEX `fkkunde` (`idkunde` ASC),
    CONSTRAINT `fkmitarbeiter` FOREIGN KEY (`idmitarbeiter`) 
        REFERENCES `friseursalon`.`mitarbeiter` (`idmitarbeiter`) 
        ON DELETE NO ACTION 
        ON UPDATE NO ACTION,
    CONSTRAINT `fkkunde` FOREIGN KEY (`idkunde`) 
        REFERENCES `friseursalon`.`kunde` (`idkunde`) 
        ON DELETE NO ACTION 
        ON UPDATE NO ACTION
);