Datenbanksysteme

Aus Informatik interaktiv
Version vom 25. September 2019, 20:40 Uhr von M.ebert (Diskussion | Beiträge) (Heading levels corrected.)

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) -- Festlegen 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


Festlegen des Datenbankschemas

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)
 );


Abfragen

Pflege des Datenbestandes

Einfügen von Datensätzen

Ändern von Datensätzen

Löschen von Datensätzen