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.
Inhaltsverzeichnis
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 Modulbezeichnertitle
- Modulname (eindeutig)description
- Modulbeschreibungactive
- Aktivitätsstatus (0/1)view
- Modulsichtbarkeitblocks
- Blocknutzungblocks_c
- Nutzung zentraler Blöckemod_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 Einstellungsbezeichnername
- Parameternamevalue
- Parameterwertmodule
- 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 Benutzerbezeichneruser_name
- Benutzername (eindeutig)user_email
- Benutzer-E-Mail (eindeutig)user_password
- Gehashtes Passwortuser_group
- Benutzergruppeuser_avatar
- Benutzeravataruser_regdate
- Registrierungsdatum (Zeitstempel)user_lastvisit
- Letzter Besuch (Zeitstempel)user_active
- Aktivitätsstatus (0/1)user_level
- Benutzerebeneuser_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
- Verwenden Sie geeignete Datentypen - Verwenden Sie minimale notwendige Feldgrößen
- Indizes - Erstellen Sie Indizes für Felder, die in WHERE, ORDER BY, JOIN verwendet werden
- 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;