Inhaltsverzeichnis
- Was ist eine Datenbank?
- Geschichte der Datenbanksysteme
- Das relationale Modell – Grundbegriffe
- Die 12 Regeln nach Edgar F. Codd
- RDBMS im Überblick
- Oracle Database – Überblick
- Die SQL-Sprache und ihre Teilbereiche
- Datenbankdesign – Normalformen
- Entity-Relationship-Modell
- Das SCOTT-Schema
- Oracle SQL Developer und SQL*Plus
- Zusammenfassung und Ausblick
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:
- Daten werden in Relationen (Tabellen) gespeichert
- Beziehungen zwischen Daten werden über Schlüssel hergestellt
- Eine mathematisch fundierte Sprache (Relationenalgebra) beschreibt alle Operationen
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 Language
│ SELECT -- Daten abfragen
│
├── DML -- Data Manipulation Language
│ INSERT, UPDATE, DELETE -- Daten verändern
│
├── DDL -- Data Definition Language
│ CREATE, ALTER, DROP -- Strukturen definieren
│
├── DCL -- Data Control Language
│ GRANT, 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
- DQL – Data Query Language: SELECT, WHERE, ORDER BY, GROUP BY, Aggregatfunktionen
- DML: INSERT, UPDATE, DELETE
- Joins: INNER JOIN, OUTER JOIN, SELF JOIN
- Subqueries: Einfache und korrelierte Unterabfragen
- PL/SQL: Prozedurale Erweiterung von Oracle SQL
HTL Pinkafeld – IF/IT | Oracle SQL | 11. Schulstufe