Relationales Datenbanksystem Oracle 1 Relationales Modell Im relationalen Modell wird ein relationales Datenbankschema wie folgt beschrieben: RS = R 1 X 1 SC 1... R n X n SC n SC a a : i=1...n X i B Information wird also in Relationen R i abgelegt. Den Attributen A X i wird mittels der Funktion a ein semantischer Bereichsname zugeordnet. Außerdem können lokale (SC i ) und globale (SC) semantische Bedingungen angegeben werden. Diese müssen von einem der folgenden Typen sein: funktionale Abhängigkeiten mehrwertige Abhängigkeiten Verbundabhängigkeiten Enthaltenseinsabhängigkeiten Oracle verwendet Tabellen anstelle von Relationen. Das bedeutet dass ein Tupel durch eine Zeile in einer solchen Tabelle dargestellt wird. Prinzipiell kann im Gegensatz zum relationalen Modell in einer Tabelle eine Zeile mehrmals vorkommen. Anstatt von Attributen spricht man bei Oracle-Tabellen auch von Spalten. Während man im relationalen Modell beliebige semantische Bereichsnamen verwenden kann gibt Oracle eine feste Menge von Datentypen vor (siehe Abschnitt 4.2). Dabei ist ein Unterschied zum relationalen Modell dass verschiedene Tabellen für Spalten mit gleichen Namen unterschiedliche Datentypen haben können. Abschnitt 4.1 beschreibt die in Oracle zur Verfügung stehenden semantischen Bedingungen. Im Wesentlichen handelt es sich dabei um Spezialfälle von funktionalen Abhängigkeiten und von Enthaltenseinsabhängigkeiten. 1
2 Konzepte Die logische Struktur einer Oracle-Datenbank besteht aus mehreren Schichten: Die oberste Schicht ist die Datenbank. Jede Datenbank enthält einen oder mehrere tablespaces. Jedem Benutzer ist genau ein Schema zugeordnet (und umgekehrt). Die Daten jedes Schemas können über mehrere tablespaces verteilt sein. Ein Schema enthält Schemaobjekte. Schemaobjekte können u. a. von einem der folgenden Typen sein: Tabellen (tables) Sichten (views) Materialisierte Sichten (materialized views) Sequenzen (sequences) Synonyme (synonyms) Zugriffsstrukturen (indexes clusters hash clusters) Dimensionen (dimensions) Datenbankverknüpfungen (database links) Programmeinheiten (program units): procedures functions packages triggers... 3 Structured Query Language (SQL) In SQL können verschiedene Arten von Befehlen unterschieden werden: data definition language (DDL) data manipulation language (DML) transaction control session control system control embedded SQL 2
4 Erzeugen von Tabellen CREATE TABLE table ( (column datatype [DEFAULT expr] [column_constraint] table_constraint)... ) ; Hierbei sind table und column Bezeichner. 4.1 Semantische Bedingungen column_constraint [CONSTRAINT constraint] ([NOT] NULL UNIQUE PRIMARY KEY REFERENCES table [(column)] [ON DELETE (CASCADE SET NULL)] CHECK (condition)) table_constraint [CONSTRAINT constraint] (UNIQUE (column... ) PRIMARY KEY (column... ) FOREIGN KEY (column... ) references_clause CHECK (condition)) references_clause REFERENCES table [(column... )] [ON DELETE (CASCADE SET NULL)] Jeder semantischen Bedingung kann ein Name constraint gegeben werden. Gibt man keinen Namen an wird vom Datenbanksystem ein Name generiert. Oracle kennt den speziellen Wert NULL der zu jedem Datentyp passt. Er bedeutet soviel wie ist unbekannt oder nicht definiert. Für jede Spalte kann man solche Nullwerte mittels NULL erlauben (default) oder mittels NOT NULL verbieten. Mit UNIQUE und PRIMARY KEY werden Schlüsselattribute gekennzeichnet. Das heißt dass alle anderen Attribute funktional von den Schlüsselattributen abhängen. Darüber hinaus darf bei PRIMARY KEY keines der Schlüsselattribute den Wert NULL annehmen und es darf nur einen solchen Primärschlüssel pro Tabelle geben. Bei UNIQUE sind Nullwerte erlaubt und zusätzlich ist es zulässig dass mehrere Zeilen in einer Tabelle sind die für alle Schlüsselattribute den Wert NULL haben. Für jede Tabelle dürfen mittels UNIQUE mehrere Schlüssel definiert werden. Mit der Angabe von FOREIGN KEY... REFERENCES... bzw. REFERENCES... bei einzelnen Spalten wird ein sogenannter Fremdschlüssel festgelegt. Dies ist ein Spezialfall von Enthaltenseinsabhängigkeiten. Hierbei muss auf der nach REFERENCES angegeben Tabelle auf den angegebenen Attributen ein Schlüssel (mittels UNIQUE oder PRIMARY KEY) existieren. Gibt man keine Attribute an muss es auf der angegebenen Tabelle einen geeigneten Primärschlüssel geben der dann verwendet wird. 3
4.2 Datentypen Unter anderem stellt Oracle die folgenden Datentypen zur Verfügung: VARCHAR2(n) Zeichenketten bis maximal n Zeichen (1 n 4000) CHAR(n) Zeichenketten mit genau n Zeichen (1 n 2000). NUMBER(ps) Festkommazahlen mit p signifikanten Stellen und s Nachkommastellen (1 p 38 84 s 127). NUMBER(p) Kurzform für NUMBER(p0). NUMBER Fließkommazahlen mit einer Genauigkeit von 38 Dezimalstellen. FLOAT(b) Fließkommazahlen mit einer Genauigkeit von b Binärstellen (1 b 126). FLOAT Kurzform für FLOAT(126). DATE Zeitpunkte zwischen dem 1. 1. 4712 v. Chr. 0:00 und dem 31. 12. 9999 24:00 LONG Zeichenketten von maximal 2 GB. RAW(n) Binärdaten von maximal n Bytes (1 n 2000). LONG RAW. Binärdaten von maximal 2 GB. CLOB Zeichenketten von maximal 4 GB. BLOB Binärdaten von maximal 4 GB. 4.3 Werte und Bezeichner Textliterale (bzw. Textkonstanten) werden durch das Zeichen (Apostroph) begrenzt. Will man das Zeichen selbst in den Text aufzunehmen muss man es doppelt angeben. Somit sind z. B. Hallo und So n Quatsch syntaktisch korrekte Textkonstanten. Das Zeichen " (Anführungsstriche) kann verwendet werden um Bezeichner zu begrenzen. Während Bezeichner normalerweise mit einem Buchstaben beginnen müssen und alle Kleinbuchstaben in die entsprechenden Großbuchstaben umgewandelt werden kann dies durch die Verwendung von Anführungszeichen vermieden werden. Somit sind Folgendes drei von einander verschiedene gültige Bezeichner: "emp" "Emp" "EMP ". Die folgenden Angaben stehen hingegen alle für den gleichen Bezeichner: emp EMP "EMP". 5 Einfügen von Daten INSERT INTO table VALUES ( (expr DEFAULT)... ) ; 4
6 Löschen des gesamten Tabelleninhalts TRUNCATE TABLE table ; 7 Entfernen von Tabellen DROP TABLE table ; 8 Syntaxdiagramme create-table CREATE TABLE table ( column datatype table-constr. ) ; DEFAULT expr col.-constr. 5
col.-constr. CONSTRAINT constraint NOT NULL UNIQUE PRIMARY KEY REFERENCES table ( column ) ON DELETE CASCADE SET NULL CHECK ( condition ) 6
table-constr. CONSTRAINT constraint UNIQUE ( column ) PRIMARY KEY ( column ) FOREIGN KEY ( column ) references-clause CHECK ( condition ) references-clause REFERENCES table ( column ) ON DELETE CASCADE SET NULL insert-values INSERT INTO table VALUES ( expr ) ; DEFAULT truncate-table TRUNCATE TABLE table ; 7
drop-table DROP TABLE table ; 8