Relationales Datenbanksystem Oracle 1 Relationales Modell Im relationalen Modell wird ein relationales Datenbankschema wie folgt beschrieben: RS = hhR1 | X1 | SC1 i, . . . , hRn | Xn | SCn i | SC | ai a: [ Xi → B i=1,...,n Information wird also in Relationen, Ri , abgelegt. Den Attributen, A ∈ Xi , wird mittels der Funktion a ein semantischer Bereichsname zugeordnet. Außerdem können lokale (SCi ) 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(p,s), Festkommazahlen mit p signifikanten Stellen und s Nachkommastellen (1 ≤ p ≤ 38, −84 ≤ s ≤ 127). • NUMBER(p), Kurzform für NUMBER(p,0). • 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 - DEFAULT - expr col.-constr. - table-constr. , - ) - ; 5 col.-constr. - CONSTRAINT - constraint - NULL - NOT - 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