Datenbanksysteme
Große Datenmengen, wie sie beispielsweise in einem Social Network oder Online-Shop anfallen, werden üblicherweise als Datenbanksystem (database system, DBS) verwaltet. Dazu benötigt man ein Programm, das man als Datenbankmanagementsystem (database management system, DBMS) bezeichnet. Ein DBMS kann eine oder mehrere Datenbanken betreiben. Eine Datenbank (database, DB) wiederum besteht aus dem Schema (schema), das die Struktur der zu speichernden Daten beschreibt, und den eigentlichen Daten (data).
Es gibt viele verschiedene Arten von Datenbanksysteme. Wir werden hier zunächst nur relationale Datenbanksysteme thematisieren.
Die Structured Query Language (SQL) ist eine standardisierte Sprache zum Bedienen von DBMS. Sie ist heute sehr weit verbreitet und wird von den meisten DBMS unterstützt. Die zahlreichen SQL-Befehle kann man grob wie folgt einteilen:
- Data Definition Language (DDL) -- Anlegen/Ändern des Datenbankschemas
- Data Manipulation Language (DML) -- Arbeiten mit dem Datenbestand
- Data Query Language (DQL) -- Abfragen (SELECT)
- Befehle zur Pflege des Datenbestandes (INSERT, UPDATE, DELETE)
- Transaction Control Language (TCL) -- Arbeiten mit Transaktionen
- Data Control Language (DCL) -- Festlegen von Zugriffsrechten
Inhaltsverzeichnis
Data Definition Language
Definieren von Spalten
Beispiel: Web-Forum
CREATE TABLE Categories ( CategoryID INTEGER, Title CHAR(255), Description VARCHAR(4096) );
CREATE TABLE Users ( UserID INTEGER, LoginName CHAR(64), PasswdHash CHAR(255), EMailAddr CHAR(255), LastName CHAR(255), FirstName CHAR(255), BirthDate DATE );
CREATE TABLE Posts ( PostID INTEGER, Author INTEGER, Category INTEGER, Title VARCHAR(512), Content TEXT, CreatedOn TIMESTAMP, EditedOn TIMESTAMP );
Pflichtfelder
CREATE TABLE Categories ( CategoryID INTEGER NOT NULL, Title CHAR(255) NOT NULL, Description VARCHAR(4096) NULL );
CREATE TABLE Users ( UserID INTEGER NOT NULL, LoginName CHAR(64) NOT NULL, PasswdHash CHAR(255) NOT NULL, EMailAddr CHAR(255) NOT NULL, LastName CHAR(255) NULL, FirstName CHAR(255) NULL, BirthDate DATE NULL );
CREATE TABLE Posts ( PostID INTEGER NOT NULL, Author INTEGER NULL, Category INTEGER NOT NULL, Title VARCHAR(512) NOT NULL, Content TEXT NOT NULL, CreatedOn TIMESTAMP NOT NULL, EditedOn TIMESTAMP NULL );
Primärschlüssel
CREATE TABLE Categories ( CategoryID INTEGER NOT NULL, Title CHAR(255) NOT NULL, Description VARCHAR(4096) NULL, PRIMARY KEY (CategoryID) );
CREATE TABLE Users ( UserID INTEGER NOT NULL, LoginName CHAR(64) NOT NULL, PasswdHash CHAR(255) NOT NULL, EMailAddr CHAR(255) NOT NULL, LastName CHAR(255) NULL, FirstName CHAR(255) NULL, BirthDate DATE NULL, PRIMARY KEY (UserID) );
CREATE TABLE Posts ( PostID INTEGER NOT NULL, Author INTEGER NULL, Category INTEGER NOT NULL, Title VARCHAR(512) NOT NULL, Content TEXT NOT NULL, CreatedOn TIMESTAMP NOT NULL, EditedOn TIMESTAMP NULL, PRIMARY KEY (PostID) );
Eindeutige Werte
CREATE TABLE Categories ( CategoryID INTEGER NOT NULL, Title CHAR(255) NOT NULL, Description VARCHAR(4096) NULL, PRIMARY KEY (CategoryID), UNIQUE (Title) );
CREATE TABLE Users ( UserID INTEGER NOT NULL, LoginName CHAR(64) NOT NULL, PasswdHash CHAR(255) NOT NULL, EMailAddr CHAR(255) NOT NULL, LastName CHAR(255) NULL, FirstName CHAR(255) NULL, BirthDate DATE NULL, PRIMARY KEY (UserID), UNIQUE (LoginName), UNIQUE (EMailAddr) );
Fremdschlüssel
CREATE TABLE Posts ( PostID INTEGER NOT NULL, Author INTEGER NULL, Category INTEGER NOT NULL, Title VARCHAR(512) NOT NULL, Content TEXT NOT NULL, CreatedOn TIMESTAMP NOT NULL, EditedOn TIMESTAMP NULL, PRIMARY KEY (PostID), FOREIGN KEY (Author) REFERENCES Users (UserID) ON UPDATE RESTRICT ON DELETE SET NULL, FOREIGN KEY (Category) REFERENCES Categories (CategoryID) ON UPDATE RESTRICT ON DELETE CASCADE );
Weitere Bedingungen
CREATE TABLE Posts ( PostID INTEGER NOT NULL, Author INTEGER NULL, Category INTEGER NOT NULL, Title VARCHAR(512) NOT NULL, Content TEXT NOT NULL, CreatedOn TIMESTAMP NOT NULL, EditedOn TIMESTAMP NULL, PRIMARY KEY (PostID), FOREIGN KEY (Author) REFERENCES Users (UserID) ON UPDATE RESTRICT ON DELETE SET NULL, FOREIGN KEY (Category) REFERENCES Categories (CategoryID) ON UPDATE RESTRICT ON DELETE CASCADE, CHECK (CreatedOn < EditedOn) );