Zum Inhalt

Datenbankmodell implementieren

ERM Modell E-SPort Turnier:

ER-Diagramm, das die Beziehungen zwischen den Entitäten Spiele, Teams, Spieler und Matches darstellt:

400. Welcome to PlantUML! You can start with a simple UML Diagram like: Bob->Alice: Hello Or class Example You will find more information about PlantUML syntax onhttps://plantuml.com (Details by typinglicensekeyword) PlantUML version 1.2026.3beta5 / f567ad8 [2026-03-18 20:20:26 UTC][From string (line 2) ] @startuml!include https://raw.githubusercontent.com/MikhailKravets/mkdocs_puml/master/themes/default/light.pumlCannot open URL
400. Welcome to PlantUML! You can start with a simple UML Diagram like: Bob->Alice: Hello Or class Example You will find more information about PlantUML syntax onhttps://plantuml.com (Details by typinglicensekeyword) PlantUML version 1.2026.3beta5 / f567ad8 [2026-03-18 20:20:26 UTC][From string (line 2) ] @startuml!include https://raw.githubusercontent.com/MikhailKravets/mkdocs_puml/master/themes/default/dark.pumlCannot open URL

Constraints:

  1. Referenzielle Integrität
  2. Spieler.TeamID → Teams.TeamID (Fremdschlüssel)
  3. Matches.SpielID → Spiele.SpielID (Fremdschlüssel)
  4. Matches.Team1ID, Matches.Team2ID → Teams.TeamID (Fremdschlüssel)
  5. NOT NULL
  6. Spiele: SpielID, Spielname, Genre
  7. Teams: TeamID, Teamname, Gründungsjahr
  8. Spieler: SpielerID, Name, TeamID
  9. Matches: MatchID, SpielID, Team1ID, Team2ID, MatchDatum, Ergebnis
  10. UNIQUE
  11. Spiele: SpielID
  12. Teams: TeamID, Teamname
  13. Spieler: SpielerID
  14. Matches: MatchID
  15. CHECK
  16. Teams.Gründungsjahr muss kleiner oder gleich dem aktuellen Jahr sein: Gründungsjahr <= YEAR(CURRENT_DATE)
  17. Matches.Ergebnis darf nur gültige Formate enthalten, z. B. CHECK (Ergebnis REGEXP '^[0-9]+-[0-9]+$')
  18. DEFAULT
  19. Für Spieler.Rolle könnte ein Standardwert wie „Unbekannt“ gesetzt werden: DEFAULT 'Unbekannt'.

Das Diagramm zeigt die Beziehungen zwischen den Entitäten und berücksichtigt die notwendigen Constraints.

SQL-Code mit zufällig generierten Daten:

CREATE DATABASE Spiel;

USE Spiel;

-- Tabelle: Spiele
CREATE TABLE Spiele (
    SpielID INT PRIMARY KEY,
    Spielname VARCHAR(255) NOT NULL,
    Genre VARCHAR(100) NOT NULL
);

-- Tabelle: Teams
CREATE TABLE Teams (
    TeamID INT PRIMARY KEY,
    Teamname VARCHAR(255) NOT NULL UNIQUE,
    Gruendungsjahr INT NOT NULL
);

-- Tabelle: Spieler
CREATE TABLE Spieler (
    SpielerID INT PRIMARY KEY,
    Name VARCHAR(255) NOT NULL,
    Rolle VARCHAR(100) DEFAULT 'Unbekannt',
    TeamID INT,
    FOREIGN KEY (TeamID) REFERENCES Teams(TeamID)
);

-- Tabelle: Matches
CREATE TABLE Matches2 (
    MatchID INT PRIMARY KEY,
    MatchDatum DATE NOT NULL,
    Ergebnis VARCHAR(100) CHECK (Ergebnis REGEXP '^[0-9]+-[0-9]+$'),
    SpielID INT NOT NULL,
    Team1ID INT NOT NULL,
    Team2ID INT NOT NULL,
    FOREIGN KEY (SpielID) REFERENCES Spiele(SpielID),
    FOREIGN KEY (Team1ID) REFERENCES Teams(TeamID),
    FOREIGN KEY (Team2ID) REFERENCES Teams(TeamID),
    CHECK (Team1ID <> Team2ID) -- Ein Team kann nicht gegen sich selbst spielen
);

-- Zufällige Daten für die Tabelle Spiele
INSERT INTO Spiele (SpielID, Spielname, Genre)
VALUES
(1, 'Fortnite', 'Battle Royale'),
(2, 'League of Legends', 'MOBA'),
(3, 'Call of Duty', 'Shooter'),
(4, 'Dota 2', 'MOBA'),
(5, 'Counter-Strike', 'Shooter');

-- Zufällige Daten für die Tabelle Teams (Gründungsjahr muss <= aktuelles Jahr)
INSERT INTO Teams (TeamID, Teamname, Gruendungsjahr)
VALUES
(1, 'Team Alpha', 2015),
(2, 'Team Beta', 2018),
(3, 'Team Gamma', 2020),
(4, 'Team Delta', 2017),
(5, 'Team Epsilon', 2019);

-- Zufällige Daten für die Tabelle Spieler (alle Spieler zu einem Team zugeordnet)
INSERT INTO Spieler (SpielerID, Name, Rolle, TeamID)
VALUES
(1, 'Max Mustermann', 'Angreifer', 1),
(2, 'John Doe', 'Verteidiger', 1),
(3, 'Jane Smith', 'Angreifer', 2),
(4, 'Chris Johnson', 'Unterstützer', 2),
(5, 'Paul Brown', 'Angreifer', 3),
(6, 'Emma White', 'Verteidiger', 4),
(7, 'Lucas Black', 'Unterstützer', 5);

-- Zufällige Daten für die Tabelle Matches
-- Ergebnis im Format "Zahl-Zahl" und Team1ID <> Team2ID
INSERT INTO Matches2 (MatchID, MatchDatum, Ergebnis, SpielID, Team1ID, Team2ID)
VALUES
(1, '2024-11-25', '2-1', 1, 1, 2),
(2, '2024-11-26', '1-3', 2, 3, 4),
(3, '2024-11-27', '0-0', 3, 5, 1),
(4, '2024-11-28', '2-2', 4, 4, 2),
(5, '2024-11-29', '1-0', 5, 3, 4);

Spieler Tabelle

Spiel Tabelle

Matches tabelle

Team Tabelle

Alle Tabellen

Überprüfung der Daten:

  1. Spiele: Alle Felder sind korrekt, SpielID ist einzigartig, Spielname und Genre sind nicht NULL. ✅
  2. Teams: Alle TeamIDs sind einzigartig, Teamname ist einzigartig und nicht NULL, Gruendungsjahr ist ≤ 2024. ✅
  3. Spieler: SpielerID ist einzigartig, Name ist nicht NULL, Rolle hat den Defaultwert "Unbekannt", TeamID verweist auf gültige Teams. ✅
  4. Matches: Alle Felder sind korrekt, MatchDatum ist in der Vergangenheit oder Gegenwart, Ergebnis entspricht dem Format "Zahl-Zahl", Team1ID und Team2ID sind unterschiedliche Teams und verweisen auf gültige Teams. ✅

Alle Daten entsprechen den festgelegten Constraints.

SQL Reverse-Engineering

Schlüsselwörter erklärt:

Schlüsselwort Erklärung
ANSICHT Eine logische Präsentation einer SQL-Abfrage, die als Tabelle dient.
BUCHID Die Identifikationsnummer eines Buches im Bibliothekssystem.
INDEX Eine speicheroptimierte Struktur zum schnellen Abrufen von Daten.
AUSLEIHEN Tabelle, die alle Informationen zu geliehenen Büchern enthält.
INDIZIERUNG Methode zur Verbesserung der Abfragegeschwindigkeit durch Vorsortierung.
PROZEDUR Ein geordneter Satz von Regeln und Routinen zur Datenverarbeitung.
TABLESPACE Datenbankdatei, die physische Tabellen und Indizes speichert.
PRIMÄRSCHLÜSSEL Eine eindeutige Kennzeichnung für eine Zeile in einer Tabelle.
DATENBANKSCHEMA Logische Struktur einer Datenbank, beschreibt Organisation und Beziehungen.
FREMDSCHLÜSSEL Eine Spalte, die auf den Primärschlüssel einer anderen Tabelle verweist.

Weitere DDL Begriffe:

Erstellung SQL-Code anhand der anforderungen:

Tabellen

1.Bücher
  • BuchID (Primärschlüssel)

  • Titel

  • AutorID (Fremdschlüssel)

  • ISBN

  • Preis

2.Autoren
  • AutorID (Primärschlüssel)

  • Name

3.Kunden
  • KundenID (Primärschlüssel)

  • Name

  • Email

4.Bestellungen
  • BestellID (Primärschlüssel)

  • KundenID (Fremdschlüssel)

  • BuchID (Fremdschlüssel)

  • Bestelldatum

Code:
CREATE DATABASE Buchhandlung;

USE Buchhandlung;

-- Tabelle: Autoren
CREATE TABLE Autoren (
    AutorID INT PRIMARY KEY,
    Name VARCHAR(255) NOT NULL
);

-- Tabelle: Bücher
CREATE TABLE Bücher (
    BuchID INT PRIMARY KEY,
    Titel VARCHAR(255) NOT NULL,
    AutorID INT,
    ISBN VARCHAR(20) UNIQUE,
    Preis DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (AutorID) REFERENCES Autoren(AutorID)
);

-- Tabelle: Kunden
CREATE TABLE Kunden (
    KundenID INT PRIMARY KEY,
    Name VARCHAR(255) NOT NULL,
    Email VARCHAR(255) UNIQUE NOT NULL
);

-- Tabelle: Bestellungen
CREATE TABLE Bestellungen (
    BestellID INT PRIMARY KEY,
    KundenID INT,
    BuchID INT,
    Bestelldatum DATE NOT NULL,
    FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID),
    FOREIGN KEY (BuchID) REFERENCES Bücher(BuchID)
);


USE Buchhandlung;

-- 1. Hinzufügen des Attributs "Verlag" zur Tabelle "Bücher"
ALTER TABLE Bücher
ADD COLUMN Verlag VARCHAR(255);

-- 2. Entfernen der Tabelle "Autoren"
DROP TABLE IF EXISTS Autoren;

-- 3. Hinzufügen des Attributs "Telefonnummer" zur Tabelle "Kunden"
ALTER TABLE Kunden
ADD COLUMN Telefonnummer VARCHAR(20);

Erklärung

  1. ALTER TABLE Bücher: Fügt die Spalte Verlag zu der bestehenden Bücher-Tabelle hinzu. VARCHAR(255) wird verwendet, um den Verlagsnamen zu speichern.
  2. DROP TABLE IF EXISTS Autoren: Löscht die Tabelle Autoren, falls sie existiert.
  3. ALTER TABLE Kunden: Fügt die Spalte Telefonnummer zur bestehenden Kunden-Tabelle hinzu, um die Telefonnummer des Kunden zu speichern.

SQL zu HTML mit http://hilite.me/

Reverse Engineering Bibliothek: