Zusammenfassung zum Thema Datenbanken und SQL
Datenbanken sind zentrale Bestandteile moderner Informationssysteme. Sie ermöglichen das Speichern, Abrufen und Verwalten von Daten effizient und strukturiert. SQL (Structured Query Language) ist die standardisierte Sprache zur Interaktion mit relationalen Datenbanken. Diese Zusammenfassung behandelt die Grundlagen von Datenbanken und SQL, erläutert wichtige Konzepte und gibt praktische Beispiele.
1. Grundlagen von Datenbanken
Was ist eine Datenbank?
Eine Datenbank ist ein systematischer Sammlung von Daten, die elektronisch gespeichert und verwaltet werden. Datenbanken ermöglichen es Benutzern, Daten zu speichern, zu organisieren und abzurufen. Die Verwaltung erfolgt in der Regel durch ein Datenbankmanagementsystem (DBMS).
Relationale Datenbanken
Relationale Datenbanken basieren auf dem relationalen Modell, das Daten in Tabellen organisiert. Jede Tabelle besteht aus Zeilen (Datensätzen) und Spalten (Attributen). Beziehungen zwischen den Tabellen werden durch Schlüssel (Keys) definiert.
Datenbankmanagementsystem (DBMS)
Ein DBMS ist eine Software, die die Verwaltung von Datenbanken ermöglicht. Es unterstützt Funktionen wie das Erstellen, Bearbeiten, Abfragen und Löschen von Daten. Beispiele für bekannte DBMS sind MySQL, PostgreSQL, Oracle und Microsoft SQL Server.
2. SQL (Structured Query Language)
SQL ist die standardisierte Sprache zur Verwaltung und Abfrage von Daten in relationalen Datenbanken. SQL ermöglicht es Benutzern, Daten zu definieren (DDL), zu manipulieren (DML), zu kontrollieren (DCL) und abzufragen (DQL).
Data Definition Language (DDL)
DDL-Befehle werden verwendet, um die Struktur von Datenbanken und Tabellen zu definieren und zu ändern. Wichtige DDL-Befehle sind:
- CREATE TABLE: Erstellen einer neuen Tabelle
- ALTER TABLE: Ändern einer bestehenden Tabelle
- DROP TABLE: Löschen einer Tabelle
Beispiel:
CREATE TABLE Mitarbeiter (
MitarbeiterID INT PRIMARY KEY,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Geburtsdatum DATE,
Abteilung VARCHAR(50)
);
Data Manipulation Language (DML)
DML-Befehle werden verwendet, um Daten in Tabellen zu manipulieren. Wichtige DML-Befehle sind:
- INSERT INTO: Einfügen neuer Datensätze
- UPDATE: Aktualisieren bestehender Datensätze
- DELETE: Löschen von Datensätzen
Beispiel:
INSERT INTO Mitarbeiter (MitarbeiterID, Vorname, Nachname, Geburtsdatum, Abteilung)
VALUES (1, 'Max', 'Mustermann', '1980-01-01', 'Vertrieb');
UPDATE Mitarbeiter
SET Abteilung = 'Marketing'
WHERE MitarbeiterID = 1;
DELETE FROM Mitarbeiter
WHERE MitarbeiterID = 1;
Data Query Language (DQL)
DQL-Befehle werden verwendet, um Daten aus Tabellen abzufragen. Der wichtigste DQL-Befehl ist:
- SELECT: Abfragen von Datensätzen
Beispiel:
SELECT Vorname, Nachname
FROM Mitarbeiter
WHERE Abteilung = 'Marketing';
Data Control Language (DCL)
DCL-Befehle werden verwendet, um Zugriffsrechte auf Datenbanken und Tabellen zu verwalten. Wichtige DCL-Befehle sind:
- GRANT: Erteilen von Rechten
- REVOKE: Entziehen von Rechten
Beispiel:
GRANT SELECT ON Mitarbeiter TO BenutzerA;
REVOKE SELECT ON Mitarbeiter FROM BenutzerA;
3. Wichtige SQL-Konzepte
Primärschlüssel und Fremdschlüssel
Ein Primärschlüssel (Primary Key) ist ein Attribut oder eine Kombination von Attributen, das jeden Datensatz in einer Tabelle eindeutig identifiziert. Ein Fremdschlüssel (Foreign Key) ist ein Attribut, das auf den Primärschlüssel einer anderen Tabelle verweist und Beziehungen zwischen Tabellen herstellt.
Beispiel:
CREATE TABLE Abteilung (
AbteilungsID INT PRIMARY KEY,
Abteilungsname VARCHAR(50)
);
CREATE TABLE Mitarbeiter (
MitarbeiterID INT PRIMARY KEY,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Geburtsdatum DATE,
AbteilungsID INT,
FOREIGN KEY (AbteilungsID) REFERENCES Abteilung(AbteilungsID)
);
Joins
Joins werden verwendet, um Daten aus mehreren Tabellen basierend auf einer Beziehung zwischen ihnen zu kombinieren. Wichtige Arten von Joins sind:
- INNER JOIN: Gibt nur die Datensätze zurück, bei denen die Bedingung erfüllt ist.
- LEFT JOIN: Gibt alle Datensätze aus der linken Tabelle und die übereinstimmenden Datensätze aus der rechten Tabelle zurück.
- RIGHT JOIN: Gibt alle Datensätze aus der rechten Tabelle und die übereinstimmenden Datensätze aus der linken Tabelle zurück.
- FULL JOIN: Gibt alle Datensätze zurück, bei denen es eine Übereinstimmung gibt, sowie alle Datensätze aus beiden Tabellen, wenn keine Übereinstimmung gefunden wird.
Beispiel:
SELECT Mitarbeiter.Vorname, Mitarbeiter.Nachname, Abteilung.Abteilungsname
FROM Mitarbeiter
INNER JOIN Abteilung ON Mitarbeiter.AbteilungsID = Abteilung.AbteilungsID;
Normalisierung
Die Normalisierung ist ein Prozess zur Organisation der Daten in einer Datenbank, um Redundanzen zu minimieren und die Datenintegrität zu maximieren. Die wichtigsten Normalformen sind:
- 1. Normalform (1NF): Alle Attributwerte müssen atomar sein.
- 2. Normalform (2NF): Die Tabelle muss in 1NF sein, und alle nicht-schlüsselattribute müssen vollständig vom Primärschlüssel abhängen.
- 3. Normalform (3NF): Die Tabelle muss in 2NF sein, und alle Attribute müssen direkt vom Primärschlüssel abhängen, nicht von anderen Attributen.
Beispiel:
-- 1. Normalform
CREATE TABLE Mitarbeiter (
MitarbeiterID INT PRIMARY KEY,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Geburtsdatum DATE,
Abteilung VARCHAR(50),
Telefon VARCHAR(20)
);
-- 2. Normalform
CREATE TABLE Abteilung (
AbteilungsID INT PRIMARY KEY,
Abteilungsname VARCHAR(50)
);
CREATE TABLE Mitarbeiter (
MitarbeiterID INT PRIMARY KEY,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Geburtsdatum DATE,
AbteilungsID INT,
FOREIGN KEY (AbteilungsID) REFERENCES Abteilung(AbteilungsID)
);
-- 3. Normalform
CREATE TABLE Telefonnummern (
TelefonID INT PRIMARY KEY,
MitarbeiterID INT,
Telefonnummer VARCHAR(20),
FOREIGN KEY (MitarbeiterID) REFERENCES Mitarbeiter(MitarbeiterID)
);
4. Erweiterte SQL-Konzepte
Indizes
Indizes verbessern die Abfragegeschwindigkeit von Datenbanken, indem sie einen schnellen Zugriff auf Datensätze ermöglichen. Sie werden auf eine oder mehrere Spalten einer Tabelle angewendet.
Beispiel:
CREATE INDEX idx_vorname ON Mitarbeiter(Vorname);
Sichten (Views)
Eine Sicht (View) ist eine gespeicherte Abfrage, die als virtuelle Tabelle betrachtet werden kann. Sichten ermöglichen es, komplexe Abfragen zu kapseln und den Datenzugriff zu vereinfachen.
Beispiel:
CREATE VIEW v_MitarbeiterAbteilung AS
SELECT Mitarbeiter.Vorname, Mitarbeiter.Nachname, Abteilung.Abteilungsname
FROM Mitarbeiter
INNER JOIN Abteilung ON Mitarbeiter.AbteilungsID = Abteilung.AbteilungsID;
Transaktionen
Transaktionen sind Gruppen von SQL-Befehlen, die als eine Einheit ausgeführt werden. Sie gewährleisten die Integrität der Datenbank, indem sie sicherstellen, dass entweder alle Befehle erfolgreich ausgeführt werden oder keiner. Wichtige Eigenschaften von Transaktionen sind ACID (Atomicity, Consistency, Isolation, Durability).
Beispiel:
BEGIN TRANSACTION;
UPDATE Mitarbeiter
SET Abteilung = 'Marketing'
WHERE MitarbeiterID = 1;
INSERT INTO Log (MitarbeiterID, Aktion)
VALUES (1, 'Abteilung geändert');
COMMIT;
5. Sicherheitsaspekte
Benutzerrechte und -rollen
Ein DBMS ermöglicht die Verwaltung von Benutzerrechten und -rollen, um den Zugriff auf Daten zu kontrollieren und die Sicherheit zu erhöhen. Rechte können auf Tabellen-, Zeilen- oder Spaltenebene vergeben werden.
Beispiel:
CREATE USER 'benutzerA'@'localhost' IDENTIFIED BY 'passwort';
GRANT SELECT, INSERT ON Datenbank.Mitarbeiter TO 'benutzerA'@'localhost';
CREATE ROLE 'manager';
GRANT SELECT, UPDATE ON Datenbank.Mitarbeiter TO 'manager';
GRANT 'manager' TO 'benutzerA'@'localhost';
SQL-Injection
SQL-Injection ist eine Technik, bei der Angreifer schädlichen SQL-Code in Eingabefelder einschleusen, um unbefugten Zugriff auf Datenbanken zu erhalten. Um SQL-Injection zu verhindern, sollten Eingaben validiert und parametrisierte Abfragen verwendet werden.
Beispiel:
-- Unsichere Abfrage
$query = "SELECT * FROM Benutzer WHERE Benutzername = '" + benutzername + "' AND Passwort = '" + passwort + "';";
-- Sichere Abfrage
$stmt = $conn->prepare("SELECT * FROM Benutzer WHERE Benutzername = ? AND Passwort = ?");
$stmt->bind_param("ss", $benutzername, $passwort);
$stmt->execute();
6. Beispiele für SQL-Anwendungen
SQL wird in vielen Anwendungsbereichen eingesetzt, darunter:
- E-Commerce: Verwaltung von Produktkatalogen, Bestellungen und Kundeninformationen.
- Finanzwesen: Verwaltung von Konten, Transaktionen und Berichten.
- Gesundheitswesen: Verwaltung von Patientendaten, Terminen und medizinischen Aufzeichnungen.
Beispiel: E-Commerce-Datenbank
CREATE TABLE Kunde (
KundenID INT PRIMARY KEY,
Vorname VARCHAR(50),
Nachname VARCHAR(50),
Email VARCHAR(100)
);
CREATE TABLE Produkt (
ProduktID INT PRIMARY KEY,
Produktname VARCHAR(100),
Preis DECIMAL(10, 2)
);
CREATE TABLE Bestellung (
BestellungID INT PRIMARY KEY,
KundenID INT,
Bestelldatum DATE,
FOREIGN KEY (KundenID) REFERENCES Kunde(KundenID)
);
CREATE TABLE Bestellposition (
BestellpositionID INT PRIMARY KEY,
BestellungID INT,
ProduktID INT,
Menge INT,
FOREIGN KEY (BestellungID) REFERENCES Bestellung(BestellungID),
FOREIGN KEY (ProduktID) REFERENCES Produkt(ProduktID)
);
Fazit
Datenbanken und SQL sind unverzichtbare Werkzeuge für die Speicherung und Verwaltung von Daten in modernen Anwendungen. Mit den Grundlagen, die in dieser Zusammenfassung behandelt wurden, sind Sie gut gerüstet, um SQL in Ihren eigenen Projekten anzuwenden und komplexe Datenbankstrukturen zu verwalten.
50 Fragen zu Datenbanken und SQL
- Was ist eine relationale Datenbank?
Eine Datenbank, die Daten in Tabellen organisiert, die durch Beziehungen miteinander verknüpft sind.
- Was ist SQL?
Structured Query Language, eine standardisierte Sprache zur Verwaltung und Abfrage von Daten in relationalen Datenbanken.
- Was ist ein Primärschlüssel?
Ein Attribut oder eine Kombination von Attributen, das jeden Datensatz in einer Tabelle eindeutig identifiziert.
- Was ist ein Fremdschlüssel?
Ein Attribut, das auf den Primärschlüssel einer anderen Tabelle verweist und Beziehungen zwischen Tabellen herstellt.
- Was ist eine SQL-Abfrage?
Ein Befehl, der verwendet wird, um Daten aus einer Datenbank abzurufen oder zu manipulieren.
- Was ist ein JOIN?
Ein SQL-Befehl, der Daten aus mehreren Tabellen basierend auf einer Beziehung zwischen ihnen kombiniert.
- Was ist ein INNER JOIN?
Ein Join, der nur die Datensätze zurückgibt, bei denen die Bedingung erfüllt ist.
- Was ist ein LEFT JOIN?
Ein Join, der alle Datensätze aus der linken Tabelle und die übereinstimmenden Datensätze aus der rechten Tabelle zurückgibt.
- Was ist ein RIGHT JOIN?
Ein Join, der alle Datensätze aus der rechten Tabelle und die übereinstimmenden Datensätze aus der linken Tabelle zurückgibt.
- Was ist ein FULL JOIN?
Ein Join, der alle Datensätze zurückgibt, bei denen es eine Übereinstimmung gibt, sowie alle Datensätze aus beiden Tabellen, wenn keine Übereinstimmung gefunden wird.
- Was ist eine Normalisierung?
Der Prozess zur Organisation von Daten in einer Datenbank, um Redundanzen zu minimieren und die Datenintegrität zu maximieren.
- Was ist die 1. Normalform (1NF)?
Eine Normalform, bei der alle Attributwerte atomar sein müssen.
- Was ist die 2. Normalform (2NF)?
Eine Normalform, bei der die Tabelle in 1NF sein muss und alle nicht-schlüsselattribute vollständig vom Primärschlüssel abhängen müssen.
- Was ist die 3. Normalform (3NF)?
Eine Normalform, bei der die Tabelle in 2NF sein muss und alle Attribute direkt vom Primärschlüssel abhängen müssen, nicht von anderen Attributen.
- Was ist ein Index?
Ein Datenbankobjekt, das die Abfragegeschwindigkeit verbessert, indem es einen schnellen Zugriff auf Datensätze ermöglicht.
- Was ist eine Sicht (View)?
Eine gespeicherte Abfrage, die als virtuelle Tabelle betrachtet werden kann.
- Was ist eine Transaktion?
Eine Gruppe von SQL-Befehlen, die als eine Einheit ausgeführt werden, um die Datenintegrität zu gewährleisten.
- Was sind die ACID-Eigenschaften?
Atomicity, Consistency, Isolation, Durability – Eigenschaften, die die Zuverlässigkeit von Transaktionen gewährleisten.
- Was ist eine atomare Transaktion?
Eine Transaktion, bei der entweder alle Operationen erfolgreich abgeschlossen werden oder keine.
- Was ist eine konsistente Transaktion?
Eine Transaktion, die die Datenbank von einem konsistenten Zustand in einen anderen überführt.
- Was ist eine isolierte Transaktion?
Eine Transaktion, die unabhängig von anderen Transaktionen ausgeführt wird, ohne dass sie sich gegenseitig beeinflussen.
- Was ist eine dauerhafte Transaktion?
Eine Transaktion, deren Ergebnisse nach Abschluss dauerhaft in der Datenbank gespeichert bleiben.
- Was ist ein Deadlock?
Eine Situation, in der zwei oder mehr Transaktionen aufeinander warten und dadurch keine der Transaktionen fortgesetzt werden kann.
- Was ist ein Rollback?
Das Zurücksetzen einer Transaktion, um die Datenbank in ihren vorherigen Zustand zurückzuversetzen.
- Was ist ein Commit?
Das dauerhafte Speichern der Änderungen einer Transaktion in der Datenbank.
- Was ist eine gespeicherte Prozedur?
Ein vordefinierter Satz von SQL-Befehlen, der auf dem Datenbankserver gespeichert und ausgeführt wird.
- Was ist ein Trigger?
Eine gespeicherte Prozedur, die automatisch ausgeführt wird, wenn bestimmte Ereignisse in der Datenbank auftreten.
- Was ist eine referentielle Integrität?
Die Gewährleistung, dass Beziehungen zwischen Tabellen konsistent bleiben.
- Was ist ein Datenbank-Schema?
Eine strukturierte Darstellung der Datenbank, die Tabellen, Beziehungen und andere Elemente beschreibt.
- Was ist ein Datenbank-Diagramm?
Eine grafische Darstellung der Struktur einer Datenbank, die Tabellen und deren Beziehungen zeigt.
- Was ist ein Fremdschlüssel-Constraint?
Eine Einschränkung, die sicherstellt, dass ein Fremdschlüsselwert in einer Tabelle mit einem Primärschlüsselwert in einer anderen Tabelle übereinstimmt.
- Was ist eine Kardinalität?
Die Anzahl der Elemente in einer Beziehung zwischen zwei Tabellen.
- Was ist eine 1:1-Beziehung?
Eine Beziehung, bei der jeder Datensatz in Tabelle A genau einem Datensatz in Tabelle B entspricht und umgekehrt.
- Was ist eine 1:n-Beziehung?
Eine Beziehung, bei der jeder Datensatz in Tabelle A mit mehreren Datensätzen in Tabelle B korrespondieren kann.
- Was ist eine n:m-Beziehung?
Eine Beziehung, bei der jeder Datensatz in Tabelle A mit mehreren Datensätzen in Tabelle B und umgekehrt korrespondieren kann.
- Was ist SQL-Injection?
Ein Angriff, bei dem schädlicher SQL-Code in eine Abfrage eingefügt wird, um unbefugten Zugriff auf Datenbanken zu erlangen.
- Was ist eine parametrisierte Abfrage?
Eine Abfrage, bei der Parameter verwendet werden, um SQL-Injection zu verhindern.
- Was ist ein Benutzerkonto in einer Datenbank?
Ein Konto, das einem Benutzer zugewiesen wird und Zugriffsrechte auf Datenbankressourcen definiert.
- Was ist eine Rolle in einer Datenbank?
Eine Gruppe von Berechtigungen, die Benutzern zugewiesen werden können, um den Zugriff auf Datenbankressourcen zu steuern.
- Was ist ein Sicherheitspatch?
Ein Update, das Sicherheitslücken in einer Datenbanksoftware schließt.
- Was ist ein Clustered Index?
Ein Index, bei dem die physische Reihenfolge der Datenbankeinträge den Reihenfolgewerten des Indexes entspricht.
- Was ist ein Non-Clustered Index?
Ein Index, bei dem die physische Reihenfolge der Datenbankeinträge nicht den Reihenfolgewerten des Indexes entspricht.
- Was ist eine Datenbankmigration?
Der Prozess der Übertragung von Daten und Anwendungen von einer Datenbankumgebung in eine andere.
- Was ist ein Datenbank-Backup?
Eine Kopie der Datenbank, die erstellt wird, um Datenverluste im Falle eines Systemausfalls zu verhindern.
- Was ist eine Wiederherstellung (Restore) in einer Datenbank?
Der Prozess des Zurückspielens eines Datenbank-Backups, um die Datenbank in einen vorherigen Zustand zu versetzen.
- Was ist eine temporäre Tabelle?
Eine Tabelle, die nur für die Dauer einer Sitzung existiert und danach gelöscht wird.
- Was ist eine Materialized View?
Eine gespeicherte Kopie einer Sicht, die regelmäßig aktualisiert wird.
- Was ist ein ER-Diagramm?
Ein Entity-Relationship-Diagramm, das die Struktur einer Datenbank mit Entitäten und deren Beziehungen darstellt.
- Was ist ein Datenbank-Trigger?
Eine gespeicherte Prozedur, die automatisch bei bestimmten Ereignissen in einer Datenbank ausgelöst wird.
- Was ist eine Datensicherung?
Das Erstellen einer Kopie der Datenbank, um Datenverluste zu vermeiden.