Datenbank

SLAED CMS verwendet eine relationale MySQL/MariaDB-Datenbank, um alle Systeminformationen zu speichern. Die Datenbankstruktur ist mit Blick auf Leistung, Sicherheit und Skalierbarkeit entworfen.

Allgemeine Architektur

Alle Tabellen in der Datenbank verwenden ein gemeinsames Präfix, das während der Systeminstallation festgelegt wird. Standardmäßig ist das Präfix sl_.

Tabellenpräfix

Das Tabellenpräfix ermöglicht es mehreren SLAED CMS-Installationen, in derselben Datenbank zu koexistieren. Dies ist besonders nützlich für Entwicklungs- und Testumgebungen.

Haupttabellen

Die SLAED CMS-Datenbank besteht aus mehreren Kerntabellen, die Systeminformationen speichern:

Tabellenname Beschreibung
sl_modules Informationen zu Systemmodulen
sl_config Systemkonfigurationseinstellungen
sl_users Informationen zu registrierten Benutzern
sl_groups Benutzergruppen mit unterschiedlichen Zugriffsebenen
sl_blocks Oberflächenblöcke, die auf der Website angezeigt werden
sl_categories Inhaltskategorien für alle Module
sl_comments Benutzerkommentare zu Inhalten
sl_ratings Inhaltsbewertungen und Rezensionen
sl_sessions Benutzersitzungsinformationen
sl_logs Systemprotokolle und Ereignisse

Tabellenstruktur

Jede Tabelle ist mit spezifischen Feldern entworfen, um relevante Informationen effizient zu speichern.

sl_modules - Systemmodule

Speichert Informationen über alle Systemmodule:

CREATE TABLE `sl_modules` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) NOT NULL DEFAULT '',
  `description` text NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  `view` tinyint(1) NOT NULL DEFAULT '0',
  `blocks` tinyint(1) NOT NULL DEFAULT '1',
  `blocks_c` tinyint(1) NOT NULL DEFAULT '1',
  `mod_group` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Felder:

  • id - Eindeutiger Modulbezeichner
  • title - Modulname (eindeutig)
  • description - Modulbeschreibung
  • active - Aktivitätsstatus (0/1)
  • view - Modulsichtbarkeit
  • blocks - Blocknutzung
  • blocks_c - Nutzung zentraler Blöcke
  • mod_group - Modulgruppe

sl_config - Systemkonfiguration

Speichert alle Systemeinstellungen:

CREATE TABLE `sl_config` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '',
  `value` text NOT NULL,
  `module` varchar(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_module` (`name`,`module`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Felder:

  • id - Eindeutiger Einstellungsbezeichner
  • name - Parametername
  • value - Parameterwert
  • module - Modul, zu dem der Parameter gehört

sl_users - Systembenutzer

Speichert Informationen über registrierte Benutzer:

CREATE TABLE `sl_users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(25) NOT NULL DEFAULT '',
  `user_email` varchar(100) NOT NULL DEFAULT '',
  `user_password` varchar(255) NOT NULL DEFAULT '',
  `user_group` tinyint(1) NOT NULL DEFAULT '1',
  `user_avatar` varchar(100) NOT NULL DEFAULT 'default/00.gif',
  `user_regdate` int(11) NOT NULL DEFAULT '0',
  `user_lastvisit` int(11) NOT NULL DEFAULT '0',
  `user_active` tinyint(1) NOT NULL DEFAULT '0',
  `user_level` tinyint(1) NOT NULL DEFAULT '1',
  `user_sig` text NOT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `user_name` (`user_name`),
  UNIQUE KEY `user_email` (`user_email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Felder:

  • user_id - Eindeutiger Benutzerbezeichner
  • user_name - Benutzername (eindeutig)
  • user_email - Benutzer-E-Mail (eindeutig)
  • user_password - Gehashtes Passwort
  • user_group - Benutzergruppe
  • user_avatar - Benutzeravatar
  • user_regdate - Registrierungsdatum (Zeitstempel)
  • user_lastvisit - Letzter Besuch (Zeitstempel)
  • user_active - Aktivitätsstatus (0/1)
  • user_level - Benutzerebene
  • user_sig - Benutzersignatur

Indizierung und Optimierung

Für hohe Leistung werden folgende Indizes verwendet:

Hauptindizes

  • Primärschlüssel für alle Tabellen
  • Eindeutige Indizes für Felder mit eindeutigen Werten
  • Zusammengesetzte Indizes für häufig verwendete Feldkombinationen

Optimierungsempfehlungen

  1. Verwenden Sie geeignete Datentypen - Verwenden Sie minimale notwendige Feldgrößen
  2. Indizes - Erstellen Sie Indizes für Felder, die in WHERE, ORDER BY, JOIN verwendet werden
  3. Normalisierung - Befolgen Sie die Prinzipien der Datenbanknormalisierung

Datenbanksicherheit

SLAED CMS verwendet Prepared Statements, um gegen SQL-Injektionen zu schützen:

// Korrekt - Prepared Statement
$stmt = $db->prepare("SELECT * FROM sl_users WHERE user_id = ?");
$stmt->bind_param("i", $user_id);
$stmt->execute();

// Falsch - direkte Ersetzung (verwundbar)
$query = "SELECT * FROM sl_users WHERE user_id = " . $user_id;

Datenbankzugriffsrechte

Es wird empfohlen, einen separaten Datenbankbenutzer mit begrenzten Rechten zu erstellen:

-- Benutzer mit minimal notwendigen Rechten erstellen
CREATE USER 'slaed_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON slaed_cms.* TO 'slaed_user'@'localhost';
FLUSH PRIVILEGES;

Sicherung und Wiederherstellung

SLAED CMS unterstützt die automatische Sicherung von Struktur und Daten:

-- Sicherung der Tabellenstruktur
SHOW CREATE TABLE sl_users;

-- Sicherung der Daten
SELECT * FROM sl_users INTO OUTFILE '/backup/users_backup.sql';

Datenwiederherstellung

-- Struktur wiederherstellen
SOURCE /backup/users_structure.sql;

-- Daten wiederherstellen
LOAD DATA INFILE '/backup/users_backup.sql' INTO TABLE sl_users;

Datenbankmigration

Zur Verwaltung von Änderungen an der Datenbankstruktur wird ein Migrationssystem verwendet:

-- Beispiel-Migration zum Hinzufügen eines neuen Feldes
ALTER TABLE sl_users ADD COLUMN user_phone VARCHAR(20) DEFAULT '' AFTER user_email;

Überwachung und Wartung

Regelmäßige Analyse von Abfragen hilft, Engpässe zu identifizieren:

-- Langsame Abfragen analysieren
SHOW PROCESSLIST;

-- Index-Nutzungsstatistiken
SHOW INDEX FROM sl_users;

-- Tabellengrößenstatistiken
SELECT 
    table_name AS `Table`,
    ROUND(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = 'slaed_cms'
ORDER BY (data_length + index_length) DESC;

Regelmäßige Tabellenoptimierung verbessert die Leistung:

-- Tabellen optimieren
OPTIMIZE TABLE sl_users, sl_modules, sl_config;