Fachhochschule Südwestfalen Hochschule für Technik und Wirtschaft Daten banken Lernziele § Der Studierende soll sich mit Datenbanken im betrieblichen Einsatz auseinandersetzen § Er soll typische Datenbankanwendung kennen lernen und selbst erstellen § Schwerpunkte: § Datenbankentwurf mit Entity Relationship Model und Normalisierung § SQL § Datenbanktechnik § Data Warehousing / Business Intelligence Folie 2 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Literaturhinweise § Date95 § Heu92 § Scheer98 § SQL92 § Teor94 § DVZ § Klug06a § Klug06b Folie 3 von 107 Date: An Introduction to Database Systems, sixth ed., Addison-Wesley, 1995 Heuer: Objektorientierte Datenbanken, Addison-Wesley, Bonn 1992 Scheer: Wirtschaftsinformatik, Referenzmodelle für industrielle Geschäftsprozesse, Springer 1998 SQL2-Sprachstandard; Document ISO/IEC-9075: 1992 T.J. Teory: Database Modeling & Design, Second Edition, Morgan Kaufmann, San Francisco, 1994 RRZN-Handbücher, http://www3.fh-swf.de/dvz/rrzn.htm U. Klug: SQL: Der Einstieg in der deklarative Programmierung, W3L-Verlag, Herdecke, Witten, 2006 U. Klug: Datenbankanwendungen entwerfen und programmieren, W3L-Verlag, Herdecke, Witten, 2006 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Inhalt § Vorlesung: § Datenbank-Entwurf, Entity Relationship Model, Normalisierung § Abfragesprache SQL (Structured Query Language) § Datenbank-Techniken: Transaktionskonzept (OLTP), Sperren, Index § Verteilte Datenbank; Client/Server-Computing § Data Warehousing § Objektorientierte Datenbanken (OODB) § Praktikum: § Einführung in Microsoft Access § Datenbankentwurf (ERM, Normalisierung) § SQL mit Access § VBA in Access § ODBC, JDBC Folie 4 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Beispiel: Oracle-Datenbank für SAP ERP® Datenbankserver Applikationsserver 1 (Backup-Datenbankserver) Switched TokenRing RS6000 / R50 AIX 4.2 Oracle 7.3.3.3 FDDI RS6000 / R50 Diensterechner Applikationsserver 2 Applikationsserver 3 RS6000 Patrol-Konsole RS6000 RS6000 InvestitionsBank des Landes Brandenburg - Produktive SAP-Umgebung / PATROL Folie 5 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Integrierte Informationsverarbeitung § Teilbereiche des betrieblichen Informationssystems § Planungs- und Entscheidungssysteme § Analyse-Informationssysteme § Berichts- und Kontrollsysteme § Wertorientierte Abrechnungssysteme § Mengenorientierte operative Systeme Folie 6 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Vorgehensweise bei DV-Projekten § Problemanalyse (Fachlich und DV-technisch) § Anforderungen § IST-Analyse mit Schwachstellen § Fachkonzept § Soll-Konzept (Pflichtenheft) § Funktions- und Datenmodell (UML, ERM) § DV-Konzept § Entwurf (UML) § Benutzeroberfläche (Menüs, Formulare/Masken, Berichte) § Schnittstellen § System-Architektur (Hardware, Netzwerk, Software) § Produktentscheidung (Betriebssystem, Programmiersprache, Datenbank, Netzwerk, Anwendungen, ...) Folie 7 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Vorgehensweise bei DV-Projekten § Wirtschaftlichkeits-Analyse § Entwurf § Funktionsentwurf § Datenentwurf § Realisierung (Produktkauf oder Programmierung) § Test § Modultest § Integrationstest § Schulung, Dokumentation, Hilfe, Mehrsprachigkeit § Einführung § Wartung und Pflege Folie 8 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Sollkonzept § Beschreibung der Gesamtaufgabe des Systems § Beschreibung aller Geschäftsprozesse (Workflow) § Prozesse (Aktionen) § Sicherheit § Rollen (Benutzer) § Zugriffsrechte § Dokumente § Ausfallsicherheit § Ereignisse § Verschlüsselung § Ereignisgesteuerte Prozesskette (Ereignis, Rolle, Aktion und Dokument) § Beschreibung aller Objekte § Entities bzw. Objekte und ihre Beziehungen (ERM) § Funktionsmodell § Objekthierarchien (Klassenhierarchien) § Eingabe- und Ausgabe-Daten § Übernahme aus Altsystemen und über Schnittstellen § Integritätsbedingungen (Wertebereiche, Plausibilität) Folie 9 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Eigenschaften einer Datenbank Eigenschaft Datenunabhängigkeit Dateisystem Datenbanksystem (relat.) (ERP) Keine, da Datenstruktur Datenunabhängigkeit durch Projektion und Views sowie durch im Programm Trennung in externes, konzeptionelles und physisches Schema Datensicherheit Tagessicherung Logging aller Datenänderungen Zugriffsschutz Auf Dateiebene Auf Satz- und Feldebene, inhaltsbezogen Beziehungen - Durch Fremdschlüssel Redundanz Hoch Gering Konsistenz - Erhaltung wird durch Transaktionskonzept unterstützt Integrität - Referentielle Integrität; Definition von Integritätsregeln Aktualität Weitgehend Ja, durch direkte Änderung Abfragesprache - SQL Schneller Zugriff B*-Baum, Hash B*-Baum, Hash Zugriffsform Einzelsatz-Zugriff Mengenzugriff Synchronisation im Sperren auf Satzebene Sperren auf Transaktionsebene Wenige Viele Tools für die Anwendungserstellung Mehrbenutzerbetrieb Tools Folie 10 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Unterschied: Datei- und Datenbankanwendung bzw. Integrierte und nicht integrierte Anwendungen Anwendung 1 Anwendung 2 Anwendung 3 Anwendungen mit Dateien bzw. mehreren Datenbanken Datei 1 / Datenbank 1 Import Anwendungen Datei 2 / Datenbank 2 Datei 3 / Datenbank 3 Schnittstelle Anwendung 1 Anwendung 2 Anwendung 3 mit Datenbank ERP-System Datenbank Folie 11 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Einsatzmöglichkeiten § Unternehmensweite Softwaresysteme § Buchungssysteme, Verwaltungssysteme § Auftragsbearbeitung, Fakturierung § PPS, Materialwirtschaft § Fertigung § CAD, Stückliste § Vertriebsunterstützung § Datenanalyse § Datenspeicherung § Messdaten § Prozessdaten § Geografische Daten § Listen § Adresslisten § Telefonverzeichnisse § Offene Punkte-Listen § Termin-Daten Folie 12 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Datenmodelle § Hierarchisches Modell § Netzartiges Modell § Relationales Modell § Multidimensionale Datenbank § Objektorientierte Datenbank Folie 13 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Datenbank-Architektur §Externe Datensicht A bteilung § Sicht der Benutzer § Sicht der Anwendungen P rojekt M itarbeiter §Konzeptionelle Datensicht § Sicht der kompletten Daten § Verwaltet durch Datenbankadministrator §Physische Datensicht § Sicht der „Physik“ § Verteilung im Netz § Verteilung auf Speichermedien § Zugriffsstrukturen Folie 14 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Beispiel: Auftragsdatenbank § Relationale Datenbank besteht aus Tabellen mit Kunde § Primärschlüssel PK KuNr 2345 2845 3288 3339 3390 3614 4711 9876 § Fremdschlüssel FK Auftrag § Zeilen (Datensätze) § Spalten (Attribute) § Referenzielle Integrität AufNr 10 20 30 60 101 Name Maier Meier Starke Steger Braun Muschel Simonsen van Preen Vorname Otto Hans Heinz Ute Peter Paul Peter Julia PLZ 43356 22345 16654 12234 45546 12345 18567 53446 Ort Düsseldorf Hamburg Berlin Berlin Düsseldorf Berlin Berlin Bonn Straße Graf-Adolf-Str. 10 Max Brauer Allee 5 Otto Platz 10 An der Spree 210 Berner Str. 20 Berliner Str. 51 Berliner Str. 51 Reuter Str. 10 KredLim 3200 3600 0 6300 2900 5200 4400 5000 Position KuNr 4711 3288 3339 2345 3614 AufDat 05.08.88 02.02.89 14.03.89 12.08.88 06.03.89 LiefDat 01.10.88 21.02.89 28.03.89 20.09.88 16.03.89 ArtNr 2002 2002 3002 3002 3002 4001 7001 AufNr Menge 10 10 30 20 10 5 30 10 60 20 30 100 101 3 Artikel ArtNr 2001 2002 3001 3002 4001 5001 7001 Folie 15 von 107 Datenbanken – Stand: September 2014 ArtBez Einbruchalarm Saugrohr Ultraschall-Gerät AL 100 Ausgießen Bewegungsmelder Lichtschranken-System Infrarot Photo-Sensor EkPreis 400,00 3,50 80,00 3,50 60,00 50,00 120,00 Prof. Dr. Stefan Böcker VkPreis 498,00 4,95 119,00 4,95 98,00 79,50 165,00 MinBest LagMen 50 500 500 1000 50 150 500 1000 50 300 30 100 100 1000 Relationale Datenbank § 12 Codd‘sche Regeln § Selektion § Projektion § Verbund / Join § Entitäts-Integrität § Referenzielle Integrität § Benutzerdefinierte Integrität § ... Folie 16 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL – Structured Query Language § DDL - Data Definition Language § CREATE (Anlegen von Tabellen, Sichten, Indexen, ...) § ALTER (Ändern) § DROP (Löschen) § DML - Data Manipulation Language § SELECT (Abfragen) § INSERT (Einfügen von Zeilen) § UPDATE (Ändern) § DELETE (Löschen) § DCL - Data Control Language § GRANT (Vergabe von Zugriffsrechten) § REVOKE (Zurücknahme von Zugriffsrechten) § COMMIT (Abschluss einer Transaktion) § ROLLBACK (Abbruch einer Transaktion) Folie 17 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL - Beispiele § Datensatz selektieren § SELECT Name, Ort, KredLim FROM Kunde WHERE Ort = 'Berlin'; § Datensatz einfügen SQL ist eine deskriptive Sprache: Es wird formuliert, was und nicht wie etwas abgefragt wird! § INSERT INTO Kunde VALUES (4712, 'Müller' , 'Tim', ...); § Datensatz löschen § DELETE FROM Kunde WHERE KuNr = 4711; Folie 18 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Datenbank-Entwurf § Entwurf der Tabellen § Welche Tabellen und Spalten § Datentyp der Spalten § Integritätsregeln § Beziehungen zwischen den Tabellen festlegen § referenzielle Integrität Konzeptionelle Datensicht § Verteilung der Datenbank § auf den Speichermedien Physische Datensicht § im Rechnernetz § Tuningmaßnahmen § Benutzersichten und Zugriffsrechte Folie 19 von 107 Datenbanken – Stand: September 2014 Externe Datensicht Prof. Dr. Stefan Böcker Entity Relationship Model Modellierung Beziehungen Objekte der realen Welt z.B. Kunden, Aufträge, Artikel ... ERM „Erfinder“: Chen Folie 20 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Entity Relationship Model Modellierung Beziehungen Objekte der realen Welt z.B. Kunden, Aufträge, Artikel ... § Starke, eigenständige Entities: z.B. Kunde § Schwache, abhängige Entities: z.B. Kundenname E R M Folie 21 von 107 ermittelt Beziehungen zwischen starken Entities LOGISCHES MODELL und leitet daraus die Tabellenstrukturen ab PHYSISCHES MODELL Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Schritte zum ERM 1. Intuitiver Entity-Entwurf § Ausgehend von einer Informationssammlung § Werden zusammengehörige Entities zusammen gefasst; z.B. Kundenname, Kundenadresse, ... zur Entity „Kunde“ 2. Ermittlung der Beziehungen dieser Entities § Einzelbeziehungen (i.a. Beziehung zwischen je 2 Entities) § Gesamtdarstellung aller Beziehungen 3. Ableiten der Tabellenstrukturen Folie 22 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Typ der Beziehung § Beziehungstyp 1:N 1 Abteilung Eine Abteilung hat mehrere (also N) Mitarbeiter; ein Mitarbeiter gehört zu einer (also 1) Abteilung N hat Mitarbeiter §Beziehungstyp N:M N Mitarbeiter arbeitet in Ein Mitarbeiter arbeitet in mehreren (M) Projekten; ein Projekt beschäftigt mehrere (N) Mitarbeiter M Projekt §Beziehungstyp 1:1 1 Mitarbeiter Folie 23 von 107 1 leitet Datenbanken – Stand: September 2014 Abteilung Ein Mitarbeiter leitet eine (1) Abteilung; eine Abteilung wird von einem (1) Mitarbeiter geleitet Prof. Dr. Stefan Böcker Existenz Unterscheidung in KANN- und MUSS-Beziehungen 1 1 leitet Mitarbeiter muss Abteilung kann Alternative Notationen: min max Crowfoot-Format (1,1) (0,1) leitet Mitarbeiter (1,1) Abteilung Abteilung (0,N) hat Mitarbeiter UML Mitarbeiter Folie 24 von 107 1 leitet 0..1 Abteilung Datenbanken – Stand: September 2014 weitere Notationen: 0..* , 1..* Prof. Dr. Stefan Böcker Grad der Beziehung § Binäre Beziehungen 1 N Abteilung hat Mitarbeiter § Es sind 2 Entities an der Beziehung beteiligt § Ternäre Beziehungen N Projekt N M benötigt Mitarbeiter Lieferant M liefert P P Qualifikation Firma § Es sind 3 oder n Entities an der Beziehung beteiligt (ternär, n-är) Folie 25 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Teil Anzahl Grad der Beziehung § Rekursiv binäre Beziehungen 1 Mitarbeiter ist verheiratet mit 1 Mitarbeiter Männer Frauen § Es ist nur ein Entity an der Beziehung beteiligt, die Beziehung ist rekursiv § Alternative Notation: 1 Mitarbeiter 1 Folie 26 von 107 ist verheiratet mit Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Grad der Beziehung § Rekursiv binäre Beziehungen § Mutter-Kind 1 ist Mutter von Person N Person Mütter Kinder § Stückliste N Teil ist Oberteil von Baugruppen Folie 27 von 107 Datenbanken – Stand: September 2014 M Teil Teile Prof. Dr. Stefan Böcker Spezialisierung und Aggregation § Spezialisierung / Generalisierung: IS-A-Beziehungen Techniker Grundmenge / Supertyp Teilmengen / Subtypen IS-A d Mitarbeiter Manager Sekretärin § Aggregation: PART-OF-Beziehungen Programm SoftwareProdukt PART-OF Dokument Folie 28 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Spezialisierung und Aggregation § Uminterpretation von Beziehungstypen zu Entitytypen: Beziehung wird zu Entity Auftrag N N enthält wird bearb. von 1 Mitarbeiter M Artikel Folie 29 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Beispiel für ein vollständiges ERM (Projektdatenbank) Folie 30 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Redundanz Erkennbar in Gesamtdarstellung des ERM bei geschlossenen Kreisen 1 Geschlossener Kreis mit identischen Informationen = redundante Beziehung. Korrigieren! 1 Kunde Auftrag erteilt N bevorzugt gehört zu N N redundante Beziehungen enthält N M Artikel nicht-redundante Beziehungen enthält M Artikel M Folie 31 von 107 Auftrag erteilt Kunde gehört bestelltzu N N Datenbanken – Stand: September 2014 M Geschlossener Kreis mit unterschiedlichen Informationen = nicht-redundante Beziehung. Prof. Dr. Stefan Böcker Ableiten der Tabellen ◆ 1:N-Beziehung 1 a) N erteilt Kunde Auftrag ! 2 Tabellen: Kunde, Auftrag. Primärschlüssel der 1-Seite wird Fremdschlüssel der N-Seite: Tabelle Kunde Tabelle Auftrag KdNr Name Vorname AuftrNr AuftrNr AuftrDat Name KdNr 2000 Müller Kerstin 4843 4791 21.03.00 Möller 2003 2001 Meier Tom 4820 4820 16.09.00 Meier 2001 2002 Schmitz Sven ... 4843 07.11.00 Müller ... 2003 Möller ... ... 4898 12.02.01 ... ... Liste! Folie 32 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Ableiten der Tabellen ◆ 1:N-Beziehung b) ? 1 Lieferadresse N erteilt Kunde Auftrag ! Lösung 1: Zwei Tabellen wie Fall a), jedoch mit Lücken bei Aufträgen ohne Kundenbezug. Lösung 2: Dritte Tabelle, die nur Beziehungen enthält, wenn wenig Aufträge mit Kundenbezug vorhanden sind: Beziehungstabelle KundenAuftrag Folie 33 von 107 KdNr AuftrNr 2003 4791 Plutostr. 46-48, 80433 ... 2001 4820 Venusweg 27, 10571 B... 2000 4843 Merkurallee 10, 28352 ... Datenbanken – Stand: September 2014 Lieferadresse Prof. Dr. Stefan Böcker Ableiten der Tabellen ◆ N:M-Beziehung N Mitarbeiter arbeitet in M Projekt 2 Grundtabellen und eine Beziehungstabelle. Neuer Primärschlüssel in der Beziehungstabelle setzt sich aus 2 Fremdschlüsseln der Grundtabellen zusammen. Beispiel: Mitarbeiter-Tabelle, Projekt-Tabelle sowie Tabelle ProjektMitarbeit: Folie 34 von 107 MaNr ProjNr 4711 17 4712 Reisekosten AnzStd ... ... ... 18 ... ... ... 4713 19 ... ... ... 4712 17 ... ... ... Datenbanken – Stand: September 2014 ( Datum ) Prof. Dr. Stefan Böcker Ableiten der Tabellen ◆ 1:1-Beziehung a) 2 Tabellen. Primärschlüssel aus MUSS-Seite wird Fremdschlüssel bei KANN-Seite. Hier MaNr = FK in Abteilung (ansonsten viele leere Felder). b) 1 Tabelle. c) Tabelle Paare: MA1 wie Fall a) Oder zusätzliche Beziehungstabelle, falls wenig Beziehungen vorhanden Folie 35 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker MA2 Seit Ableiten der Tabellen ◆ Ternäre-Beziehung bzw. n-äre-Beziehung N Lieferant M liefert Teil P Anzahl Firma n Tabellen + 1 Beziehungstabelle, bei ternärer Beziehung also 4 Tabellen. Beispiel: Je eine Tabelle für Lieferant, Teil und Firma, sowie eine Tabelle Lieferung: Folie 36 von 107 LieferantNr TeileNr FirmenNr Anzahl 0345 345678 3123 500 0815 345689 0077 750 1007 345690 1929 500 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Ableiten der Tabellen ◆ IS-A-Beziehung Techniker Mitarbeiter IS-A Manager Sekretärin Grund- und Teilmengen bilden je 1 Tabelle mit demselben Primärschlüssel. Teilmengen-Tabellen enthalten neben dem PK nur die zusätzlichen Spalten. Folie 37 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Ableiten der Tabellen ◆ Rekursive Beziehungen 1 Mitarbeiter ist Grpltr von N Mitarbeiter Eine Tabelle mit der MaNr des jeweiligen Gruppenleiters als GrpltrMaNr N Teil ist Oberteil zu M Name Vorname GrpLtrMaNr 47 Müller Hans 48 Meier Martin 49 Schmitz Sven 48 50 Möller Michael 61 48 OTeileNr UTeileNr Menge 4711 15 1 4711 16 2 15 5 1 15 7 3 Teil 1. Teile-Tabelle 2. Struktur-Tabelle, siehe Beispiel Folie 38 von 107 MaNr Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Tabellenstruktur der Projektdatenbank Folie 39 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Normalisierung Bottom-up-Methode zum Datenbank-Entwurf Normalformen: 1. Normalform (1NF) 2. Normalform (2NF) ... ... ... Sind die Attribute der Tabelle ok Die 1NF ist im relationalen Datenbankmodell ein MUSS! Ab 2NF ist die Normalisierung freigestellt. Folie 40 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Normalisierung Folie 41 von 107 Ziele: - weniger Redundanz - keine Seiteneffekte bei Änderungen, z.B. Löschanomalie Nachteile: - viele Tabellen - Verbundene / Joins - Performance – Probleme § wegen Joins § wegen Berechnungen Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Normalisierung Normalisierung verhindert Redundanzen Normalisierung verhindert Löschanomalie Beispiel für eine Löschanomalie (Seiteneffekt): Tabelle ARTIKEL mit den Spalten ArtNr, Bez, Preis, LagNr, LagOrt, LagStr Werden die Lagerinformationen LagOrt (Lagerort) und LagStr (Lagerstrasse) bei den Artikeln gespeichert, kann neben der erheblichen Redundanz (n-mal derselbe Lagerort und dieselbe Lagerstraße) noch folgendes passieren: Wenn zufällig alle Artikel eines bestimmten Lagers gelöscht werden, ist auch die Information über die Lageradresse in der Datenbank gelöscht! Folie 42 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Normalisierung 1. Normalform Eine Tabelle ist in der 1NF, wenn sie nur einfache Zeilen und Spalten hat, also keine Listen oder Untertabellen beinhaltet. Beispiel Tabelle KUNDE: KuNr, Firmenname, AuftrNr, ... Liste! 1NF 2. Normalform Eine Tabelle ist in der 2NF, wenn sie in der 1NF ist und wenn jedes NichtSchlüsselattribut vom kompletten Primärschlüssel vollständig abhängt. Beispiel Tabelle POSITION: AuftrNr, ArtNr, AuftrDatum, ArtBez, Menge, Preis 2NF Folie 43 von 107 Datenbanken – Stand: September 2014 2NF wenn nicht auftragsabhängig 2NF Prof. Dr. Stefan Böcker Normalisierung 3. Normalform Eine Tabelle ist in der 3NF, wenn sie in der 2NF ist und wenn keine (transitiven) Abhängigkeiten zwischen Nicht-Schlüsselattributen bestehen. Beispiel Tabelle ARTIKEL: 3NF ArtNr, Bez, LagNr, LagOrt, ... 4. Normalform Eine Tabelle ist in der 4NF, wenn sie in der 3NF ist und wenn keine abgeleiteten (z.B. berechneten) Felder existieren. Beispiel Tabelle RECHNUNG: ReNr, ArtNr, Preis, Menge, GesamtPreis 1NF Folie 44 von 107 3NF Datenbanken – Stand: September 2014 4NF Prof. Dr. Stefan Böcker Normalisierung Bereinigung der Normalisierungsverstöße durch - Verschieben von Attributen in andere Tabelle - Streichen von Attributen Ggfs. Anlegen neuer Tabellen Folie 45 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Normalisierung Übungsaufgaben 1. ABTEILUNG: AbtNr, AbtBez, MaNr 1NF 2. PROJEKTMITARBEIT: ProjNr, MaNr, QNr, MaName, QBez 2NF 3. MA_EHE: MannMaNr, FrauMaNr, NeuerName, M/F_Geb, Seit_wann 2NF 4. 2NF 2NF MITARBEITER: MaNr, AbtNr, MaName, AbtBez 3NF 5. ABTEILUNG: AbtNr, AbtBez, ÜberAbtNr, ÜberAbtBez LÖSUNG 3NF Folie 46 von 107 1. MaNr streichen, AbtNr in MITARBEITER-Tabelle 2. MaName in MITARBEITER-Tabelle, QBez in QUALIFIKATIONS-Tabelle 3. NeuerName und M/F_Geb in MITARBEITER-Tabelle 4. AbtBez in ABTEILUNGS-Tabelle 5. ÜberAbtBez streichen, da schon vorhanden Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Normalisierung keine/ wenig Normalisierung bei Objektorientierten Datenbanken (OODB) Data Warehouse Systemen Multimedia DB Folie 47 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Vorgehen beim Entwurf Arbeitsablauf beim Erstellen einer relationalen Datenbank: ü Aufgabenstellung definieren und analysieren ü Informationsbeschaffung ü Intuitiver Entity-Entwurf (EntityNamen, Attribute, Primärschlüssel) üBeziehungen zwischen (starken) Entities mittels ERM feststellen ü Tabellenstruktur und Fremdschlüssel ableiten ü Überprüfen der Tabellen mittels Normalisierung bis 4NF üDatentypen und Integritätsregeln festlegen ü Test des Entwurfs mittels eines DB-Prototypen ü Benutzersichten anlegen und Zugriffsrechte vergeben à Anwendung entwickeln / bzw. kaufen Folie 48 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Neue Datenbank Auftrag Softwarehaus mit Produkten u. Dienstleistungen für Firmen Kunden Aufträge Leistungen gehören zu Aufträgen Kontaktpersonen Folie 49 von 107 Datenbanken – Stand: September 2014 Tabelle PK Attribute Kunde KKURZ Firma Auftrag AKURZ KKURZ, ASTNR, PNR Leistung LKURZ AKURZ, Person PNR Name Kontakt PNR, KKURZ Tel AUFSTAT ASTNR ASTTEXT Prof. Dr. Stefan Böcker SQL : Structured Query Language ◆ DDL Data Definition Language ◆ ◆ ◆ CREATE (Anlegen von Tabellen, Sichten, Indexen, ...) ALTER (Ändern) DROP (Löschen) ◆ DML Data Manipulation Language ◆ SELECT (Abfragen) ◆ INSERT (Einfügen von Zeilen) ◆ UPDATE (Ändern) ◆ DELETE (Löschen) ◆ DCL Data Control Language ◆ GRANT (Vergabe von Zugriffsrechten) ◆ REVOKE (Zurücknahme von Zugriffsrechten) ◆ COMMIT (Abschluß einer Transaktion) ◆ ROLLBACK (Abbruch einer Transaktion) Folie 50 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL: DDL ◆ Anlegen einer Tabelle: CREATE TABLE CREATE TABLE (Spaltenname1 Spaltenname2 ,,,) Tabellenname Datentyp [NOT NULL] [DEFAULT deftyp], Datentyp, Dabei sind folgende Datentypen möglich: CHARACTER, NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, DOUBLE PRECISION und REAL NOT NULL legt fest, dass das entsprechende Attribut für alle Zeilen der Tabelle einen Wert haben muss. Mit PRIMARY KEY (Spaltenliste) wird der Primärschlüssel der Tabelle festgelegt. Mit FOREIGN KEY (Spaltenliste) und REFERENCES Basistabelle [(Spaltenliste)] werden Fremdschlüssel definiert. Folie 51 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL DDL ◆ Ändern einer Tabelle: ALTER TABLE ALTER TABLE ADD ◆ Tabellenname Spalte Löschen einer Tabelle: DROP TABLE DROP TABLE ◆ Anlegen eines Index: CREATE INDEX CREATE INDEX ON Folie 52 von 107 Tabellenname(-n) Datenbanken – Stand: September 2014 Indexname Tabellenname (Spaltenname(-n)) Prof. Dr. Stefan Böcker SQL: DDL ◆ CREATE TABLE in MS Access ab Office 2007 http://office.microsoft.com/de-de/access-help/create-table-anweisung-HA001231441.aspx CONSTRAINT-Klausel zur Einschränkung für ein einzelnes Feld: CONSTRAINT Name {PRIMARY KEY | UNIQUE | NOT NULL | REFERENCES Fremdtabelle [(Fremdfeld1, Fremdfeld2)] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]} Einschränkung für mehrere Felder: CONSTRAINT Name {PRIMARY KEY (primär1[, primär2 [, ...]]) | UNIQUE (eindeutig1[, eindeutig2 [, ...]]) | NOT NULL (nichtNull1[, nichtNull2 [, ...]]) | FOREIGN KEY [NO INDEX] (Bezug1[, Bezug2 [, ...]]) REFERENCES Fremdtabelle [(Fremdfeld1 [, Fremdfeld2 [, ...]])] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]} Folie 53 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL: DDL ◆ Datentypen bei Microsoft Suche: Äquivalente ANSI SQL-Datentypen: http://office.microsoft.com/de-de/access-help/ gleichwertige-ansi-sql-datentypen-HA001231447.aspx Default (s.u.) ist möglich, wenn in Access 2003: Optionen + Register Tabellen/Abfragen Access 2010: Optionen + Object-Designer àOption SQL Server-kompatible Syntax (ANSI 92) create table TestTabelle ( F1 Autoincrement NOT NULL, F2 Date, F3 Long Default 100, F4 Integer, F5 Byte, F6 Double, F7 Single, F8 DATETIME, F9 YESNO, F10 Text(10), Primary Key (F1, F2) Autoincrement oder Counter Folie 54 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Beispiel für CREATE TABLE: (Oracle Notation) CREATE TABLE KUNDE (KuNr INT Name VARCHAR (20) Vorname VARCHAR (15), PLZ INT Ort VARCHAR (30), Str VARCHAR (30), KRED_LIM DEC (7,2) NOT NULL PRIMARY KEY, NOT NULL, CHECK (PLZ BETWEEN 10000 AND 89999), DEFAULT 10000 NOT NULL, CHECK (KRED_LIM BETWEEN 0 AND 50000), CHECK (ORT IN ('Iserlohn', 'Hagen', 'Lüdenscheid'))); CREATE TABLE ARTIKEL (ArtNr INT ArtBez VARCHAR (20) EkPreis DEC (8,2) VkPreis DEC (8,2), LagNr INT MinBest NUM (6) Folie 55 von 107 NOT NULL PRIMARY KEY, NOT NULL, NOT NULL, REFERENCES LAGER (LagNr), CHECK (MinBest >= 0)); Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Beispiel für CREATE TABLE: (Oracle Notation) CREATE TABLE LAGER (LagNr INT NOT NULL PRIMARY KEY, ...); CREATE TABLE LAGERUNG (ArtNr INT LagNr INT LagMen NUM (6) NOT NULL, NOT NULL, NOT NULL, PRIMARY KEY (ArtNr, LagNr), FOREIGN KEY (ArtNr) REFERENCES ARTIKEL(ART_NR), FOREIGN KEY (LagNr) REFERENCES LAGER, CHECK (LAGERUNG.LagMen >= ARTIKEL.MinBest AND LAGERUNG.LagMen <= 1000)); CREATE INDEX Nameindex ON Kunde (Name); à inklusive Indexe DROP TABLE Kunde; DROP INDEX Nameindex; ALTER TABLE Kunde ADD Spalte; Folie 56 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT-Kommando Ø SELECT Spaltennamen Ø INTO Zielvariable Ø FROM Tabellenquelle(-n) Ø WHERE Auswahlkriterien (nur bei SELECT in Anwenderprogramm) Ø GROUP BY Gruppenbildung Ø HAVING Gruppenbedingung Ø UNION Vereinigungsmenge Ø ORDER BY Sortierung Folie 57 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit Projektion SELECT FROM ORDER BY ORT, FIRMA KUNDE ORT, FIRMA [ASC | DESC]; erst dann aufsteigend (Standard) absteigend Sucht Ort und Firmenname der Kunden, sortiert nach ORT; falls ORT doppelt, dann zusätzlich sortiert nach Firmenname. SELECT FROM DISTINCT Ort KUNDE; Sucht die unterschiedlichen Orte aller Kunden und sortiert automatisch. Mit dem Parameter DISTINCT werden Werte, die mehrfach auftreten, nur 1x angezeigt. Folie 58 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit Selektion SELECT * FROM KUNDE WHERE ORDER BY ORT = 'Bremen' AND KINFO = 'Versicherung' ORT; Vergleichsoperatoren: = , < , > , <> , != , <= , >= Verknüpfungsoperator: & Verbindet Zeichenfolgen Mathematische Ausdrücke: + , - , * , / , \ (Div) , MOD , ^ (Potenz) Folie 59 von 107 liefert alle Spalten Logischer Operator Vergleichsoperator Logische Operatoren: NOT Verneinung der Bedingung AND Logisches UND OR Logisches ODER XOR Logische Antivalenz exclusive or => nur A oder nur B EQV Logische Äquivalenz XNOR : exclusive not or => (A und B) oder (!A und !B) IMP Datenbanken – Stand: September 2014 Logische Implikation Aus A folgt B => Wenn es regnet, wird d. Straße nass Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit Selektion per Datum SELECT FROM WHERE KKURZ, AKURZ, AANZ, FERTIGSOLL AUFTRAG FERTIGSOLL <= #05/28/2007# ; ! ! Selektiert die Aufträge mit FertigSoll bis 28.05.08 (Angabe in US-Datumsformat) ◆ SELECT mit BETWEEN-Selektion … WHERE … FERTIGSOLL BETWEEN #02/01/2007# AND #05/28/2007#; Selektiert die Aufträge mit FertigSoll-Datum zwischen 01.02.07 und 28.05.07 Folie 60 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit IN-Vergleich SELECT FROM WHERE KKURZ, AKURZ, AANZ, FERTIGSOLL AUFTRAG KKURZ IN (106, 107, 112); Selektiert die Aufträge der Kunden 106, 107 und 112 (Vergleicht Werteliste) ◆ SELECT mit LIKE-Vergleich SELECT FROM WHERE KKURZ, AKURZ, ATEXT, FERTIGSOLL Platzhalterzeichen ( *, # , ? , [! ...] ) AUFTRAG % _ ATEXT LIKE '*BLAU*'; Selektiert die Aufträge, die im Auftragstext die Zeichenkette „BLAU“ enthalten (Vergleicht alphanumerische Zeichenketten oder Einzelzeichen) Folie 61 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit IS NULL -Selektion SELECT FROM WHERE KKURZ, AKURZ, AANZ, FERTIGIST AUFTRAG FERTIGIST IS NULL; Selektiert die Aufträge, die bei FERTIGIST noch keinen Wert eingetragen haben (Sucht Leerfelder) Folie 62 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen SELECT FROM WHERE KKURZ, AKURZ, AANZ, FERTIGIST AUFTRAG FERTIGIST IS NOT NULL; SELECT FROM WHERE KKURZ, AKURZ, AANZ, FERTIGIST AUFTRAG NOT (FERTIGIST IS NULL); Oder: Die Verneinung des IS NULL-Operators selektiert die Werte mit vorhandenem FERTIGIST Folie 63 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit Funktionen, Ausdrücken, virtuellen Spalten COUNT SUM AVG MAX MIN STDABW Var Anzahl Summe Durchschnitt Maximaler Wert Minimaler Wert Standardabweichung Varianz Vergleich mit mathematischen Ausdrücken, auch verschiedener Attribute Zusätzliche Spalten, die nicht in der Tabelle enthalten sind Beispiele: SELECT COUNT (*) FROM KUNDE; SELECT MAX (KKURZ) FROM KUNDE; Aliasname für Spalte SELECT KKURZ AS Kundenkürzel FROM KUNDE; SELECT SUM(AANZ * ASATZ) AS AuftragswertGesamt FROM AUFTRAG; Folie 64 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ Gruppierung: SELECT mit GROUP BY SELECT FROM GROUP BY SELECT FROM GROUP BY MWSATZ, COUNT (*) AS ANZAHL AUFTRAG MWSATZ; ... liefert als Ergebnis: MWSATZ Anzahl 0 3 0,07 1 0,19 3 AEINHEIT, MWSATZ, COUNT (*) AS ANZAHL AUFTRAG AEINHEIT, MWSATZ; ... liefert als Ergebnis 5 Zeilen Mit GROUP BY werden bezüglich der angegebenen Spalten Gruppen gebildet. Die statistischen Funktionen wie COUNT, MAX usw. gelten nun für die Gruppen. Wichtig: Hinter GROUP BY müssen mindestens dieselben Tabellenspalten wie hinter SELECT aufgeführt sein! Folie 65 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ GROUP BY mit HAVING SELECT FROM GROUP BY HAVING KKURZ, COUNT (*) AS ANZAHL KONTAKT KKURZ COUNT (*) >2; ... liefert als Ergebnis: KKURZ Anzahl 100 3 101 4 107 3 109 3 Mit HAVING erfolgt eine Einschränkung der Ergebnismenge bezüglich einer statistischen Funktion Folie 66 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Views mit GROUP BY CREATE VIEW AUFTRUMS (AKURZ, UMSATZ, STAND) AS SELECT FROM GROUP BY SELECT * FROM AUFTRUMS; AKURZ, SUM(LANZ*LSATZ) As UMSATZ, MAX(LDATUM) As STAND LEISTUNG AKURZ; AKURZ In Access: Speichern als Abfrage(statt als View) Umsatz Stand 109 1.500,00 € 01.05.06 111 17.175,00 € 25.05.08 112 33.600,00 € 13.03.06 113 49.000,00 € 13.12.07 114 9.000,00 € 29.06.08 115 6.645,00 € 01.09.07 Mit folgenden Select kann z.B. auf die View zugegriffen werden: AKURZ SELECT * FROM AUFTRUMS WHERE UMSATZ > 10000; Folie 67 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Umsatz Stand 111 17.175,00 € 25.05.08 112 33.600,00 € 13.03.06 113 49.000,00 € 13.12.07 SQL-Abfragen ◆ Daten verändern: Einfügen, Ändern, Löschen Das Einfügen und Löschen einzelner Datensätze (Tabellenzeilen) erfolgt mit den Befehlen INSERT INTO und DELETE; das Ändern von einzelnen Feldwerten erfolgt mit dem Befehl UPDATE INSERT INTO Einfügen von Datensätzen in eine Tabelle UPDATE Ändern von Feldwerten einer Tabelle DELETE Löschen von Zeilen (oder Leeren von ganzen Tabellen) Folie 68 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ Daten einfügen mit INSERT INSERT INTO PERSON (PNR, VORNAME, NACHNAME, ANREDE) VALUES (1231, 'Josef', 'Fischer', 'Herr'); Annahme: Tabelle Bremer_Kunden mit gleicher Struktur wie KUNDE, aber ohne Datensätze ... Lösung: INSERT INTO Bremer_Kunden SELECT * FROM KUNDE WHERE Folie 69 von 107 ORT = 'Bremen'; Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ Daten einfügen mit SELECT In MS ACCESS ist das Dateneinfügen mit gleichzeitigem Erzeugen einer neuen Tabelle möglich: SELECT * INTO FROM BremerKunden KUNDE WHERE Ort = 'Bremen'; Legt die neue Tabelle BremerKunden an und fügt die Datensätze aus KUNDEN ein Folie 70 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ Daten ändern mit UPDATE UPDATE SET WHERE LEISTUNG LSATZ = LSATZ * 1.1 RNR IS NULL; SET Leistungssatz der noch nicht abgerechneten Leistungen wird mit SET um 10 Prozent erhöht UPDATE SET WHERE AUFTRAG ASTNR = 4 AKURZ IN (113, 115); Auftragsstatus der Aufträge 113 und 115 wird in 4 („Ablage“) geändert Folie 71 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker F1 = x, F2 = y, F3 = z SQL-Abfragen ◆ Daten löschen mit DELETE DELETE FROM WHERE KUNDE KKURZ = 113; Löscht die Zeile (=den Datensatz) mit der KKURZ-Nummer 113. DELETE FROM KUNDE; Ohne WHERE-Klausel werden alle Zeilen der angegebenen Tabelle gelöscht. Die Tabelle wird geleert, bleibt aber als Struktur erhalten! Folie 72 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen Daten in mehreren Tabellen suchen: ◆ SELECT mit JOIN / Verbund SELECT FROM WHERE AUFTRAG.AKURZ, KUNDE.FIRMA, AUFTRAG.ATEXT AUFTRAG, KUNDE KUNDE.KKURZ = AUFTRAG.KKURZ; Spalten aus verschiedenen Tabellen werden zusammengefasst (SQL1-Notation,SQL 89: International Standards Organization) SELECT AKURZ, FIRMA, ATEXT FROM KUNDE INNER JOIN AUFTRAG ON KUNDE.KKURZ = AUFTRAG.KKURZ [ WHERE ….] ; Der gleiche Tabellenverbund in SQL2- oder ACCESS-Notation (SQL92: SQL2-Standardsprache) Folie 73 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit OUTERJOIN (LEFT ...) Verknüpft links- oder rechtsseitige Tabellenwerte, für die kein Vergleichswert in einer anderen Tabelle existiert SELECT FROM ON nachname AS Sachbearbeiter, präsent AS Präsent Sachbearbeiter LEFT JOIN SB-Präsente Sachbearbeiter.nr = SB-Präsente.nr; Linksseitige Inklusionsverknüpfung: + RIGHT JOIN + FULL OUTER JOIN Es werden alle Sachbearbeiter angezeigt, auch diejenigen, die keine Präsente bekommen haben Folie 74 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit SELFJOIN-Verbund Aufgabe: a) Anzeige der Vorgesetzten und Mitarbeiter b) Welcher MA verdient mehr als sein Vorges.? Vorges Mitarbeiter 1 ist Vorges. zu N Mitarbeiter Lösung: SELECT FROM ON WHERE Mitarbeiter.Name AS Mitarbeiter, Vorges.Name AS Vorgesetzter Mitarbeiter INNER JOIN Mitarbeiter AS Vorges Vorges.AngNr = Mitarbeiter.VorgesNr Vorges.Gehalt < Mitarbeiter.Gehalt Reflexionsverknüpfung: Verbund der Tabelle Mitarbeiter mit sich selbst Folie 75 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit SUBQUERY / Unterabfrage 1. Suche Kunden mit Ort = Bremen SELECT FROM WHERE FIRMA, ORT KUNDE ORT = ‘Bremen’; 2. Suche Ort von Kunde mit KKURZ = 101 SELECT FROM WHERE ORT KUNDE KKURZ = 101; 3. Suche Kunden, die in demselben Ort sind wie Kunde mit KKURZ = 101 Unterabfrage Folie 76 von 107 } SELECT FIRMA, ORT FROM KUNDE Hauptabfrage WHERE ORT = (SELECT ORT FROM KUNDE Auflösung WHERE KKURZ = 101 ); { Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit SUBQUERY / Unterabfrage Die Unterabfrage ‚ ‚ darf bei = nur 1 Wert liefern! Abhilfe bei mehreren Werten durch „IN“: Beispiel: Kunde mit größtem Auftragswert Folie 77 von 107 SELECT FROM ON WHERE Datenbanken – Stand: September 2014 SELECT FROM WHERE FIRMA, ORT KUNDE ! ORT IN (SELECT FROM ORT KUNDE WHERE LKZ = 'CH' ); FIRMA, PLZ, KUNDE.KKURZ, AANZ * ASATZ AS AUFWERT KUNDE INNER JOIN AUFTRAG KUNDE.KKURZ = AUFTRAG.KKURZ AANZ * ASATZ = (SELECT MAX (AANZ * ASATZ) FROM AUFTRAG); Prof. Dr. Stefan Böcker SQL-Abfragen ◆ SELECT mit UNION SELECT FROM WHERE UNION SELECT FROM WHERE Spaltenname,,, Tabelle Klausel Spaltenname,,, Tabellenname Klausel SELECT FROM UNION SELECT FROM Folie 78 von 107 Datenbanken – Stand: September 2014 KundenName AS Partner Kunde LiefName AS Partner Lieferant Prof. Dr. Stefan Böcker SQL-Abfragen ◆ Hier einige SQL-Beispiele aus Projekten Folie 79 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen Formular Auswertung Folie 80 von 107 Datenbanken – Stand: September 2014 Feldname kundennr Prof. Dr. Stefan Böcker SQL-Abfragen Button: Anzeige Kunden; Abfrage AnzeigeKunden SELECT FROM WHERE firma1 AS Firma, ort, Neukunde Kunde Kunde.KuNr = [forms]![Auswertung]![kundennr] Formularname Feldname SELECT firma1 AS Firma, ort, Neukunde FROM Kunden WHERE Kunden.nr Like IIf([Formulare]![Auswertung]![kundennr] Is Null, "*", [Formulare]![Auswertung]![kundennr]) AND ABCkunde & 'x' Like IIf([Formulare]![Auswertung]![ABCkunde] Is Null, "*" & 'x', [Formulare]![Auswertung]![ABCkunde] & 'x') Hinweis: & 'x' ist bei Spalten, die NULL sein können, nötig Folie 81 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Abfrage in VBA Siehe CRM.mdb, DBProgrammeADO, Sub zeigeKunde<i> DIM SQLS AS String SQLS= "SELECT KuNr, firma1 As Firma FROM Kunde WHERE kuNr = '0120200' " SQLS = "SELECT KuNr, firma1 As Firma " & Chr(10) & _ "FROM Kunde " & Chr(10) & _ "WHERE kuNr = '" & kuNr & " '"; Wobei kuNr eine lokale Variable vom Typ String ist SQLS = "SELECT kuNr, firma1 AS Firma " & Chr(10) & _ "FROM Kunde " & Chr(10) & _ "WHERE firma1 LIKE '%AG%' " & Chr(10) & _ "OR firma1 LIKE '%GmbH%'„ Hinweis: Chr(10) &_ Folie 82 von 107 Zeilenschaltung im SQL im Direktfenster Stringfortsetzung nächste Zeile Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Abfrage von Verbrauchsdaten für eine ABC/XYZ- Analyse SELECT FROM WHERE AND AND AND AND AND AND AND AND OR OR GROUP BY ORDER BY Folie 83 von 107 Verbrauch.Materialnummer, SUM (IIF[Menge] <0, [PreissteuerungsPreis]* 1* ABS([Menge]/[Preiseinheit]), [PreissteuerungsPreis]* [Menge]/[Preiseinheit])) AS Gesamtwert (Material INNER JOIN Materialdispo ON (Material.Werk = Materialdispo.Werk) AND (Material.Materialnummer = Materialdispo.Materialnummer)) INNER JOIN Verbrauch ON (Material.Werk = Verbrauch.Werk) AND (Material.Materialnummer = Verbrauch.Materialnummer) Materialdispo.Aenderungsdatum = #12/01/2004# Verbrauch.Datenart = ’V’ Material.Werk = ’30’ Material.Materialart like ‘FERT’ Verbrauch.Periodenkennzeichen = ‘M’ Material.ErsterVerbrauch <= ’2002-07’ Material.LetzterVerbrauch >= ’2004-06’ AND ((Verbrauch.Jahr =2002 Verbrauch.Periode >= 7 Verbrauch.Periode <= 12) (Verbrauch.Jahr =2003 AND Verbrauch.Periode >=1 AND Verbrauch.Periode <=12) (Verbrauch.Jahr = 2004 AND Verbrauch.Periode >=1 AND Verbrauch.Periode <=6)) Verbrauch.Materialnummer, Material.Werk SUM(IIF[Menge] <0, [PreissteuerungsPreis]* 1* abs([Menge] / [Preiseinheit]), [PreissteuerungsPreis]* [Menge] / [Preiseinheit])) DESC; Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker VBA-Definition Dim SQLMWL AS String SQLMWL = “SELECT “FROM “WHERE “AND “AND “AND “AND “AND “AND Verbrauch.Materialnummer, SUM(IIF[Menge]<0, “&preisSpalte &“*“ & korrekturfaktor &“* abs([Menge]/ [Preiseinheit]), “& Chr(10) &_preisSpalte & “* [Menge]/ [Preiseinheit])) AS Gesamtwert “ & Chr(10) &_ (Material INNER JOIN Materialdispo “&_ “ON (Material.Wek = Materialdispo.Werk) “& Chr(10) &_ “AND (Material.Materialnummer = Materialdispo.Materialnummer)) INNER JOIN Verbrauch “& Chr(10) &_ “ON (Material.Werk = Verbrauch.Werk) “ & Chr(10) &_ “AND (Material.Materialnummer = Verbrauch.Materialnummer) “ & Chr(10) &_ Materialdispo.Aenderungsdatum = “ & DateString(Importdatum) & Chr(10)&_ Verbrauch.Datenart = “’ & Datenart & “’ & Chr(10) &_ Material.Werk = “’ & Werk & “’ & Chr(10) &_ Material.Materialart like “’ & MatArt & “’ & Chr(10) &_ Verbrauch.Periodenkennzeichen = “’ & PKZ & “’ & Chr(10) &_ Material.ErsterVersuch <= “’ & Startjahr & “-“ & zweiZchn(Cint(Startperiode),PKZ) & “’ “ &Chr(10) &_ Material.LetzerVerbrauch > = “’ & Endejahr & “ -“ & zweiZchn(Cint(Endeperiode),PKZ) & “’ “ If Startjahr = Endejahr Then Folie 84 von 107 ... Datenbanken – Stand: September 2014 ‘Ermittlung der Jahre und Perioden Prof. Dr. Stefan Böcker VBA-Definition SQLMWL= SQLMWL & “AND Verbrauch.Jahr = “ & Startjahr & “ “ & Chr(10) &_ “AND Verbrauch.Periode >= “ & Startperiode & “ “ & Chr(10) &_ “AND Verbrauch.Periode <= “ & Endeperiode & “ “ & Chr(10) ’Startjahr + Zwischenjahre + Endejahr ElseIf Startjahr < Endejahr Then SQLMWL = SQLMWL & “AND ((Verbrauch.Jahr = “ & Startjahr & “ “ & Chr(10) &_ “AND Verbrauch.Periode >= “ & Startperiode & “ “ & Chr(10) &_ “AND Verbrauch.Periode <= “ & anzPeriProJahr & “ )“ & Chr(10) ’Zwischenjahre For Jahr = Startjahr + 1 to Endejahr –1 SQLMWL = SQLMWL & “OR (Verbrauch.Jahr = “ & Jahr & “ “ & Chr(10) &_ “AND Verbrauch.Periode >= 1 “ & Chr(10) &_ “AND Verbrauch.Periode <= “ & anzPeriProJahr & “ )“ & Chr(10) Next Jahr SQLMWL = SQLMWL & “OR (Verbrauch.Jahr = “ & Endejahr & “ “ & Chr(10) &_ “AND Verbrauch.Periode >= 1 ““ & Chr(10) &_ “AND Verbrauch.Periode <= “ & Endeperiode & “ ))“ & Chr(10) End If SQLMWL = SQLMWL & “GROUP BY Verbrauch.Materialnummer, Material.Werk “& Chr(10)&_ “ORDER BY SUM(IIF([Menge) <0, “ & preisSpalte & “*” &korrekturfaktor & “* abs([Menge]/ [Preiseinheit]), “ & preisSpalte & “* [Menge] /[Preiseinheit])) DESC” Debug.Print SQLMWL Folie 85 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆Rekursives SQL zur Auflösung der Kostenartenhierarchie aus IBM DB2 EXEC SQL DECLARE c_level CURSOR WITH HOLD FOR WITH dlp.PARENT (Parent, CHILD, LEVEL) AS ( SELECT DISTINCT PARENT, CHILD, 0 FROM dlp.COSTTYPE_TREE WHERE PARENT =:v_ROOT_CHILD AND ID_COSTTYPE_TREE_D = :v_ID_CT_TREE_D UNION ALL SELECT CTT.Parent, CTT.CHILD, P.LEVEL +1 FROM dlp.COSTTYPE_TREE CTT, dlp.PARENT P WHERE P.CHILD = CTT.PARENT AND CTT.ID_COSTTYPE_TREE_D = :v_ID_CT_TREE_D ) SELECT max(LEVEL) FROM dlp.Parent; Folie 86 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen ◆ Strategie zum Aufbau eines SELECT ü Ergebnisliste definieren: Wie soll das Abfrageergebnis aussehen? ü Welche Tabellen sollen benutzt werden? ü Welche Spalten sollen angezeigt werden? Virtuelle Spalten? ü Kommen Gruppierungen vor? GROUP BY ü Werden mehrere Tabellen benutzt? JOIN (oder SUBQUERY) ü Welche Selektionsbedingungen liegen vor? ü SUBQUERY bei indirekten Informationen oder GROUP BY ! ü Ist eine Sortierung der Abfrageliste gewünscht? Folie 87 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker ORDER BY SQL-Abfragen (Views) ◆ Definierte Tabellenansichten mit VIEW (nicht in Access) Views können als „virtuelle Tabellen“ begriffen werden. Mit einer View wird für einen bestimmten Benutzer eine für ihn geeignete Sicht auf die Daten bereitgestellt. Sie unterstützen daher den Datenschutz und die Datenunabhängigkeit. Syntax des View-Kommandos: CREATE VIEW Viewname [(Spaltenname,,,)] AS SELECT-Kommando [WITH CHECK OPTION]; Das SELECT-Kommando darf kein ORDER BY enthalten. WITH CHECK OPTION bedeutet, dass beim Ändern (INSERT, UPDATE, DELETE) in der View automatisch darauf geachtet wird, dass die Definition im SELECT-Kommando durch die Änderung nicht verletzt wird. Folie 88 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL-Abfragen (Views) ◆ Beispiel für eine VIEW SELECT * CREATE VIEW KunAdr26 FROM KunAdr26 AS SELECT KKURZ, FIRMA, LKZ, PLZ, ORT FROM KUNDE WHERE LKZ = 'D' AND ORT = 'Oldenburg'; Vordefinierte Abfragen Zugriffsrechte Erzeugt eine View mit dem Namen KunAdr26, welche nur die Kundenadressen der Oldenburger Kunden enthält ◆ Löschen einer VIEW DROP VIEW KunAdr26; SELECT * FROM KunAdr26 WHERE LKZ = 'D' ORT = 'Oldenburg'; AND Mit DROP VIEW wird die View KunAdr26 gelöscht Folie 89 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker SQL in Programmen: Embedded SQL (ESQL) für compilierte Progr.sprachen: C/C++, Cobol, Delphi Besonderheiten bei ESQL: Ø Die Daten werden in Programm-Variable kopiert Ø Der Mengenzugriff wird mittels eines Zwischenspeichers (Cursor) in Einzelsatzverarbeitung umgesetzt ◆ Einzelsatzzugriff SELECT INTO FROM WHERE KKURZ, FIRMA Programmvariablen :V_KKURZ, :V_FIRMA („Host“-Variablen) KUNDE KKURZ = 109; = :V_KKURZ Diese einfache Form des SELECT kann in einem Programm nur dann verwendet werden, wenn die Ergebnismenge aus maximal einem Datensatz besteht! Folie 90 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Embedded SQL ◆ Mengenzugriff Der Mengenzugriff erfolgt bei ESQL durch das sogenannte Cursor-Konzept: Anwendung fe tc h Die Ergebnismenge des SELECT wird zunächst in einem Zwischenspeicher (= Cursor) abgelegt. Von dort können die Ergebniszeilen nacheinander vom Programm abgeholt werden. DECLARE SELECT OPEN FETCH INTO CLOSE Folie 91 von 107 DBVS aufcur en op Cursor DB aufcur CURSOR KKURZ, FIRMA ... Cursor wird aktiviert, SELECT ausgeführt aufcur aufcur In einer Schleife können Datensätze :V_KKURZ, :V_FIRMA einzeln mit FETCH abgeholt werden Cursor wird deaktiviert aufcur; Datenbanken – Stand: September 2014 } Prof. Dr. Stefan Böcker Trigger, Stored Procedures ◆ Trigger Beim Eintritt eines Ereignisses (z.B. beim Einfügen eines Satzes) wird ein Trigger gestartet. Dieser kann eine SQL-Abfrage oder ein Datenbank-Programm ausführen. ◆ Stored Procedure Ein Datenbank-Programm kann direkt in der Datenbank gespeichert und von außerhalb aufgerufen werden. Damit wird die Ausführung i.a. schneller. Folie 92 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Datenbank-Technik ◆ ◆ Transaktionskonzept Sicherheit ◆ ◆ ◆ ◆ ◆ Archivierung Datenbank im Netz ◆ ◆ ◆ ◆ ◆ Backup, Restore Recovery Fehlertoleranz Client Server ODBC, JDBC u.a. Replikation Performance Real Time Folie 93 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Transaktionskonzept ◆ Eigenschaften von Transaktionen Eine Transaktion ist eine Menge von Datenbank-Operationen mit folgenden Eigenschaften: a) ATOMARITÄT: „Alles oder nichts“ b) KONSISTENZ: Nach Ende der Transaktion wird wieder ein konsistenter DB-Zustand hergestellt. Andere Nutzer sehen keinen inkonsistenten Zustand. Ausnahme „dirty read“ c) ISOLATION: Transaktion werden isoliert wieder zurückgesetzt, d.h. ohne Auswirkungen auf andere Transaktionen. d) DAUERHAFTIGKEIT: Nach Ende der Transaktion sind die Datenänderungen dauerhaft in der DB gespeichert ACID-Prinzip: Atomicy, Consistency, Isolation, Duration Folie 94 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Transaktionskonzept ◆ Transaktion Begin Of Transaction BOT DB-Operation 1 [...] } Transaktion DB-Operation n EOT End Of Transaction BOT, EOT: COMMIT [work] CommitTrans (SQL) (ACCESS) Zurücksetzen: ROLLBACK [work] ◆ Sperren Sperrmatrix: T1 Datensätze werden solange gesperrt, bis die Transaktion abgeschlossen ist Folie 95 von 107 Datenbanken – Stand: September 2014 \ T2 Lesesperre Lesesperre ü Schreibsperre Prof. Dr. Stefan Böcker Schreibsperre ? Transaktionskonzept Logging ◆ Alle Änderungsoperationen in der Datenbank werden mit einem LOG-Protokoll aufgezeichnet Ø UNDO-LOG Enthält „before-images“ der geänderten Datensätze, also den Zustand vor der Änderung, um die Transaktion zurücksetzen zu können Ø REDO-LOG Enthält „after-images“ der geänderten Datensätze, also den Zustand nach der Änderung, um die Transaktion dauerhaft sichern zu können Folie 96 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Sicherheit ◆ Backup (Sicherung) Sicherung der aktuellen Daten der Datenbank Ø Voll Sichern des kompletten Datenbestands Ø Inkrementell Sichern der Änderungen seit dem letzten vollen Back up bzw. seit der letzten inkrementellen Sicherung ◆ Restore Zurückspielen der letzten vollen Sicherung der Datenbank ◆ Recovery Wiederherstellen einer defekten Datenbank z.B. beim Hochfahren Ø Offene Transaktionen werden zurückgesetzt (UNDO) Ø Abgeschlossene Transaktionen werden wieder dauerhaft in der Datenbank gespeichert (REDO) Folie 97 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Sicherheit ◆ Fehlertoleranz ◆ Tolerierung eines Hardwarefehlers durch Redundanz ◆ Multicomputer/-clustersysteme und Softwaresteuerung ◆ Hardwareverdopplung ◆ Prozessor Folie 98 von 107 ◆ Computer ◆ Spiegelplatten ◆ RAID 1-5 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Archivierung ◆ ◆ Langzeitsicherung bestimmter Stände der Datenbank ◆ Archivierungshardware (Band, DVD) ◆ Archivierungssoftware ◆ Rechtliche Bestimmungen Ø Dokumentenmanagement Direkter Zugriff des Archivs für Auswertungen Folie 99 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Datenbank im Netz ◆ Client/Server-Datenbank Client Präsentation Alternative: oder 3-Tier-Architektur: Präsentation und Anwendung - Client - Anwendungs-Server - Datenbank-Server Beispiel: SAP R/3 Anwendung und Datenbank oder Datenbank AnwendungsServer Folie 100 von 107 DatenbankServer Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Datenbank im Netz ◆ OLEDB JDBC ODBO ODBC Open DataBase Connectivity (für Java JDBC) Access Anwendung Excel Anwendung Anwendung ODBC - Schnittstelle DBVS DBVS IBM DB2 Access mySQL ORACLE Excel Folie 101 von 107 DBVS SQL-Server Txt- Datei mySQL Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker unstrukturierte Daten “ODBC“ für Java OLEDB für OLAP Datenbank im Netz ◆ OLEDB Wie ODBC, jedoch auch für unformatierte Daten (Text, Grafik, Bild, ... ◆ ODBO OLEDB for OLAP ◆ JDBC Wie ODBC, jedoch für JAVA Alternative: SQLJ (ESQL für Java) Folie 102 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Performance ◆ ◆ Hardwaremaßnahmen ◆ Größerer Hauptspeicher ◆ Mehr und schnellere Prozessoren, Platten, Controller ◆ Symmetrisches Multiprocessing (SMP), Massiv Parallele Systeme (MP) Softwaremaßnahmen ◆ Index (B*-Baum, Hash-Verfahren u.a.) ◆ Bitmap Join Index ◆ Real Time Features ◆ Tuningmaßnahmen in der Anwendung ◆ Standard-Benchmarks (TCP-A, TCP-B, ...) Folie 103 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Performance § Unterstützung von Very Large Databases (VLDBs) SMP § Optimierung für SMP & MPP § Paralleler Lader § Parallele Index-Erstellung § Paralleles Query § Dynamische Daten-Partitionierung Cluster § Paralleles On-line Backup und Recovery § National Language Support § Unterstützung von Star-Queries Massivparallele Systeme Folie 104 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Real Time ◆ Anforderung Ø ◆ Reaktion in einer bestimmten Zeit auf ein Ereignis Problem Ø Standard-Betriebssysteme und DBMSe sind nicht darauf ausgelegt. Es kann gelegentlich zu starken Verzögerungen kommen ◆ Lösung Ø Besondere Eigenschaften in der Software § Scheduling § Speicherverwaltung § andere ... Folie 105 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Datenbankverwaltungssystem ◆ Oracle Oracle (objekt-relational) ◆ IBM DB2, DB2 UDB, IMS, Informix ◆ Microsoft SQL-Server, Access, FoxPro ◆ Sybase Sybase ◆ Teradata Teradata (DWH), ehem. NCR ◆ Computer Associates OpenINGRES ◆ Software AG Adabas ◆ MySQL MySQL ◆ SAP MaxDB (SAP-DB, ADABAS-D) ◆ Wonderware Industrial SQL Server ◆ Lotus Lotus Domino Server / Lotus Notes ◆ Filemaker Filemaker (Apple) ◆ Borland Interbase ◆ PostgreSQL PostgreSQL (Open Source, objekt-rel., ehem. INGRES) ◆ Progress Software ObjectStore (OODB) ◆ POET (OODB) FASTOBJECTS siehe http://de.wikipedia.org/wiki/Liste_der_Datenbankmanagementsysteme Folie 106 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Datenbankserver ◆ IBM Mainframe RS 6000 mit AIX ◆ SUN SUN-Server mit Solaris, Sun-OS ◆ HP HP-Server mit HP-UX ◆ Compaq Intelbasierte Multiprozessorsysteme ◆ Tandem FT-System mit Unix ◆ Terra Data ◆ NCR Folie 107 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker Fragen und Diskussion Folie 108 von 107 Datenbanken – Stand: September 2014 Prof. Dr. Stefan Böcker