Datenbankmodell implementieren
ERM Modell E-SPort Turnier:¶
ER-Diagramm, das die Beziehungen zwischen den Entitäten Spiele, Teams, Spieler und Matches darstellt:
400.
400.
Constraints:¶
- Referenzielle Integrität
- Spieler.TeamID → Teams.TeamID (Fremdschlüssel)
- Matches.SpielID → Spiele.SpielID (Fremdschlüssel)
- Matches.Team1ID, Matches.Team2ID → Teams.TeamID (Fremdschlüssel)
- NOT NULL
- Spiele:
SpielID,Spielname,Genre - Teams:
TeamID,Teamname,Gründungsjahr - Spieler:
SpielerID,Name,TeamID - Matches:
MatchID,SpielID,Team1ID,Team2ID,MatchDatum,Ergebnis - UNIQUE
- Spiele:
SpielID - Teams:
TeamID,Teamname - Spieler:
SpielerID - Matches:
MatchID - CHECK
- Teams.Gründungsjahr muss kleiner oder gleich dem aktuellen Jahr sein:
Gründungsjahr <= YEAR(CURRENT_DATE) - Matches.Ergebnis darf nur gültige Formate enthalten, z. B.
CHECK (Ergebnis REGEXP '^[0-9]+-[0-9]+$') - DEFAULT
- Für
Spieler.Rollekö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:
- Spiele: Alle Felder sind korrekt,
SpielIDist einzigartig,SpielnameundGenresind nicht NULL. ✅ - Teams: Alle
TeamIDs sind einzigartig,Teamnameist einzigartig und nicht NULL,Gruendungsjahrist ≤ 2024. ✅ - Spieler:
SpielerIDist einzigartig,Nameist nicht NULL,Rollehat den Defaultwert "Unbekannt",TeamIDverweist auf gültige Teams. ✅ - Matches: Alle Felder sind korrekt,
MatchDatumist in der Vergangenheit oder Gegenwart,Ergebnisentspricht dem Format "Zahl-Zahl",Team1IDundTeam2IDsind 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
- ALTER TABLE Bücher: Fügt die Spalte
Verlagzu der bestehendenBücher-Tabelle hinzu.VARCHAR(255)wird verwendet, um den Verlagsnamen zu speichern. - DROP TABLE IF EXISTS Autoren: Löscht die Tabelle
Autoren, falls sie existiert. - ALTER TABLE Kunden: Fügt die Spalte
Telefonnummerzur bestehendenKunden-Tabelle hinzu, um die Telefonnummer des Kunden zu speichern.







