Просмотр исходного кода

SQL zur Erstinstallation erstellt

erdo 2 дней назад
Родитель
Сommit
d11ff01ac9
2 измененных файлов с 64 добавлено и 11 удалено
  1. 9 11
      README.md
  2. 55 0
      sql/install.sql

+ 9 - 11
README.md

@@ -17,19 +17,17 @@ Dieses gesamte Projekt wurde zu **100% von Gemini (KI-Modell von Google)** im Ra
 ## 🚀 Features
 - **Interaktives Dashboard:** Swiper-Carousel mit den neuesten Spielen und Highscores.
 - **Bestandsverwaltung:** Matrix-Ansicht (`besitz.php`), um zu tracken, welches Team welches Spiel besitzt, nicht besitzt oder bereits verkauft hat.
-- **Admin-Panel:** Passwortgeschützter Bereich zum Anlegen von Spielen, EAN-basiertem Bild-Download und Verwaltung von Spielertypen.
-- **Gesamtliste:** Sortierbare und filterbare Übersicht aller Spiele inklusive Bestwerten und Besitzstatus.
-- **Automatisierung:** Automatischer Download von Cover-Bildern über bereitgestellte URLs.
+- **Admin-Panel:** Passwortgeschützter Bereich zum Anlegen von Spielen, EAN-Erfassung und Verwaltung von Spielertypen.
+- **EAN-Unique-Schutz:** Die Datenbank verhindert automatisch doppelte Einträge desselben Spiels.
+- **Datenqualität:** Automatische visuelle Markierung (Gelb/Orange) für Spiele mit fehlenden Level-Daten.
+- **Gesamtliste:** Sortierbare Übersicht aller Spiele inklusive Bestwerten und Besitzstatus.
 
 ---
 
 ## 🛠 Installation
 
-1. **Datenbank vorbereiten:**
-   Erstelle eine MySQL-Datenbank und führe den folgenden SQL-Befehl aus, um die Tabellenstruktur anzulegen:
-   ```sql
-   CREATE TABLE game_typen (id INT AUTO_INCREMENT PRIMARY KEY, bezeichnung VARCHAR(100));
-   CREATE TABLE spiele (id INT AUTO_INCREMENT PRIMARY KEY, titel VARCHAR(255), typ_id INT, ean VARCHAR(50), level VARCHAR(50), bild_url VARCHAR(255), FOREIGN KEY (typ_id) REFERENCES game_typen(id));
-   CREATE TABLE spieler (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100));
-   CREATE TABLE scores (id INT AUTO_INCREMENT PRIMARY KEY, spieler_id INT, spiel_id INT, zeit INT, hilfe INT, sterne INT, FOREIGN KEY (spieler_id) REFERENCES spieler(id), FOREIGN KEY (spiel_id) REFERENCES spiele(id));
-   CREATE TABLE besitzstatus (spieler_id INT, spiel_id INT, status ENUM('besitzt', 'nicht besitzt', 'verkauft') DEFAULT 'nicht besitzt', PRIMARY KEY (spieler_id, spiel_id), FOREIGN KEY (spieler_id) REFERENCES spieler(id) ON DELETE CASCADE, FOREIGN KEY (spiel_id) REFERENCES spiele(id) ON DELETE CASCADE);
+### 1. Datenbank vorbereiten
+Erstelle eine MySQL-Datenbank und importiere die Tabellenstruktur direkt aus der bereitgestellten SQL-Datei im Repository:
+
+```bash
+mysql -u dein_user -p deine_db < sql/install.sql

+ 55 - 0
sql/install.sql

@@ -0,0 +1,55 @@
+-- 1. Tabelle für die Spiel-Typen (z.B. Klassik, Puzzle, Kids)
+CREATE TABLE IF NOT EXISTS `game_typen` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `bezeichnung` varchar(100) NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+-- 2. Tabelle für die Spieler / Teams
+CREATE TABLE IF NOT EXISTS `spieler` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `name` varchar(100) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `name` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+-- 3. Haupttabelle für die Spiele
+CREATE TABLE IF NOT EXISTS `spiele` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `titel` varchar(255) NOT NULL,
+  `typ_id` int(11) DEFAULT NULL,
+  `ean` varchar(50) NOT NULL,
+  `level` enum('Unknown','Einsteiger','Fortgeschrittene','Profi') DEFAULT 'Unknown',
+  `bild_url` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `ean_unique` (`ean`),
+  KEY `fk_typ` (`typ_id`),
+  CONSTRAINT `fk_typ` FOREIGN KEY (`typ_id`) REFERENCES `game_typen` (`id`) ON DELETE SET NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+-- 4. Tabelle für die Highscores
+CREATE TABLE IF NOT EXISTS `scores` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `spiel_id` int(11) NOT NULL,
+  `spieler_id` int(11) NOT NULL,
+  `zeit` int(11) NOT NULL COMMENT 'Zeit in Minuten',
+  `hilfe` int(11) DEFAULT 0 COMMENT 'Anzahl der Hilfekarten',
+  `sterne` int(11) DEFAULT NULL COMMENT 'Bewertung 1-10',
+  `gespielt_am` timestamp NOT NULL DEFAULT current_timestamp(),
+  PRIMARY KEY (`id`),
+  KEY `fk_spiel_score` (`spiel_id`),
+  KEY `fk_spieler_score` (`spieler_id`),
+  CONSTRAINT `fk_spiel_score` FOREIGN KEY (`spiel_id`) REFERENCES `spiele` (`id`) ON DELETE CASCADE,
+  CONSTRAINT `fk_spieler_score` FOREIGN KEY (`spieler_id`) REFERENCES `spieler` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+-- 5. Tabelle für den Besitzstatus
+CREATE TABLE IF NOT EXISTS `besitzstatus` (
+  `spieler_id` int(11) NOT NULL,
+  `spiel_id` int(11) NOT NULL,
+  `status` enum('besitzt','nicht besitzt','verkauft') DEFAULT 'nicht besitzt',
+  PRIMARY KEY (`spieler_id`,`spiel_id`),
+  KEY `fk_spiel_besitz` (`spiel_id`),
+  CONSTRAINT `fk_spiel_besitz` FOREIGN KEY (`spiel_id`) REFERENCES `spiele` (`id`) ON DELETE CASCADE,
+  CONSTRAINT `fk_spieler_besitz` FOREIGN KEY (`spieler_id`) REFERENCES `spieler` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;