Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Ähnliche Dokumente
Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Datenbanksysteme 2013

Die Anweisung create table

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

4. Datenbanksprache SQL

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

Praktische SQL-Befehle

Introduction to Data and Knowledge Engineering. 6. Übung SQL

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

Kapitel 8: Datenintegrität

Relationales Datenbanksystem Oracle

Schnellübersichten. SQL Grundlagen und Datenbankdesign

Übung Datenbanksysteme Updates, Integritätsbedingungen, funktionale Abhängigkeiten

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Oracle 10g Einführung

Datenbanken. Zusammenfassung. Datenbanksysteme

Im Folgenden möchten wir Ihnen einige Beispiele aufzeigen, wie ALTER TABLE gemäß SQL92 verwendet wird:

Datenbank und Tabelle mit SQL erstellen

SQL-Befehlsliste. Vereinbarung über die Schreibweise

Create-Table-Befehl. CREATE TABLE Tabellenname ( { Spalte { Datentyp Gebietsname } [ Spaltenbedingung [ ] ] Tabellenbedingung }

SQL structured query language

8. Tabellendefinition in SQL 8-1. Tabellendefinitionen

DB-Datenbanksysteme. DB SQL-DML 1 Mario Neugebauer

Übung Datenbanken in der Praxis. Datenmodifikation mit SQL

Grundlagen von Datenbanken. Referentielle Aktionen, Sichten, Serialisierbarkeit und Locking

SQL Data Manipulation Language (DML) und Query Language (QL)

Datenbanken Entity-Relationship-Modell und Datenbankentwurf 1. Andreas Heß Hochschule Furtwangen

1 Hartmann Anna Cäcilienstr Köln (0221) Behrens-Hoffmeister Heidi Lindenweg Köln (0221)

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Datenbanken im WI-Unterricht mit

Datenbanksysteme Kapitel 2: SQL Data Definition Language

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

6. Datendefinition in SQL

6. Datendefinition in SQL

5.8 Bibliotheken für PostgreSQL

Prakt. Datenbankprogrammierung. Sommersemester Was sind Constraints? I,11: Verwendung von Constraints. Festlegung von Constraints

5. Datendefinition in SQL

Übersicht der wichtigsten MySQL-Befehle

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

C++ Anwendungskurs Tag 4: Datenbanken Daniela Horn Institut für Neuroinformatik Real-time Computer Vision

dbis Praktikum DBS I SQL Teil 2

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #5. SQL (Teil 3)

Informatik für Ökonomen II: Datenintegrität. Prof. Dr. Carl-Christian Kanne

SQL-Befehlsliste. Vereinbarung über die Schreibweise

SQL: Weitere Funktionen

Datenintegrität. Kapitel 5 1

Wiederholung VU Datenmodellierung

Wiederholung VU Datenmodellierung

Grober Überblick zu Datendefinitionsanweisungen in SQL

SQL: statische Integrität

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Datenbank- und Informationssysteme - Übungsblatt 6 -

Grundlagen von Datenbanken

Übung ERM. Beispiel: Erstellung einer relationalen Datenbank

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

Datenintegrität. Kapitel 5 1

Inhalt. Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle. Daten und Tabellen - ein Beispiel. Daten und Tabellen - Normalisierung

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Erstellen und Verwalten von Tabellen

3.3. Implementierung in SQL DDL-Grundlagen Constraint-Verzögerung Implementierungs-Strategien

SQL und MySQL. Kristian Köhntopp

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort... 13

DB I S. 1 Referentielle Aktionen [10 P.] Gegeben sei folgende Datendefinition:

Einführung SQL Data Definition Language (DDL)

Sachverzeichnis. Symbole,67 -Verbund, 56, 85 \, 5,53 C C, 166, 188

Datenintegrität. Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung

Konstante Relationen

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

Integritätsbedingungen Eindeutige Identifikation (1)

Finalklausur zur Vorlesung Datenbanksysteme I Wintersemester 2003/2004 Prüfer: Prof. R. Bayer, Ph.D. Datum: Zeit: 16.

Management of Information Systems. Tutorat: Session 3 Einführung in SQL

Datenbanken. Datenintegrität + Datenschutz. Tobias Galliat. Sommersemester 2012

SQL-Programmteile in der Vorlesung. SQL-Vertiefung. Definition von Constraints. Constraint Typen

Abfragen (Queries, Subqueries)

A Datendenition in SQL ( Punkte)

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Datenbanksysteme I WS 18/19 Teillösung Übungsblatt 4-6

7. Datendefinition in SQL Datendefinition

7. Datendefinition in SQL Datendefinition

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Erzeugung und Veränderung von Tabellen

7. Datendefinition in SQL

7. Datendefinition in SQL

6. Datendefinition und Zugriffskontrolle

Praktische SQL-Befehle 2

Datenbanksysteme Kapitel: SQL Data Definition Language

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

1 Relationenalgebra [8 P.] Gegeben seien die folgenden Relationenschemata: Hafen(HNR, Ort, Grundsteinlegung)

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Kapitel DB:VI (Fortsetzung)

Vorlesung: Relationale Datenbanksysteme

Transkript:

Thomas Studer Relationale Datenbanken: Von den theoretischen Grundlagen zu Anwendungen mit PostgreSQL Springer, 2016 ISBN 978-3-662-46570-7 Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Datenbanken SQL zur Datendefinition und -manipulation Thomas Studer Institut für Informatik Universität Bern

INSERT Gegebenes Schema: Autos = (Marke, Farbe, Baujahr, FahrerId). INSERT INTO Autos VALUES ( Audi, silber, 2008, 3) INSERT INTO Autos VALUES ( Skoda, silber, 2009, Null) INSERT INTO Autos (Baujahr, Farbe, Marke) VALUES (2009, silber, Skoda )

INSERT mit SQL Abfrage fügt das Tupel INSERT INTO Autos SELECT Audi, silber, 2008, PersId FROM Personen WHERE Vorname = Eva AND Nachname = Meier ( Audi, silber, 2008, 3 ) in die Relation Autos ein, wenn Eva Meier die PersId 3 hat.

Sequenzen für Primärschlüssel CREATE SEQUENCE PersIdSequence START 10 SELECT nextval( PersIdSequence ) INSERT INTO Personen VALUES ( nextval( PersIdSequence ), Bob, Müller ) DROP SEQUENCE PersIdSequence

DELETE Eine Löschanweisung in SQL hat folgende Form: DELETE FROM <Relation> WHERE <Prädikat> Eine DELETE Anweisung wird in zwei Schritten ausgeführt: 1 Markiere zuerst alle Tupel in <Relation>, auf die <Prädikat> zutrifft. 2 Lösche die markierten Tupel aus der Relation <Relation>. DELETE FROM Autos WHERE FahrerId IN ( SELECT PersId FROM Personen WHERE Vorname = Eva AND Nachname = Meier )

Beispiel für das Zwei-Schritt-Vorgehen VaterSohn Vater Sohn Bob Tom Bob Tim Tim Rob Tom Ted Tom Rik Ted Nik DELETE FROM VaterSohn WHERE Vater IN ( SELECT Sohn FROM VaterSohn ) VaterSohn Vater Sohn Bob Tom Bob Tim

UPDATE UPDATE Autos SET Farbe = himmelblau WHERE Farbe = blau AND Baujahr > 2010 UPDATE Autos SET Baujahr = Baujahr - 1

CREATE TABLE CREATE TABLE TabellenName ( Attribut_1 Domäne_1,... Attribut_n Domäne_n ) Einige PostgreSQL Datentypen: integer Ganzzahlwert zwischen 2 31 und 2 31 1 serial Ganzzahlwert mit Autoinkrement boolean Boolscher Wert char Einzelnes Zeichen char(x) Zeichenkette mit der Länge x, gegebenenfalls wird sie mit Leerzeichen aufgefüllt varchar(x) Zeichenkette mit maximaler Länge x text Zeichenkette mit beliebiger Länge

DEFAULT CREATE TABLE Autos ( Marke varchar(10), Farbe varchar(10) DEFAULT schwarz ) Damit fügt die Anweisung INSERT INTO Autos (Marke) VALUES ( Audi ) das Tupel ( Audi, schwarz ) in die Tabelle Autos ein. Nach Ausführen des Statements INSERT INTO Autos VALUES ( VW, null) hat die Tabelle Autos folgende Form: Autos Marke Farbe Audi schwarz VW -

SERIAL CREATE TABLE Personen ( PersId integer DEFAULT nextval( PersIdSequence ), Vorname varchar(10), Nachname varchar(10) ) Wir können Bob Müller nun ganz einfach mit INSERT INTO Personen (Vorname,Nachname) VALUES ( Bob, Müller ) Das Statement CREATE TABLE TabellenName ( AttributName serial ) ist äquivalent zu CREATE SEQUENCE TabellenName_AttributName_seq; CREATE TABLE TabellenName ( AttributName integer DEFAULT nextval( TabellenName_AttributName_seq ) );

Constraints CREATE TABLE TabellenName ( Attribut_1 Domäne_1,... Attribut_n Domäne_n, Constraint_1,... Constraint_m ) Eine Ausnahme bilden NOT NULL Constraints, welche wir direkt hinter die entsprechenden Attribute schreiben.

Beispiel CREATE TABLE Autos ( Marke varchar(10), Farbe varchar(10), Baujahr integer NOT NULL, FahrerId integer, PRIMARY KEY (Marke, Farbe) ) CREATE TABLE Personen ( PersId integer PRIMARY KEY, Vorname varchar(10), Nachname varchar(10) )

Fremdschlüssel CREATE TABLE Autos ( Marke varchar(10), Farbe varchar(10), Baujahr integer NOT NULL, FahrerId integer, PRIMARY KEY (Marke, Farbe), FOREIGN KEY (FahrerId) REFERENCES Personen ) CREATE TABLE Autos ( Marke varchar(10), Farbe varchar(10), Baujahr integer NOT NULL, FahrerId integer REFERENCES Personen, PRIMARY KEY (Marke, Farbe) )

UNIQUE CREATE TABLE Personen ( PersId integer PRIMARY KEY, Vorname varchar(10), Nachname varchar(10), UNIQUE (Vorname, Nachname) ) CREATE TABLE Autos ( Marke varchar(10), Farbe varchar(10), Baujahr integer NOT NULL, FahrerVorname varchar(10), FahrerNachname varchar(10), PRIMARY KEY (Marke, Farbe), FOREIGN KEY (FahrerVorname, FahrerNachname) REFERENCES Personen(Vorname, Nachname) )

Fremdschlüssel CREATE TABLE S ( CREATE TABLE R ( Id integer PRIMARY KEY ) Fr integer REFERENCES S ) S Id 1 2 R Fr 1 2 Fehlermeldung: DELETE FROM S UPDATE S WHERE Id = 1 SET Id = 3 WHERE Id = 1 update or delete on table S violates foreign key constraint.

Kaskadierung bei DELETE CREATE TABLE R ( Fr integer REFERENCES S ON DELETE CASCADE ) DELETE FROM S WHERE Id = 1 R Fr 2 S Id 2

Kaskadierung bei UPDATE CREATE TABLE R ( Fr integer REFERENCES S ON UPDATE CASCADE ) UPDATE S SET Id = 3 WHERE Id = 1 R Fr 3 2 S Id 3 2

Kaskade CREATE TABLE S ( Id integer PRIMARY KEY ) CREATE TABLE R ( RId integer PRIMARY KEY, FrS integer REFERENCES S ON DELETE CASCADE) CREATE TABLE Q ( FrR integer REFERENCES R ON DELETE CASCADE) Q FrR A B R RId FrS A 1 B 2 S Id 1 2

Kasade 2 Nach Ausführen der Anweisung erhalten wir folgende Instanzen: DELETE FROM S WHERE Id = 1 Q FrR B R RId FrS B 2 S Id 2

SET NULL CREATE TABLE S ( Id integer PRIMARY KEY ) CREATE TABLE R ( RId integer PRIMARY KEY, Fr integer REFERENCES S ON DELETE SET NULL ON UPDATE SET NULL ) R RId Fr A 1 B 2 C 3 S Id 1 2 3

SET NULL 2 DELETE FROM S WHERE Id = 1 R RId Fr A - B 2 C 3 S Id 2 3 UPDATE S SET Id = 4 WHERE Id = 2 R RId Fr A - B - C 3 S Id 4 3

CHECK Constraints CREATE TABLE Autos ( Marke varchar(10), Farbe varchar(10), Baujahr integer, FahrerId integer, CHECK ( Farbe IN ( blau, rot )) ) CREATE TABLE Autos ( Marke varchar(10), Farbe varchar(10), Mietbeginn integer, Mietende integer, FahrerId integer, CHECK (Mietbeginn < Mietende) )

Beispiel Anforderungen: Eine Datenbank soll Autos und ihre Automarken verwalten. Zusätzlich werden noch Mechaniker verwaltet. Es wird abgespeichert, welche Mechaniker für welche Autos ausgebildet sind. Weiter wird abgespeichert welche Mechaniker wann welche Autos repariert haben. Ein Mechaniker kann ein Auto mehrfach (an verschiedenen Daten) reparieren. Er darf aber nur Autos reparieren, für deren Marken er ausgebildet wurde.

DB Schema Mechaniker MechId Name Reparaturen MechId AutoId Datum Mechaniker dürfen nur Autos reparieren, für die sie ausgebildet sind Ausbildung MechId MarkeId Autos AutoId MarkeId Marken MarkeId Name

Tabellen CREATE TABLE Mechaniker ( MechId integer PRIMARY KEY, Name varchar(10) ); CREATE TABLE Marken ( MarkeId integer PRIMARY KEY, Name varchar(10) ); CREATE TABLE Autos ( AutoId integer PRIMARY KEY, MarkeId integer NOT NULL REFERENCES Marken ); CREATE TABLE Ausbildung ( MechId integer REFERENCES Mechaniker, MarkeId integer REFERENCES Marken, PRIMARY KEY (MechId, MarkeId) );

Tabellen 2 CREATE TABLE Reparaturen ( MechId integer REFERENCES Mechaniker, AutoId integer REFERENCES Autos, Datum integer, PRIMARY KEY (MechId, AutoId, Datum) ) Gerne würden wir auch folgenden Constraint hinzufügen: CHECK ( EXISTS ( SELECT * FROM (Autos INNER JOIN Ausbildung USING (MarkeId)) AS Tmp WHERE Tmp.MechId = Reparaturen.MechId AND Tmp.AutoId = Reparaturen.AutoId ) ) Jedoch unterstützt PostgreSQL keine Subqueries in CHECK Constraints.

ALTER TABLE ALTER TABLE Marken RENAME TO Automarken ALTER TABLE Automarken RENAME Name TO Bezeichnung ALTER TABLE Autos ADD Baujahr INTEGER ALTER TABLE Automarken ADD UNIQUE(Bezeichnung) ALTER TABLE Autos ADD CHECK(Baujahr > 2010) Andere Syntax für NOT NULL Constraints, da diese nur ein Attribut betreffen: ALTER TABLE Mechaniker ALTER Name SET NOT NULL

Views Sichten (oder Views) sind virtuelle Tabellen, die mittels SQL Abfragen definiert werden. Eine Sicht kann einen Ausschnitt aus einer Tabelle präsentieren, aber auch einen Verbund von mehreren Tabellen. Somit können Views: 1 komplexe Daten so strukturieren, dass sie einfach lesbar sind, 2 den Zugriff auf Daten einschränken, so dass nur ein Teil der Daten lesbar ist (anstelle von ganzen Tabellen), 3 Daten aus mehreren Tabellen zusammenfassen, um Reports zu erzeugen.

CREATE VIEW CREATE VIEW AlteAutos AS SELECT * FROM Autos WHERE Baujahr <= ALL ( SELECT Baujahr FROM Autos) SELECT Vorname, Nachname FROM Personen INNER JOIN AlteAutos ON (PersId = FahrerId)

Materialisierte Views Materialisierte Views sind Views, die nicht bei jeder Verwendung neu berechnet werden, sondern nur einmal zum Zeitpunkt ihrer Kreation. Dies bedeutet natürlich einen Performancegewinn bei Abfragen, da auf das vorberechnete Resultat der View zurückgegriffen werden kann. Dafür können materialisierte Views temporär nicht-aktuelle Daten enthalten.

CREATE MATERIALIZED VIEW CREATE MATERIALIZED VIEW AlteAutos AS SELECT * FROM Autos WHERE Baujahr <= ALL ( SELECT Baujahr FROM Autos) INSERT INTO Autos VALUES ( Audi, silber, 2008, 3) REFRESH MATERIALIZED VIEW AlteAutos