softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf ·...

30
© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-Landau Seite Grundlagen relationaler Datenbanken SOFTLANG Team, Universität Koblenz-Landau http://softlang.wikidot.com/startseite Prof. Dr. R. Lämmel 1 http://softlang.wikidot.com/course:dbintro © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-Landau Seite Gliederung 1. Einführung 2. Das Relationale Modell 3. Datendefinition (SQL DDL) 4. Datenmanipulation (SQL DML) 5. Eingebettete Programmierung 6. Objektrelationale Abbildung 7. … ? 2 softlang.wikidot.com/course:dbintro © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-Landau Seite Einführung SQLware als ein Technologischer Raum Das 101companies-Projekt als didaktische Hilfe Befragung der Seminarteilnehmer 3 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-Landau Seite Technologische Räume SQLware ist ein technologischer Raum. Es ist einer von vielen. 4

Transcript of softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf ·...

Page 1: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Grundlagen relationaler Datenbanken

SOFTLANG Team, Universität Koblenz-Landau http://softlang.wikidot.com/startseite

Prof. Dr. R. Lämmel

1

http://softlang.wikidot.com/course:dbintro

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Gliederung1. Einführung!

2. Das Relationale Modell

3. Datendefinition (SQL DDL)

4. Datenmanipulation (SQL DML)

5. Eingebettete Programmierung

6. Objektrelationale Abbildung

7. … ?

2

softlang.wikidot.com/course:dbintro

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Einführung

• SQLware als ein Technologischer Raum

• Das 101companies-Projekt als didaktische Hilfe

• Befragung der Seminarteilnehmer

3 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Technologische Räume!!

SQLware ist ein technologischer Raum. Es ist einer von vielen.

4

Page 2: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Technologischer Raum = Technologie mit gemeinschaftlichen IT-Kontext

5

• SQLware — Etablierter Raum für Datenverwaltung • COBOLware — Klassischer Raum für geschäftl. Progr. • Javaware — Etablierter Raum für OO-Programmierung • XMLware — Interoperabilität für Datenaustausch • JSONware — Weiterer Raum für Interoperabilität • UMLware — Raum für Softwaremodellierung • MDEware — Model Driven Engineering • RDFware — Semantic Web und Linked Data

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Bestandteile eines technologischen Raumes

6

• Anwendungsszenarien

• Programmiersprachen

• Datenrepräsentationsformate

• Entwicklungswerkzeuge wie Compiler oder IDEs

• Laufzeitwerkzeuge wie Bibliotheken

• Anfrage- und Transformationssprachen

• Lehrbücher und andere Wissensquellen der Gemeinschaft

• …

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 7

Unterteilung der technologischen Räume nach dem „Daten“paradigma• Tabellen!

• Relationale Tabelle (SQL) • Schlüsselindizierte Dateien (Cobol)

• Bäume!• XML-Bäume • JSON-Bäume • Algebraische Terme (etwa in Haskell und F# und Skala)

• Graphen!• Objektgraphen (etwa in Java) • Modelle (etwa Objektdiagramme in UML)

Es gibt auch „Tricks“, um in XML und JSON mit Graphen zu arbeiten.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 8

Bäume versus Tabellen versus Graphen

http://en.wikipedia.org/wiki/File:PSM_V18_D630_Restoration

_of_a_lepidodendron.jpg

XML für eine Firma

Page 3: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 9

Bäume versus Tabellen versus Graphen

Id Name Address Salary Manager Department

1 Craig Redmond 123456 TRUE 42

2 Erik Utrecht 12345 FALSE 42

3 Ralf Koblenz 1234 FALSE 42

… … … … … …

Id Name Department Company

42 Research NULL 88

43 Development NULL 88

44 Dev1 43 88

… … … …

Employee

DepartmentId Name

88 ACME Corporation

… …

Company

Tabellen für eine Firma

Fremdschlüssel

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 10

Name ACME CorporationDepartments [o,…]

Name CraigAddress RedmondSalary 123456

Manager TRUE

:EmployeeName Erik

Address UtrechtSalary 12345

Manager FALSE

:EmployeeName Ralf

Address KoblenzSalary 1234

Manager FALSE

:Employee

:Company

Name ResearchDepartments […]Employees [o, o, o]

:Department

Bäume versus Tabellen versus Graphen

Objektgraph für eine Firma

Zeiger

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 11

• Prozedural (z.B. Cobol) • OO (z.B. Java) • Deklarativ

• Funktional (z.B. F#) • Logisch (z.B. Prolog) • Algebraisch (z.B. SQL)

• Modell-basiert (z.B. UML) • Multi-Paradigma

Ein Programmierparadigma ist ein fundamentaler Programmierstil. […] „Der Programmierung liegen je nach Design der einzelnen Programmiersprache verschiedene Prinzipien zugrunde. […] Programmierparadigmen unterscheiden sich durch ihre Konzepte für die Repräsenta t ion von s ta t i schen (wie beispielsweise Objekte, Methoden, Variablen, Konstanten) und dynamischen (wie beispielsweise Zuweisungen, Kontrollfluss, Datenfluss) Programmelementen.

http://de.wikipedia.org/wiki/Programmierparadigma

3.Juni 2014

Unterteilung der technologischen Räume nach dem „Programmier“paradigma

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 12

Das OO-Paradigma

• Objekte kapseln Zustand (Daten) und Verhalten (Methoden).

• Objekte haben eine Schnittstelle = aufrufbare Methoden.

• Allein die Methoden greifen auf die Daten zu.

• Neue Objekte können instanziiert werden mittels Klasse bzw. Prototyp.

Message

Daten

Methode1

Methoden- auswahl

Methode2

Page 4: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 13

Objekte als Abstraktion von physischen oder virtuellen Entitäten

Abstraction

Attribute

Methods

: Person

Birthday: 15.12.68Name: Lämmel

programeat

ValuesType of object

First: Ralf

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Jedes Ding ist ein Objekt!• Physische Entitäten:

z.B. ein Student oder ein Haus

• Beobachtbare Entitäten: z.B. eine Wettersituation

• Virtuelle Entitäten: z.B. ein Konto in einer Online-Bank

• Programmierte Entitäten: z.B. ein Fenster oder ein Druckauftrag

14

Unterscheidung von Objekten in Analyse, Entwurf und Implementation.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 15

Einführendes Beispiel: Wir wollen die Struktur für eine Anwendung

im Personalwesen modellieren.

MSFT

VB C#

DevHR

AndersErikPaul

Unternehmen

Abteilungen

Unter-abteilungen

Angestellte

Wir sehen auch Methoden vor: „total“

zum Gehaltssummieren und „cut“ zum Halbieren.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 16

http://101companies.org/wiki/Contribution:argoUML

Teil-Ganzes-Beziehung

UML-Klassendiagramm für die Unternehmensstruktur

Ausgewählte Methoden

Page 5: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 17

Eine Java-Klasse I/II

public class Department {

private String name; private Employee manager; private List<Department> subdepts = new LinkedList<Department>(); private List<Employee> employees = new LinkedList<Employee>(); public String getName() { return name; } public void setName(String name) { this.name = name; } public Employee getManager() { return manager; } public void setManager(Employee manager) { this.manager = manager; } public List<Department> getSubdepts() { return subdepts; } public List<Employee> getEmployees() { return employees; }

// Methods omitted}

Privater Zustand

Getter und Setter für DatenzugriffNächste Folie

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 18

Eine Java-Klasse II/II

public class Department {

// State omitted

public double total() { double total = 0; total += getManager().getSalary(); for (Department s : getSubdepts()) total += s.total(); for (Employee e : getEmployees()) total += e.getSalary(); return total; }

public void cut() { getManager().cut(); for (Department s : getSubdepts()) s.cut(); for (Employee e : getEmployees()) e.cut(); } }

Steige in Objekt und aggregiere Gehälter

Steige auch ab, aber modifiziere Gehälter

Vorige Folie

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Anforderungen an SQLware

• Programmiersprachenunabhängige Datenmodellierung

• Persistenz für Programmdaten

• Effizienz für schlüsselbasierten Zugriff und große Datenmengen

• Trennung von Daten und Funktionalität

• Deklarative Anfragesprache

• Datenintegrität

19

Im Gegensatz zu Cobol und Java

Im Gegensatz zu (Basis-) OOP

Im Gegensatz zu XML

Im Gegensatz zu OOP

Im Gegensatz zu OOP und Cobol. Dies ist die Basis von Optimierungen.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

101companies!!

Didaktische Verwendung eines Projektes der AG Softwaresprachen in diesem Seminar.

20

Page 6: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Verwendung des 101companies-Projektes (Ein Projekt der Arbeitsgruppe SOFTLANG)

• Relevante Ziele des Seminars

• Beschauen von relationalen Schemabeispielen

• Beschauen von SQL-Anfragebeispielen

• Beispielhafte Verbindung zur OO-Programmierung

• Bereitstellung von Ressourcen zu Konzepten

21 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 22

Company X: Cobol

!!!!

Company Y: Java + Swing + Hibernate

!!!!

Company Z: Python + Django + HTML5

!!!!

... !!!!

Eine Wissensbasis zu Programmier- bzw.

Softwaretechnologien, -techniken, und -

sprachen — auf der Basis der

beispielhaften Implementation bzw.

Modellierung eines Informationssystems

für das Personalwesen.

Was ist das 101companies Projekt?

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 23

Company X: Cobol

!!!!

Company Y: Java + Swing + Hibernate

!!!!

Company Z: Python + Django + HTML5

!!!!

... !!!!

Aus dem Englischen:

„101 ways of doing something“

Warum der Name „101companies“?

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 24

Ein Informationssystem für das Personalwesen

Features!• „total“: Gehälter summieren • „cut“: Gehälter halbieren • Nutzerinterface • Persistenz in der Datenbank • …

Page 7: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 25

Demo http://101companies.org/wiki/Contribution:cobol

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 26

Ein paar Zahlen zum Projekt „101“

8

442

#Files per implementation Technologies

Languages LOC per implementation

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Fragebogen• Wer ist im technologischen Raum Cobolware unterwegs?

• Wer hat schon nennenswert SQL-Anfragen benutzt?

• Wen interessiert die Verbindung Datenbank und OOP?

• … die Verbindung Datenbank und WebApp?

• … NoSQL anstatt allein SQL?

• … fortgeschrittene SQL-Themen wie Trigger und Gespeicherte Prozeduren?

• …

27

Eine Vorstellungsrunde der Seminarteilnehmer?

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Gliederung1. Einführung

2. Das Relationale Modell!

3. Datendefinition (SQL DDL)

4. Datenmanipulation (SQL DML)

5. Eingebettete Programmierung

6. Objektrelationale Abbildung

7. … ?

28

softlang.wikidot.com/course:dbintro

Page 8: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Das Relationale Modell!!

Grundlage der relationalen Datenbanken. Grundlage des technologischen Raumes SQLware.

29 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 30

Relationen (Tabellen)

Relation (Tabelle)!Vertikal: Menge von Tupeln (“Zeilen”)!Horizontal: Menge von Spalten!

Jede Zelle ist von einem primitiven Typ: !Zeichenkette (String)!Zahlen (INTEGER, DOUBLE, …)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 31

Relationale Schemata zur Definition der Tabellenstruktur

company (id INT, name STR)!

department (id INT, name STR, cid INT, did INT)!

employee (id INT,!! ! ! ! ! ! ! ! ! ! ! !! name STR, address STR, salary NUM, manager BOOL,!! cid INT, did INT)

Schlüsselbedingungen („Key constraints“): Ein primärer Schlüssel (unterstrichen) dient der eindeutigen Identifikation einer Zeile. Ein sekundärer Schlüssel (kursiv) ist ein Verweis

auf eine Zeile einer anderen Tabelle.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 32

Relationale Schemata zur Definition der Tabellenstruktur

company (id INT, name STR)!

department (id INT, name STR, cid INT, did INT)!

employee (id INT,!! ! ! ! ! ! ! ! ! ! ! !! name STR, address STR, salary NUM, manager BOOL,!! cid INT, did INT)

VarianteDie Firma eines Angestellten ist

auch über die Zuordnung zu einer Abteilung repräsentiert.

Page 9: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 33

Relationale Schemata zur Definition der Tabellenstruktur

company (id INT, name STR)!

department (id INT, name STR, cid INT, did INT, mid INT)!

employee (id INT,!! ! ! ! ! ! ! ! ! ! ! !! name STR, address STR, salary NUM, manager BOOL,!! cid INT, did INT)

VarianteDer Manager einer Abteilung kann

auch über die Abteilung direkt beschrieben werden.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 34

Relationale Algebra zur „Berechnung“ neuer Tabellen

Projektion (Wähle Spalten aus.)!

Selektion (Wähle Zeilen aus.)!

Join (Füge zwei Tabellen horizontal zusammen.)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 35

Projektion (Wähle Spalten aus.)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 36

Selektion (Wähle Zeilen aus.)

Page 10: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 37

Join (Füge zwei Tabellen horizontal zusammen.)

Company NameACME CorporationACME CorporationACME CorporationACME CorporationACME CorporationACME CorporationACME Corporation

Ergänze die Tabelle „Employee“ um die Spalte mit dem Firmennamen aus der Tabelle „Company“

vermöge „Join“ über den Schlüssel für die Firma.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Normalformen!!

Vermeidung von Redundanzen. Vermeidung von Problemen bei CRUD.

Unterstützung der Datenintegrität.

38

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Probleme bei fehlender Normalisierung

39

• Änderungsanomalie: Um die Adresse eines Studenten zu ändern, müssen eventuell mehrere Zeilen geändert werden — sonst werden die Daten inkonsistent.

• Einfügungsanomalie: Das Einfügen eines neuen Studenten ohne die gleichzeitige Zuordnung zu einem Kurs erfordert einen NULL-Wert für Subject_opted.

• Entfernungsanomalie: Das Entfernen einer Belegung eines Kurses führt u.U. zum totalen Entfernen des Studierenden aus der Datenbank, wenn keine weiteren Kursbelegungen vorliegen.

Quelle: http://www.studytonight.com/dbms/database-normalization.php

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Erste Normalform (1NF)

40

Quelle: http://www.studytonight.com/dbms/database-normalization.php

Alle Zellen enthalten nur atomare Daten. Es gibt keine Wiederholungsgruppen von Spalten.

Nicht in 1NF

In 1NFPrimärschlüssel

sei dies: Student, Subject

Page 11: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Zweite Normalform (2NF)

41

Quelle: http://www.studytonight.com/dbms/database-normalization.php

Es liegt 1NF vor. Es hängt kein Nichtschlüsselattribut funktional ab von einem Teil des Schlüssels.

Nicht In 2NF

„Age“ hängt allein von „Student“ ab. (Es hängt nicht von „Subject“ ab.)

Primärschlüssel ist noch dies:

Student, Subject

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Zweite Normalform (2NF)

42

Quelle: http://www.studytonight.com/dbms/database-normalization.php

Es liegt 1NF vor. Es hängt kein Nichtschlüsselattribut funktional ab von einem Teil des Schlüssels.

In 2NF

Extra Tabelle

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Dritte Normalform (3NF)

43

Quelle: http://www.studytonight.com/dbms/database-normalization.php

Es liegt 2NF vor. Es gibt keine transitiven funktionalen Abhängigkeiten.

Tabelle Student_Detail (Nicht in 3NF)

Tabelle Student_Detail (In 3NF)

Tabelle Address (Zusätzlich)

„State“ und eventuell auch „Street“ und „city“ hängen von „Zip“ ab.

Eine extra Tabelle mit Zip, … als primärem Schlüssel

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Gliederung1. Einführung

2. Das Relationale Modell

3. Datendefinition (SQL DDL)!

4. Datenmanipulation (SQL DML)

5. Eingebettete Programmierung

6. Objektrelationale Abbildung

7. … ?

44

softlang.wikidot.com/course:dbintro

Page 12: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

SQL (Structured Query Language)!!

Die Datendefinitions-, Anfrage-, und Transformationssprache des

technologischen Raumes SQLware.

45 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 46

SQL (Structured Query Language) http://101companies.org/wiki/Language:SQL

• Teile von SQL • Datendefinition („Definiere relationale Schemata.“) • Datenmanipulation

• Anfragen („Relationale Algebra“) • Der Rest von CRUD:!

• Create: Einfügen von Zeilen (INSERT in SQL) • Read: Anfragen (SELECT in SQL) • Update: Ändern (UPDATE in SQL) • Delete: Löschen (DELETE in SQL)

Der Fokus auf „Query“ (Anfrage) im Namen ist eventuell irreführend.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 47

Datendefinition!!

(SQL DDL — Data Definition Language)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 48

Datendefinition für eine Tabelle

CREATE TABLE company (!

! id INTEGER PRIMARY KEY,!

! name VARCHAR(100) UNIQUE NOT NULL!

)

company (id INT, name STR)

Relationales Schema

SQL DDL

Page 13: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 49

Mehr Details der Datendefinition

CREATE TABLE department (!

! id INTEGER PRIMARY KEY,!

! name VARCHAR(100) NOT NULL,!

! cid INTEGER NOT NULL,!

! did INTEGER,!

! FOREIGN KEY (cid) REFERENCES company(id),!

! FOREIGN KEY (did) REFERENCES department(id)!

)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 50

Datendefinition für eine weitere Tabelle

CREATE TABLE employee (!! id INTEGER PRIMARY KEY,!! name VARCHAR(50) NOT NULL,!! address VARCHAR(50) NOT NULL,!! salary DOUBLE NOT NULL,! manager BOOL NOT NULL,!! cid INTEGER NOT NULL,!! did INTEGER NOT NULL,!! FOREIGN KEY (cid) REFERENCES company(id),!! FOREIGN KEY (did) REFERENCES department(id)!)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 51

Zusammenfassung zu SQL DDL

CREATE TABLE!

INTEGER, VARCHAR(…), DOUBLE, BOOL!

NOT NULL, UNIQUE!

PRIMARY / FOREIGN KEY … REFERENCES

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Gliederung1. Einführung

2. Das Relationale Modell

3. Datendefinition (SQL DDL)

4. Datenmanipulation (SQL DML)!

5. Eingebettete Programmierung

6. Objektrelationale Abbildung

7. … ?

52

softlang.wikidot.com/course:dbintro

Page 14: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 53

Datenmanipulation!!

(SQL DML — Data Manipulation Language)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 54

CRUD

• C: Create (Insert in SQL)

• R: Read (Select in SQL)

• U: Update (Update in SQL)

• D: Delete (Delete in SQL)

CRUD ist älter als SQL. CREATE im Sinne von SQL ist nicht das CREATE im Sinne von CRUD.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 55

CRUD (CREATE)

INSERT INTO company (name) VALUES ("Acme Corporation")

Füge eine Firma in die Tabelle „Company“ ein.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 56

CRUD (CREATE)

INSERT INTO department (name,cid) VALUES ("Research",1) INSERT INTO department (name,cid) VALUES ("Development",1) ...

Füge Zeilen für verschiedene Abteilungen in die Tabelle

„Department“ ein.

Page 15: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 57

CRUD (READ)

SELECT * FROM department

Selektiere alle Zeilen und Spalten von der Tabelle „Department“.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 58

Demo von SQL DDL und einfachsten Anfragen

http://101companies.org/wiki/Contribution:mySqlMany

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 59

CRUD (READ)

SELECT name, salary FROM employee

Projektion: Liste die Spalten für Namen und Gehalt aus der Tabelle „Employee“

auf.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 60

CRUD (READ)SELECT name, salary FROM employee WHERE manager = TRUE

Selektion: Auswahl der Zeilen von

Angestellten, welche Manager sind.

Page 16: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 61

CRUD (READ)SELECT name, salary FROM employee ORDER BY salary

Die Sortierung der Zeilen erfolgt

aufsteigend nach Gehalt.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 62

CRUD (READ)SELECT name, salary FROM employee ORDER BY salary ASC

Sortierung in aufsteigender

Ordnung

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 63

CRUD (READ)SELECT name, salary FROM employee ORDER BY salary DESC

Sortierung in absteigender

Ordnung

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 64

CRUD (READ)SELECT department.name, company.name FROM department, company WHERE cid = company.id

Führe ein „Join“ aus, um Namen für Abteilungen und Firmen zu kombinieren.

Das ist ein „Equi-Join“.

Page 17: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 65

CRUD (READ)

SELECT d1.name, d2.name FROM department AS d1, department AS d2

Alle Kombinationen von Abteilungsnamen. Dieses

Beispiel ist vermutlich wenig sinnvoll.

Das ist ein „Cross-Join“.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 66

CRUD (READ)

SELECT d1.name, d2.name FROM department AS d1, department AS d2 WHERE d1.did = d2.id

Das ist ein „Equi-Join“.

INNER JOIN: Zeige die übergeordnete Abteilung für jede Abteilung. (Wir verwenden auch Aliasing.)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 67

CRUD (READ)SELECT d1.name, d2.name FROM department AS d1 INNER JOIN department AS d2 WHERE d1.did = d2.id

INNER JOIN: Zeige die übergeordnete Abteilung für jede Abteilung. (Wir verwenden auch Aliasing.)

Explizite Join-Notation

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 68

CRUD (READ)SELECT d1.name, d2.name FROM department AS d1 LEFT OUTER JOIN department AS d2 ON d1.did = d2.id

LEFT OUTER JOIN: Zeilen mit NULL-Schlüssel werden trotzdem gezeigt.

Page 18: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 69

CRUD (READ)SELECT d1.name, d2.name FROM department AS d1 LEFT JOIN department AS d2 ON d1.did = d2.id

Optionales Schlüsselwort.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

INNER versus OUTER JOIN

70

Quelle: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

Zwei Beispieltabellen

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

INNER JOIN

71

Quelle: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

Das Ergebnis enthält allein die passenden Zeilen aus beiden Tabellen.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

FULL OUTER JOIN

72

Quelle: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

Das Ergebnis enthält alle Zeilen aus beiden Tabellen.

Page 19: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

LEFT OUTER JOIN

73

Quelle: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

Das Ergebnis enthält die Zeilen der erste Tabelle und möglicherweise leere Spalten für die zweite Tabelle.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

LEFT OUTER JOIN mit WHERE

74

Quelle: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

Wir zeigen hier nur Zeilen mit passenden Zeilen aus der ersten Tabelle.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

FULL OUTER JOIN mit WHERE

75

Quelle: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 76

CRUD (READ)

SELECT SUM(salary) FROM employee

Summiere die Gehälter aller Angestellten auf,

Das ist eine Aggregationsfunktion zur Summierung.

Resultat ist Zahl!

Page 20: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 77

CRUD (READ)

SELECT SUM(salary) FROM employee WHERE cid = 1

Summiere nur die Gehälter von einer Firma auf.

Das ist eine Bedingung zu den Angestellten von Interesse.

Achtung: Unsere Beispieldaten benutzen ohnehin nur eine Firma. Resultat

ist Zahl!

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 78

CRUD (READ)

SELECT SUM(salary) FROM employee WHERE manager = true;

Summiere nur die Gehälter von Managern auf.

Das ist eine Bedingung zu den Angestellten von Interesse.Resultat

ist Zahl!

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 79

CRUD (READ)

SELECT SUM(salary) FROM employee WHERE cid = 1 AND manager = TRUE

Summiere nur die Gehälter von Managern aus einer Firma auf.

Wir kombinieren zwei Bedingungen.Resultat

ist Zahl!

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 80

CRUD (READ)

SELECT SUM(salary) FROM employee WHERE cid = (SELECT id FROM company WHERE name = "Acme Corporation")

Benutze eine verschachtelte Anfrage um den bekannten Namen einer Firma auf den Schlüsselwert abzubilden.

Resultat ist Zahl!

Page 21: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 81

CRUD (READ)SELECT manager, SUM(salary) FROM employee GROUP BY manager

Eine Aggregation wird ermitteln für

Gruppen mit gemeinsamen Wert

für eine Spalte.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 82

CRUD (UPDATE)

UPDATE employee SET salary = salary / 2

Halbiere alle Gehälter.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 83

CRUD (UPDATE)

UPDATE employee SET salary = salary / 2 WHERE manager = TRUE

Schränke die betroffenen Angestellten ein.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 84

Demo von SQL DML

http://101companies.org/wiki/Contribution:mySqlMany

Page 22: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 85

https://github.com/101companies/101repo/tree/master/contributions/mySqlMany/scripts

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Gliederung1. Einführung

2. Das Relationale Modell

3. Datendefinition (SQL DDL)

4. Datenmanipulation (SQL DML)

5. Eingebettete Programmierung!

6. Objektrelationale Abbildung

7. … ?

86

softlang.wikidot.com/course:dbintro

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Eingebettete Programmierung!!

Die Verbindung zwischen SQL (relationalen Datenbanken) und

Programmierung in Java (und Cobol).

87 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Eingebettete Anfragen am Beispiel von „Total“

88

String-Repräsentation von SQL-Anfragen

Explizit Deklaration von Anfrageparametern

Vorüberprüfung der AnfrageEintragen des

Parameters

Ausführen der Anfrage

Iteration über die Antwort

Page 23: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Wesentliche Typen im Umgang mit Eingebetteter Programmierung

• Connection: Verbindung zum Datenbanksystem

• (Prepapred)Statement: Repräsentation SQL-Anfragen

• ResultSet: Sequenzen von Resultaten (Zeilen als Felder)

• SQLException: Besondere Ausnahme in diesem Kontext

89 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Eingebettete Anfragen am Beispiel von „Cut“

90

Beim C, U, D von CRUD gibt es keine Resultatssequenz sondern

nur ein „Return code“.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Server- versus Client-seitige Anfragen

91

Client-seitige Ausführung

Server-seitige Ausführung

Server- versus Client-seitige Anfragen

• Anfragen nach Möglichkeit auf dem Server

Minimierung des Datenvolumens für Übertragung

Möglichkeit der Optimierung auf dem Server

Quelle: http://www.codeproject.com/Articles/22839/SQL-Server-Interview-Questions-Part

Page 24: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

SQL-Einschleusung (SQL Injection)

• Modifikation der Intention einer parametrischen SQL-Anfragen durch Ausnutzung von Metazeichen / Maskierung mittels Nutzereingaben.

• Beispiel (Quelle: http://en.wikipedia.org/wiki/SQL_injection):

• Anzeige von Nutzerdetails:

• "SELECT * FROM users WHERE name ='" + userName + „';"

• Möglicher aktueller Parameter userName:

• ' or '1'='1

93

Damit wird Information über ALLE Nutzer preisgegeben anstatt über einen bestimmten Nutzer.

Ähnlich kann man ein „DROP TABLE“ injizieren.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 94

Demo von SQL DML

http://101companies.org/wiki/Contribution:simplejdbc

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 95

https://github.com/101companies/101simplejava/tree/master/contributions/simplejdbc

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Gliederung1. Einführung

2. Das Relationale Modell

3. Datendefinition (SQL DDL)

4. Datenmanipulation (SQL DML)

5. Eingebettete Programmierung

6. Objektrelationale Abbildung!

7. … ?

96

softlang.wikidot.com/course:dbintro

Page 25: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Objektrelationale Abbildung!!

Datenmanagement allein auf der OO-Ebene etwa mit Persistenz vermöge gekoppelter (abgebildeter) Tabellen.

97 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 98

Abbildung zwischen O/R/X

Tabellen

Objekte

XML

Das ist nicht wirklich ein Dreieck. Beispiele: Cobol and JSON

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 99

Interplanetarische Reisen zwischen den technologischen Räumen SQLware und Javaware

Quelle: http://www.nasa.gov/images/content/63114main_highway_med.jpg

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 100

Sesame

XMIModelwareXMLware

JavawareJDBC

Dataware

JDOM

Ontoware

JenaHibernate

EMF.genJMITeneo JAXB

JPA

Technologien für die Raumfahrt

Page 26: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Warum ist (technologische) Raumfahrt eine Herausforderung?

• Verschiedene Terminologien und Koventionen

• Verschiedene Berechnungsmodelle und Typsysteme

• Abhängigkeit von konkreten Sprachen und Technologien

• Unnötige Komplexität

• …

101

Stichworte: „Impedance

mismatch“ oder „Vietnam

of Computer Science“

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Zur Erinnerung: Ein Objektmodell für Firmen

102

public class Company { private String name; private List<Department> depts = new LinkedList<Department>(); public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Department> getDepts() { return depts; }}!public class Department { ... }!public class Employee { ... }

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Zum Vergleich: Ein XML-Schema für Firmen

103

<xs:element name="company"> <xs:complexType> <xs:sequence> <xs:element ref="name"/> <xs:element maxOccurs="unbounded" minOccurs="0"

ref="department"/> </xs:sequence> </xs:complexType> </xs:element>! <xs:element name="department"> ... </xs:element> ! <xs:complexType name="employee"> ... </xs:complexType>

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Zum Vergleich: Ein relationales Schema

104

CREATE TABLE company (!

! id INTEGER PRIMARY KEY,!

! name VARCHAR(100) UNIQUE NOT NULL!

)!

CREATE TABLE department ( ... )!

CREATE TABLE employee ( ... )Im Vergleich zum

Objektmodell: Abteilungen referenzieren die Firma und nicht umgekehrt.

Page 27: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Ziel• Persistieren von Objekten in einer Datenbank

• Abbilden von Objektmodellen auf relationale Schemata

• Abbilden von relationalen Schemata auf Objektmodelle

• Vermittlung zwischen Modellen/Schemata beidseitig

105 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 106

Persistenz (am Beispiel von Hibernate/JPA)

Fähigkeiten!

Speicherung von Objekten in der DB; eine Zeile pro Objekt.!

Reaktivierung von Objekten in späteren Programmläufen.

http://www.hibernate.org

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 107

Die Architektur von Hibernate

Quelle: http://www.up.ac.za/services/it/intranet/sysops/docs/hibernate/HibernateSingleHTML.htm

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 108

Eine persistierbare Klasse (POJO)

public class Cat { private String id; private String name; private char sex; private float weight; public String getId() { return id; } private void setId(String id) { this.id = id; } // … other getters and setters … }

Verwendung für Primärschlüssel

Page 28: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 109

Metadaten für Abbildung

<hibernate-mapping> <class name=“Cat" table="CAT“> <id name="id" type="string" unsaved-value="null" > <column name="CAT_ID" sql-type="char(32)" not-null="true"/> <generator class="uuid.hex"/> </id> <property name="name“> <column name="NAME" length="16" not-null="true"/> </property> <property name="sex"/> <property name="weight"/> </class> </hibernate-mapping>

Bilde Java-Strings auf

SQL-Strings ab.

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 110

Die resultierende Tabelle

! Column | Type | Modifiers --------+-----------------------+----------- cat_id | character(32) | not null name | character varying(16) | not null sex | character(1) | weight | real | !Index: cat_pkey primary key btree (cat_id)

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 111

Eine Hibernate-„Sitzung“ in einem Java-Programm

Session session = HibernateUtil.currentSession(); Transaction tx= session.beginTransaction(); !Cat princess = new Cat(); princess.setName("Princess"); princess.setSex('F'); princess.setWeight(7.4f); !session.save(princess); tx.commit(); HibernateUtil.closeSession();

Registrierung eines Objektes für Persistenz

Regulärer OO-Code

Beginn einer Transaktion

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 112

Query query = session.createQuery( "select c from Cat as c where c.sex = :sex"); query.setCharacter("sex", 'F'); for (Iterator it = query.iterate(); it.hasNext();) { Cat cat = (Cat) it.next(); out.println("Female Cat: " + cat.getName() ); }

Verwendung von Anfragen zur Herstellung von Objekten

Es kommt hier HQL (Hibernate Query Language) zum Einsatz. HQL ist sehr ähnlich zu SQL.

Page 29: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 113

Demo von Hibernate für das 101companies-Projekt

101companies.org/wiki/Contribution:hibernate

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 114

Konfiguration von Hibernate

Aufrufbeispiele

Verzeichnis mit HSQLDB-DB

Objektmodell mit Abbildungsdateien

SQL-Dateien mit relationalem Schema und Beispieldaten

Typische Funktionalität

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 115

Eine POJO-Klassepublic class Employee {! private long id; private String name; private String address; private double salary; private boolean manager;! public long getId() { return id; } @SuppressWarnings("unused") private void setId(long id) { this.id = id; }...

}

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 116

Abbildung für Angestellte

<hibernate-mapping>

<class name="org.softlang.company.Employee" table="EMPLOYEE">

<id name="id" column="ID"> <generator class="native" /> </id>

<property name="name" /> <property name="address" /> <property name="salary" /> <property name="manager" />

</class>

</hibernate-mapping>

Page 30: softlang.wikidot.com/course:dbintro Gliederungsoftlang.uni-koblenz.de/dbintro/dbintro4.pdf · private List subdepts = new LinkedList(); private

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 117

Abbildung für Abteilungen<hibernate-mapping>

<class name="org.softlang.company.Department" table="DEPARTMENT"> <id name="id" column="ID"> <generator class="native" /> </id>

<property name="name" />

<set name="employees" cascade="all"> <key column="DEPT_ID" /> <one-to-many class="org.softlang.company.Employee" /> </set>

<set name="subdepts" cascade="all"> <key column="DEPT_ID" /> <one-to-many class="org.softlang.company.Department" /> </set>

</class>

</hibernate-mapping>

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite 118

Konfiguration von Hibernate

<hibernate-configuration> <session-factory> <!-- Database connection settings. --> <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:hsql://localhost</property> <property name="connection.username">sa</property> <property name="connection.password"></property>

<!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

<!-- Create the database schema, if needed; update otherwise --> <property name="hbm2ddl.auto">update</property>

<!-- Mapping files in the project --> <mapping resource="org/softlang/company/Company.hbm.xml" /> <mapping resource="org/softlang/company/Department.hbm.xml" /> <mapping resource="org/softlang/company/Employee.hbm.xml" />

... </session-factory></hibernate-configuration>

© 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Auslassungen• ER-Modell

• Trigger

• Gespeicherte Prozeduren

• Transaktionen

• No-SQL

• OO-Datenbanken

• Datenbanken im Kontext von WebApps

119 © 2014 Ralf Lämmel & SOFTLANG, Universität Koblenz-LandauSeite

Danke für Ihre Aufmerksamkeit und Teilnahme. Bitte evaluieren

Sie dieses Seminar.

120

Ihr SOFTLANG Team. Prof. Dr. R. Lämmel

http://softlang.wikidot.com/startseite

softlang.wikidot.com/course:dbintro