SQL und relationale Datenbanken – Einführung und Grundkonzepte

Fach: Informationstechnologie – Datenbanksysteme
Schulstufe: 11. Schulstufe – HTL Informatik
Voraussetzungen: Grundlegende IT-Kenntnisse, Tabellenkalkulation
Autor: HTL Pinkafeld – IF/IT



1. Was ist eine Datenbank?

1.1 Definition

Eine Datenbank ist eine strukturierte, elektronische Sammlung von Daten, die dauerhaft gespeichert wird und von einem oder mehreren Anwendungen genutzt werden kann.

Ein Datenbankmanagementsystem (DBMS) ist die Software, die den Zugriff auf diese Daten verwaltet – also Speichern, Suchen, Ändern und Löschen ermöglicht.

Anwendung 1 ─┐
Anwendung 2 ─┤→ DBMS → Datenbank (physische Speicherung)
Anwendung 3 ─┘

1.2 Warum nicht einfach Dateien verwenden?

Problem mit Dateien Lösung durch DBMS
Daten mehrfach gespeichert (Redundanz) Zentrale Datenhaltung
Inkonsistenz bei Änderungen Transaktionen mit ACID-Garantien
Kein gleichzeitiger Mehrfachzugriff Concurrency Control
Keine Zugriffskontrolle Rechteverwaltung (Benutzer, Rollen)
Kein Schutz bei Absturz Recovery und Backup-Mechanismen
Schwierige Suche Mächtige Abfragesprache (SQL)

1.3 Datenbankmodelle im Überblick

1960er: Hierarchisches Modell  (Baumstruktur, z.B. IBM IMS)
1970er: Netzwerkmodell         (Graph-Struktur, CODASYL)
1970er: Relationales Modell    (Tabellen, Edgar F. Codd) -- Standard heute
1990er: Objektorientiertes DB  (Objekte wie in OOP)
2000er: NoSQL                  (Document, Key-Value, Graph, Column)
2010er: NewSQL / Hybrid        (SQL + NoSQL-Skalierung)

Merke: Das relationale Modell ist seit über 50 Jahren der Standard für strukturierte Daten. SQL ist die Sprache dafür.


2. Geschichte der Datenbanksysteme

2.1 Meilensteine

Jahr Ereignis
1970 Edgar F. Codd: „A Relational Model of Data for Large Shared Data Banks"
1974 IBM entwickelt SEQUEL, Vorgänger von SQL
1979 Oracle bringt das erste kommerzielle RDBMS heraus
1986 SQL wird ANSI-Standard (SQL-86)
1992 SQL-92 – große Erweiterung, bis heute Basis vieler Systeme
1999 SQL:1999 – prozedurale Erweiterungen, Trigger, Rekursion
2003 SQL:2003 – XML-Integration, Window Functions
2023 SQL:2023 – Property Graph Queries, JSON-Verbesserungen

2.2 Edgar F. Codd (1923–2003)

Edgar Frank Codd war ein britisch-amerikanischer Informatiker bei IBM. Sein 1970 veröffentlichtes Paper begründete das relationale Datenbankmodell – eines der wichtigsten Werke der Informatikgeschichte.

Kernideen Codds:


3. Das relationale Modell – Grundbegriffe

3.1 Relation (Tabelle)

Eine Relation ist eine zweidimensionale Tabelle mit Tupeln (Zeilen) und Attributen (Spalten):

-- Relation: EMP
-- EMPNO  | ENAME  | JOB       | SAL
-- -------+--------+-----------+------
-- 7369   | SMITH  | CLERK     |  800
-- 7499   | ALLEN  | SALESMAN  | 1600
-- 7839   | KING   | PRESIDENT | 5000

3.2 Wichtige Begriffe

Begriff Bedeutung Beispiel
Relation Tabelle mit Daten EMP, DEPT
Tupel Eine Zeile / Datensatz Zeile mit EMPNO=7369
Attribut Eine Spalte ENAME, SAL
Domäne Wertebereich eines Attributs SAL: positive Zahlen
Primärschlüssel (PK) Eindeutiger Bezeichner für jedes Tupel EMPNO
Fremdschlüssel (FK) Verweis auf PK einer anderen Relation DEPTNO in EMP
Schema Struktur der Datenbank CREATE TABLE ...
Instanz Die aktuellen Daten zur Laufzeit Die 14 Zeilen in EMP

3.3 Schlüsseltypen

Superschlüssel:       Jede Attributmenge, die Tupel eindeutig identifiziert
Kandidatenschlüssel:  Minimaler Superschlüssel
Primärschlüssel:      Ausgewählter Kandidatenschlüssel (NOT NULL, eindeutig)
Fremdschlüssel:       Attribut, das auf PK einer anderen Relation verweist
CREATE TABLE DEPT (
    DEPTNO  NUMBER(2)   PRIMARY KEY,
    DNAME   VARCHAR2(14),
    LOC     VARCHAR2(13)
);

CREATE TABLE EMP (
    EMPNO   NUMBER(4)   PRIMARY KEY,
    ENAME   VARCHAR2(10),
    DEPTNO  NUMBER(2)   REFERENCES DEPT(DEPTNO)  -- Fremdschlüssel
);

3.4 Referentielle Integrität

Der Fremdschlüssel sorgt dafür, dass keine verwaisten Verweise entstehen:

-- Fehler: Abteilung 99 existiert nicht
INSERT INTO EMP (EMPNO, ENAME, DEPTNO) VALUES (9999, 'TEST', 99);
-- ORA-02291: integrity constraint violated - parent key not found

-- Fehler: Es gibt noch Mitarbeiter in Abteilung 10
DELETE FROM DEPT WHERE DEPTNO = 10;
-- ORA-02292: integrity constraint violated - child record found

4. Die 12 Regeln nach Edgar F. Codd

Codd formulierte 1985 13 Regeln (Regel 0–12), die ein System erfüllen muss, um als „relational" zu gelten:

Regel 0 – Grundregel

Ein relationales System muss seine Daten ausschließlich über seine relationalen Fähigkeiten verwalten.

Regel 1 – Informationsregel

Alle Informationen werden ausschließlich als Werte in Tabellen dargestellt. Keine versteckten Zeiger.

Regel 2 – Garantierter Zugriff

Auf jeden Wert kann zugegriffen werden durch: Tabellenname + Primärschlüsselwert + Spaltenname.

Regel 3 – Systematische NULL-Behandlung

NULL bedeutet „unbekannt" oder „nicht anwendbar" – unabhängig von 0 oder Leerstring.

-- Korrekt: IS NULL / IS NOT NULL
SELECT * FROM EMP WHERE COMM IS NULL;

-- Falsch: = NULL ergibt immer keine Zeilen!
SELECT * FROM EMP WHERE COMM = NULL;

Regel 4 – Datenbankbeschreibung auf relationaler Basis

Das Schema (Data Dictionary) wird selbst als Relation gespeichert und ist mit SQL abfragbar.

-- Oracle Data Dictionary abfragen
SELECT TABLE_NAME FROM USER_TABLES;
SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'EMP';

Regel 5 – Umfassende Untersprache

Es muss eine vollständige Sprache geben, die DDL, DML, Transaktionen und Rechte abdeckt. → SQL

Regel 6 – Aktualisierbare Views

Views, die theoretisch aktualisierbar sind, müssen auch tatsächlich aktualisiert werden können.

Regel 7 – Mengenbezogene Operationen

INSERT, UPDATE und DELETE müssen auf Mengen von Tupeln anwendbar sein.

-- Eine Anweisung, mehrere Zeilen betroffen
UPDATE EMP SET SAL = SAL * 1.1 WHERE DEPTNO = 20;

Regel 8 – Physikalische Datenunabhängigkeit

Änderungen an der physischen Speicherung dürfen das logische Schema nicht beeinflussen.

Regel 9 – Logische Datenunabhängigkeit

Änderungen am logischen Schema (z.B. neue Spalten) dürfen bestehende Anwendungen nicht brechen.

Regel 10 – Integritätsunabhängigkeit

Integritätsbedingungen (NOT NULL, UNIQUE, FK) werden in der Datenbank selbst definiert, nicht in der Anwendung.

Regel 11 – Verteilungsunabhängigkeit

Die Abfragesprache muss gleich funktionieren, egal ob Daten auf einem oder mehreren Systemen liegen.

Regel 12 – Keine Umgehung

Es darf keine Möglichkeit geben, Integritätsbedingungen durch Low-Level-Zugriff zu umgehen.

In der Praxis: Kein kommerzielles DBMS erfüllt alle 12 Regeln vollständig. Oracle erfüllt die meisten davon sehr gut.


5. RDBMS im Überblick

5.1 Kommerzielle Systeme

System Hersteller Besonderheiten
Oracle Database Oracle Corp. PL/SQL, RAC, Marktführer Enterprise
Microsoft SQL Server Microsoft T-SQL, BI-Integration
IBM Db2 IBM Enterprise, Mainframe
SAP HANA SAP In-Memory, ERP-Fokus

5.2 Open-Source Systeme

System Lizenz Stärken
PostgreSQL BSD SQL-konform, erweiterbar, JSON
MySQL / MariaDB GPL Weit verbreitet, Web-Apps
SQLite Public Domain Dateibasiert, kein Server nötig

5.3 SQL-Dialekte im Vergleich

-- Aktuelle Zeit
SYSDATE                                   -- Oracle
GETDATE()                                 -- SQL Server
NOW()                                     -- MySQL / PostgreSQL

-- Erste 5 Zeilen
SELECT * FROM EMP WHERE ROWNUM <= 5;      -- Oracle (klassisch)
SELECT * FROM EMP FETCH FIRST 5 ROWS ONLY; -- Oracle 12c+ / Standard
SELECT TOP 5 * FROM EMP;                  -- SQL Server
SELECT * FROM EMP LIMIT 5;               -- MySQL / PostgreSQL

6. Oracle Database – Überblick

6.1 Versionsgeschichte

Version Jahr Highlight
Oracle V2 1979 Erstes kommerzielles RDBMS
Oracle 7 1992 PL/SQL, Stored Procedures, Triggers
Oracle 8i 1999 Internet-Fokus, Java in der DB
Oracle 11g 2007 Compression, Partitioning verbessert
Oracle 12c 2013 Multitenant, In-Memory Option
Oracle 19c 2019 Long Term Support Release
Oracle 23ai 2024 KI-Integration, Vector Search

6.2 Schema und Benutzer

In Oracle ist ein Schema an einen Benutzer gebunden:

-- Als SYSDBA: neuen Benutzer anlegen
CREATE USER scott IDENTIFIED BY tiger;
GRANT CONNECT, RESOURCE TO scott;

-- Als anderer Benutzer: Tabelle mit Schema-Präfix ansprechen
SELECT * FROM scott.emp;

7. Die SQL-Sprache und ihre Teilbereiche

7.1 Überblick

SQL
├── DQL  -- Data Query LanguageSELECT                        -- Daten abfragen
│
├── DML  -- Data Manipulation LanguageINSERT, UPDATE, DELETE        -- Daten verändern
│
├── DDL  -- Data Definition LanguageCREATE, ALTER, DROP           -- Strukturen definieren
│
├── DCL  -- Data Control LanguageGRANT, REVOKE                 -- Rechte vergeben
│
└── TCL  -- Transaction Control Language
          COMMIT, ROLLBACK, SAVEPOINT   -- Transaktionen steuern

7.2 ACID – Transaktionseigenschaften

Eigenschaft Bedeutung Beispiel
Atomicity Alles oder nichts Überweisung: Abbuchung UND Gutschrift
Consistency DB bleibt konsistent Fremdschlüssel bleiben gültig
Isolation Parallele Transaktionen stören sich nicht Zwei Buchungen gleichzeitig
Durability Committed = dauerhaft gespeichert Auch nach Absturz vorhanden
-- Beispiel einer Transaktion in PL/SQL
BEGIN
    UPDATE konten SET saldo = saldo - 500 WHERE knr = 1001;
    UPDATE konten SET saldo = saldo + 500 WHERE knr = 2002;
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
END;

8. Datenbankdesign – Normalformen

8.1 Warum Normalisierung?

Schlechtes Design führt zu Anomalien:

Unnormalisierte Tabelle:
-- BESTID | KUNDE | ADRESSE           | ARTIKEL  | PREIS
-- -------+-------+-------------------+----------+------
-- 1      | Maier | Wien, Hauptstr. 1 | Laptop   |  999
-- 1      | Maier | Wien, Hauptstr. 1 | Maus     |   25  -- Redundanz!
-- 2      | Maier | Wien, Hauptstr. 1 | Tastatur |   49  -- Redundanz!

-- Update-Anomalie:  Adresse ändern → 3 Zeilen müssen geändert werden
-- Delete-Anomalie:  Letzte Bestellung löschen → Kundendaten gehen verloren
-- Insert-Anomalie:  Neuen Kunden eintragen ohne Bestellung → nicht möglich

8.2 Erste Normalform (1NF)

Bedingung: Alle Attributwerte sind atomar (keine Wiederholungsgruppen, keine Mengen).

Verletzung:   TELEFON = '0676/12345, 01/98765'  -- mehrere Werte!
1NF-konform:  Separate Tabelle TELEFON mit je einer Nummer pro Zeile

8.3 Zweite Normalform (2NF)

Bedingung: 1NF + jedes Nicht-Schlüsselattribut ist voll funktional abhängig vom gesamten PK.

PK: (BESTID, ARTIKELNR)
ARTIKELNAME haengt nur von ARTIKELNR ab -- verletzt 2NF!
Loesung: ARTIKEL in eigene Tabelle auslagern.

8.4 Dritte Normalform (3NF)

Bedingung: 2NF + kein Nicht-Schlüsselattribut ist transitiv abhängig vom PK.

EMP: EMPNO → DEPTNO → DNAME
DNAME haengt transitiv von EMPNO ab -- verletzt 3NF!
Loesung: DEPT-Tabelle mit DEPTNO, DNAME, LOC auslagern.

8.5 Normalisierungsschritte

Unnormalisiert
     │  atomare Werte, keine Wiederholungsgruppen
     ▼
1. Normalform (1NF)
     │  volle Abhaengigkeit vom gesamten PK
     ▼
2. Normalform (2NF)
     │  keine transitiven Abhaengigkeiten
     ▼
3. Normalform (3NF)   -- fuer die meisten Anwendungen ausreichend

9. Entity-Relationship-Modell

9.1 Grundelemente

Das ER-Modell (Chen, 1976) ist ein grafisches Werkzeug zur Datenbankmodellierung:

Entitaet:   Ein Objekt der realen Welt    -- Rechteck
Attribut:   Eigenschaft einer Entitaet    -- Ellipse / Spalte
Beziehung:  Verbindung zwischen Entitaeten -- Raute / Linie

EMP ──(N)── arbeitet_in ──(1)── DEPT

9.2 Kardinalitäten

Typ Notation Bedeutung Beispiel
1:1 ──────── Eine ↔ eine Mitarbeiter hat einen Ausweis
1:N ───────< Eine ↔ viele Abteilung hat viele Mitarbeiter
M:N >──────< Viele ↔ viele Studenten belegen viele Kurse

M:N-Beziehungen werden durch eine Zwischentabelle aufgelöst:

-- STUDENT --< EINSCHREIBUNG >-- KURS
CREATE TABLE EINSCHREIBUNG (
    STUDENT_ID  NUMBER REFERENCES STUDENT(ID),
    KURS_ID     NUMBER REFERENCES KURS(ID),
    PRIMARY KEY (STUDENT_ID, KURS_ID)
);

10. Das SCOTT-Schema

10.1 Überblick

Das SCOTT-Schema ist das klassische Oracle-Beispielschema – seit den 1980ern für Schulungen verwendet:

SCOTT-Schema
├── EMP      (14 Mitarbeiter)
├── DEPT     (4 Abteilungen)
├── SALGRADE (5 Gehaltsklassen)
└── BONUS    (leer, für Übungen)

10.2 Tabelle EMP

Spalte Typ Bedeutung
EMPNO NUMBER(4) Mitarbeiternummer (PK)
ENAME VARCHAR2(10) Name
JOB VARCHAR2(9) Beruf (CLERK, SALESMAN, MANAGER, ANALYST, PRESIDENT)
MGR NUMBER(4) Vorgesetzte/r (FK auf EMP.EMPNO – Selbstreferenz!)
HIREDATE DATE Einstellungsdatum
SAL NUMBER(7,2) Grundgehalt
COMM NUMBER(7,2) Provision (nur SALESMAN, sonst NULL)
DEPTNO NUMBER(2) Abteilungsnummer (FK auf DEPT.DEPTNO)

10.3 Tabelle DEPT

Spalte Typ Werte
DEPTNO NUMBER(2) 10, 20, 30, 40
DNAME VARCHAR2(14) ACCOUNTING, RESEARCH, SALES, OPERATIONS
LOC VARCHAR2(13) NEW YORK, DALLAS, CHICAGO, BOSTON

10.4 Tabelle SALGRADE

Spalte Bedeutung
GRADE Gehaltsklasse 1–5
LOSAL Untergrenze
HISAL Obergrenze

10.5 Schema anlegen

-- DEPT erstellen und befüllen
CREATE TABLE DEPT (
    DEPTNO  NUMBER(2)     CONSTRAINT PK_DEPT PRIMARY KEY,
    DNAME   VARCHAR2(14),
    LOC     VARCHAR2(13)
);

INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

-- EMP erstellen
CREATE TABLE EMP (
    EMPNO     NUMBER(4)    CONSTRAINT PK_EMP PRIMARY KEY,
    ENAME     VARCHAR2(10),
    JOB       VARCHAR2(9),
    MGR       NUMBER(4),
    HIREDATE  DATE,
    SAL       NUMBER(7,2),
    COMM      NUMBER(7,2),
    DEPTNO    NUMBER(2)    CONSTRAINT FK_EMP_DEPT
                           REFERENCES DEPT(DEPTNO)
);

-- EMP befüllen (Auswahl)
INSERT INTO EMP VALUES (7839,'KING',  'PRESIDENT',NULL,TO_DATE('17.11.1981','DD.MM.YYYY'),5000,NULL,10);
INSERT INTO EMP VALUES (7566,'JONES', 'MANAGER',  7839,TO_DATE('02.04.1981','DD.MM.YYYY'),2975,NULL,20);
INSERT INTO EMP VALUES (7698,'BLAKE', 'MANAGER',  7839,TO_DATE('01.05.1981','DD.MM.YYYY'),2850,NULL,30);
INSERT INTO EMP VALUES (7902,'FORD',  'ANALYST',  7566,TO_DATE('03.12.1981','DD.MM.YYYY'),3000,NULL,20);
INSERT INTO EMP VALUES (7369,'SMITH', 'CLERK',    7902,TO_DATE('17.12.1980','DD.MM.YYYY'), 800,NULL,20);
INSERT INTO EMP VALUES (7499,'ALLEN', 'SALESMAN', 7698,TO_DATE('20.02.1981','DD.MM.YYYY'),1600, 300,30);

-- SALGRADE erstellen und befüllen
CREATE TABLE SALGRADE (
    GRADE  NUMBER,
    LOSAL  NUMBER,
    HISAL  NUMBER
);

INSERT INTO SALGRADE VALUES (1,  700, 1200);
INSERT INTO SALGRADE VALUES (2, 1201, 1400);
INSERT INTO SALGRADE VALUES (3, 1401, 2000);
INSERT INTO SALGRADE VALUES (4, 2001, 3000);
INSERT INTO SALGRADE VALUES (5, 3001, 9999);

COMMIT;

11. Oracle SQL Developer und SQL*Plus

11.1 SQL Developer

Oracle SQL Developer ist die kostenlose grafische IDE für Oracle:

Verbindung anlegen:
  Connection Name:  HTL_SCOTT
  Username:         scott
  Password:         tiger
  Hostname:         localhost
  Port:             1521
  Service name:     XE

11.2 SQL*Plus – Wichtige Befehle

-- Verbindung
sqlplus scott/tiger@localhost:1521/XE

-- Metabefehle (kein SQL, kein Semikolon nötig)
DESCRIBE EMP              -- Tabellenstruktur anzeigen
SET PAGESIZE 50           -- Zeilen pro Seite
SET LINESIZE 150          -- Zeichen pro Zeile
COLUMN ENAME FORMAT A15   -- Spaltenbreite
SPOOL ausgabe.txt         -- Ausgabe in Datei
SPOOL OFF                 -- Ausgabe beenden
@skript.sql               -- SQL-Skript ausführen
EXIT                      -- Verbindung beenden

11.3 Erste Schritte

-- Verbindung testen
SELECT SYSDATE FROM DUAL;

-- Eigene Tabellen anzeigen
SELECT TABLE_NAME FROM USER_TABLES ORDER BY TABLE_NAME;

-- EMP-Struktur
DESCRIBE EMP;

-- Alle Mitarbeiter
SELECT * FROM EMP;

DUAL: Eine spezielle Oracle-Tabelle mit einer Zeile und einer Spalte. Wird verwendet, wenn kein echter Tabellenkontext benötigt wird: SELECT SYSDATE FROM DUAL, SELECT 2+3 FROM DUAL.


12. Zusammenfassung und Ausblick

Überblick

Relationale Datenbanken
├── Modell (Codd, 1970)
│     ├── Relationen, Tupel, Attribute
│     ├── Primaer- und Fremdschluessel
│     └── 12 Regeln nach Codd
├── RDBMS
│     ├── Oracle, SQL Server, PostgreSQL, MySQL
│     └── SQL als standardisierte Abfragesprache
├── SQL-Teilbereiche
│     ├── DQL, DML, DDL, DCL, TCL
│     └── ACID-Transaktionen
├── Datenbankdesign
│     ├── ER-Modell
│     └── 1NF, 2NF, 3NF
└── Oracle-spezifisch
      ├── SCOTT-Schema (EMP, DEPT, SALGRADE)
      └── SQL Developer / SQL*Plus

Checkliste

Unterschied Datenbank / DBMS / Schema erklaert koennen
Primaer- und Fremdschluessel erklaeren koennen
Referentielle Integritaet erklaeren koennen
Mindestens 5 Codd-Regeln nennen koennen
ACID-Eigenschaften kennen
SCOTT-Schema: Tabellen und Beziehungen kennen
SQL Developer verbinden und erste Abfragen ausfuehren
DUAL-Tabelle kennen

Ausblick: Nächste Themen


HTL Pinkafeld – IF/IT | Oracle SQL | 11. Schulstufe

Start der ReiheKein vorheriges Thema Nächstes ThemaDQL – SELECT