Die Seite wurde neu angelegt: „'''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 Ko…“
 
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Das Datenbankschema''' ist die konkrete Implementierungsstruktur einer [[Datenbank]], die festlegt, wie [[Daten]] organisiert und gespeichert werden.
'''Das Datenbankschema''' ist die konkrete Implementierungsstruktur einer [[Datenbank]], die festlegt, wie [[Daten]] organisiert und gespeichert werden.
== Einführung ==
== 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 [[Attribut]]e sowie zur Sicherstellung der Konsistenz die [[Datenkonsistenz|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.
[[Datei:ERM-Softwarentwicklungsprozess.png|mini]]
[[Datei:ERM-Einordnung.png|mini]]
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 [[Attribut]]e sowie zur Sicherstellung der Konsistenz die [[Datenkonsistenz|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 [[Datenkonsistenz#Referenzielle_Integrität|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 [[Structured_Query_Language|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!
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 [[Structured_Query_Language|SQL]]-Code angepasst werden. Alle [[SQL]]-Befehle der [[Structured_Query_Language#Data_Manipulating_Language|Data Manipulating Language (DML)]], die durch das DBMS an die [[Datenbank]] geschickt werden, werden nun überprüft, ob sie die [[Datenkonsistenz|Integritätsbedingungen]] des aktuellen Schemas verletzten. Wenn ja, werden die [[Structured_Query_Language|SQL]]-Befehle abgelehnt!


== Arten von Datenbankschemata ==
== Arten von Datenbankschemata ==
Zeile 24: Zeile 26:
'''Datentypen''': Definition der zulässigen Wertebereiche
'''Datentypen''': Definition der zulässigen Wertebereiche


'''Primärschlüssel''': Eindeutige Identifikation von Datensätzen
'''[[Primärschlüssel]]''': Eindeutige Identifikation von Datensätzen


'''Fremdschlüssel''': Definition von Beziehungen zwischen Tabellen
'''Fremdschlüssel''': Definition von Beziehungen zwischen Tabellen
Zeile 54: Zeile 56:


'''Dokumentation''': Selbst-dokumentierende Struktur
'''Dokumentation''': Selbst-dokumentierende Struktur
==Beispiel Friseursalon==
[[Datei:SchemaInMySQL.png|mini|ERM zum Friseursalon]]
[[Datei:DBMS-MySQL.png|mini|Darstellung in der MySQL-Workbench]]
Wir erstellen eine Datenbank in mittels [[Structured_Query_Language|SQL]]-Befehlen. Auf der rechten Seiten ist das Schema in der MySQL Workbench sowie das Schema als [[Entity-Relationship-Modell|ERM]] dargestellt.
<syntaxhighlight lang="sql">
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
);
</syntaxhighlight>


[[Kategorie:Datenbanken]]
[[Kategorie:Datenbanken]]
[[Kategorie:FI_I_SDM]]
[[Kategorie:FI_I_SDM]]
[[Kategorie:FI_I_TP1]]