Prof. Dr. J. Weinberg 3 IuK - Systeme Kurs A - WS 1999 Daten- und Datenbank- Design (Fortsetzung) 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 Übergang Entity-Relationship Modell Datenbank „Wie werden die Objekte im Rechner gespeichert?“ Aus der E-R Modell wird die Struktur der Datenbank abgeleitet: Objekt Datei (Tabelle) Primärschlüssel Attribut Feld Fremdschlüssel Formaler Aufbau der Datei: Dateibeschreibung (in ACCESS: „Entwurf“) In der Datei werden die „konkret existierenden“ Objekte gespeichert Datensätze Bemerkung: In der Terminologie wird in der Praxis i.d.R. nicht zwischen der formalen Beschreibung der Objekte den konkreten Objekten unterschieden. Beispiel: Das Objekt Student ist beschrieben durch die Attribute und Schlüssel (Felder): Die „konkreten Objekte“ (gespeicherten Studenten) sind: Seite 66 Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 67 Hinweis: Beim Erstellen der Datenbank sind ergänzende Festlegungen erforderlich formale Feldbeschreibungen (s.u.) Integritätsregeln („Gültigkeitsprüfungen“, s.u.) 3.9 Relationale Datenbanken Bemerkung: Es gibt weitere „Typen“ von Datenbanken: z.B. „hierarchische Datenbanken“ oder „Netzwerk Datenbanken“, die jedoch zunehmend auf relationale Datenbanken umgestellt werden. In der Praxis handelt es sich dabei entweder um „Altlasten“ oder es gibt im Einzelfall technische Gründe („Performance“ = „Zugriffsgeschwindigkeit“) für diese speziellen Lösungen. Die Verwaltung und der Zugriff auf die Daten erfordert bei diesen Datenbanken i.d.R „Spezialwissen“ und ist „EDV-Technikern“ vorbehalten. Eine relationale Datenbank wird durch „Tabellen“ (Dateien) gebildet, die „normalisiert“ sind, d.h. folgenden Regeln entsprechen: redundanzfrei (keine mehrfache Speicherung gleicher Information) keine „Defekte“ (Anomalien) bei Speichern, Löschen und Verändern der Datensätze „korrekte“ Beschreibung des Ausschnitts der Realität Diese Anforderungen werden „automatisch“ erfüllt, wenn der Datenbank ein korrektes Entity-Relationship Modell zugrunde liegt! (inhaltlicher Ansatz) In der Praxis werden aus „Performance“ - Gründen im Einzelfall gezielt redundante Daten gespeichert ( „Vorverdichtung“) In der Literatur findet sich i.d.R. ein theoretischer Ansatz: „1. - 5. Normalform“, der eine mathematisch formale Methode darstellt, die Anforderungen zu erfüllen. Eine Weiterentwicklung der relationalen Datenbanken sind „Objektorientierte Datenbanken“, die sich bislang in der Praxis nur selten finden. (siehe z.B. A. Maier, Wüst, Th: Objektorientierte Datenbanken) Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 68 Formal besteht eine relationale Datenbank aus folgenden Elementen. Datenbank (Database, Zusammenfassung aller Dateien eines Systems) Datei (Tabelle) (file, Zusammenfassung aller gleichartigen Datensätze) Datensatz (record, logische Einheit = „konkretes Obekt“ Datenfeld (kleinste Informationseinheit) (Skizze 16) Felder entsprechen Attributen, Primär- und Fremdschlüsseln des E-R Modells. Sie werden durch folgende Angaben festgelegt (Feldbeschreibung): Feldname ( Attribut) Typ Länge Integritätsregeln Typ (Bsp): Zeichen („Character“) Zahl (Ganzzahl (Integer), Dezimalzahl, Fließkomma, ..) Objekt (Graphik, Audio, Video, ...) Länge: Zeichen: (max) Anzahl Zeichen Ganzzahl (Integer). (max) Anzahl Stellen Dezimalzahl: Anzahl Vor-, Nachkommastellen Fließkommazahl: Anzahl „signifikanter Stellen“ Integritätsregeln (Auswahl) Zweck: Eingabe- oder Verarbeitungsfehler automatisch entdecken Abhängig vom Feld, anderen Feldern, anderen Dateien, ... werden automatisch vom Datenbank Verwaltungsprogramm überprüft Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 69 Abhängig vom Feld Wertebereich Eingabe erforderlich: „Muß-Feld“ ( Fehler), „ Soll-Feld“ ( Hinweis) Beispiele Wertebereich: von - bis: Preis zwischen 1,00 und 20,00 DM, Gewicht > 50, ... zulässige Werte: Haarfarbe blond, braun, schwarz, grün, ... Formel Beispiele „Eingabe erforderlich“: Kundenname muß eingegeben werden Vertreternummer „soll“ eingegeben werden, wenn nicht Hinweis, der bestätigt werden muß Abhängig von anderen Felder (der selben Datei) Wertebereich Eingabe erforderlich: „Muß-Feld“ ( Fehler), „ Soll-Feld“ ( Hinweis) Beispiele: Wenn Preis < 100 dann Rabatt < 3 %, sonst < 5 % Wenn Warengruppe = ABC dann Preis zwischen 50 und 500 DM Wenn Vertreter zugeordnet Provisionssatz erforderlich Abhängig von Datensätzen und Feldern anderer Dateien Wertebereich Eingabe erforderlich: „Muß-Feld“ ( Fehler), „ Soll-Feld“ ( Hinweis) referentielle Integrität (s.u.) Beispiele: Personalstamm. Wenn Ehegatte berufstätig dann Steuerklasse III, IV, V oder VI Auftrag: Wenn Kunde im „feindlichen“ Ausland und Produkt „Kriegswaffe“ (zB Verschlüsselungssoftware) dann Ausfuhrgenehmigung erforderlich Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 70 3.10 Referentielle Integrität Bei einer Referenz muß das bezogene Objekt vorhanden sein: „gültiger Fremdschlüssel“ (Skizze 16 Vertreter - Kunde: Der durch die Vertreter Nr eindeutig bestimmte Vertreter muß existieren) Die referentielle Integrität kann durch folgende Aktionen verletzt werden: falsche Eingabe ( Prüfung) Löschen des bezogen Objektes Verändern des Primärschlüssels des bezogen Objektes ( falsche Modellierung!) Beispiel: Welche Konsequenz hat das Ausscheiden des Vertreters Maier (Vertreternr. 4711)? Löschen des Vertreters: (Stammsatz) „hartes“ / „weiches“ Löschen Was geschieht mit den (ehemaligen) Kunden von „4711“ Möglichkeiten: Ersatz: Müller (4813) statt Maier (immer?) automatisch / manuell vorläufig kein Vertreter „Null-Wert“ (n/a, n/v, nicht zugeordnet) Hinweis: Unterschied „Null-Wert“ von Wert=0 (Beispiel: Preis!) Hinweis: „Trigger“ können ggf. die referentielle Integrität „überwachen“ und je nach „Entscheidungsregel“ Warnungen oder Hinweise geben, automatische Aktionen veranlassen oder im „Extremfall“ eine „Rückabwicklung“ (Roll-Back“) durchführen. Prof. Dr. J. Weinberg 4 IuK - Systeme Kurs A - WS 1999 Seite 71 Daten Retrieval „Wo finde ich die gewünschte Information?“ „Wie erhalte ich die gewünschte Information aus der Datenbank?“ „Problem“: Wie erfahre ich, welche Kunden welchen Wagen gemietet haben? Beispiel: Mietwagen Mietwagen Mietvertrag Kunde Mietwagennr Mietvertragsnr Kundennr Hersteller Mietwagennr Name Typ Kundennr Adresse Baujahr Preis Fuhrparkchef Farbe von Kundengruppe ... bis ... ... Liste aller Kunden, die den Wagen WI-ER-16 gemietet haben: Sortiert nach Kunden-Namen 4.1 Programme zum Datenretrieval (früher) Erstellen eines Programmes mit einer prozeduralen Programmiersprache ( 3. Generation, zB Cobol, C, Pascal, PL/1, Basic, ...) Programm Ablaufplan (Pseudo Code) s. u. Programmierung in der jeweiligen Programmiersprache Erfordert gute Programmierkenntnisse („handwerkliches Geschick“) Aufwendig (auch für geübte Programmierer) Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 72 Beispiel Mietvertrag lesen Vergleichen ob MW-Nr = WI-ER-16 JA Kundensatz lesen mit Kundennr aus dem Mietvertrag NEIN Letzter Mietvertrag Schreiben des Kundensatzes in Hilfsdatei NEIN JA Lies Hilfdateisatz Drucke Hilfsdateisatz (=Kundenstammsatz) Letzter Hilfsdateisatz NEIN JA ENDE Übung: Wie muß das Programm (Ablaufplan ergänzt werden, wenn auch der Mietwagen Typ und die Farbe ausgedruckt werden soll ? Was passiert, wenn der Kunde den (selben) Mietwagen 2x gemietet hat? Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 73 Prozedural: Genaue Anweisungen wie die Daten gesucht und verarbeitet werden: Satzweises lesen der Datei Selektion des Datensatzes ggf. lesen weiterer Dateien aufbereiten ausgeben 4.2 SQL-Abfragen Heutige Technik: SQL-Abfrage S = Structured Q = Query (sprich „kwieri“) L = Language „Umgangssprachlicher“ Ausdruck, der von der Datenbank verarbeitet wird Ergebnis: Datensätze Nicht mehr „wie“ sondern „was“ Bemerkung: SQL = Programmiersprache der 4. Generation (ergebnisorientiert) Oft mit „benutzerfreundlicher“ Oberfläche ( ACCESS) Die Datenbankstruktur muß dem Benutzer bekannt sein Folgende Angaben müssen erfolgen was: welche Felder (Attribute) select „Wähle Felder .... „ woher: aus welchen Dateien (Objekten) from „aus Datei ...“ welche: Auswahl (Filter) where „für die gilt ...“ wie: Sortierung order by „sortiert nach den Feldern ... auf-/absteigend“ Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 74 Beispiel: Alle Kunden aus Seeheim-Jugenheim: Kundenname, Adresse und Telefonnummer nach Namen absteigend sortiert: Select Name, Straße, PLZ, Ort, Telefonnummer From Kunde Where PLZ=64342 Order by Name DESC (descending=absteigend) Übungsbeispiel: Alle Kunden aus Wiesbaden? Seit der Umstellung der Postleitzahlen ist die Zuordnung Stadt PLZ nicht mehr gegeben: PLZ: xx nnn, wobei xx für eine Region steht und nnn eine laufende Nummer pro Zustellbezirk ist ( Probleme der Umstellung bei vielen Vertriebsinformationssystemen) Bsp: Wiesbaden: 65183, 65185, 65187, 65189, 65191, 65193, 65195, 65197, 65199, 65201, 65203, 65205, 65207 Bei „WHERE“ sind Formeln („Boolsche Operatoren“) möglich WHERE PLZ=65183 OR PLZ=65185 OR PLZ=65187 ... Alternativ ein Bereich: 65183 < PLZ < 65207 WHERE PLZ>65183 AND PLZ<65207 Diese Beispiele waren vom Typ A: Abfrage über eine Datei (Tabelle) Das Mietwagenbeispiel (s.o) erfordert jedoch SQL-Abfragen vom Typ B: Abfrage über mehrere Dateien (Tabellen) Beispiel: Liste aller Kunden, die den Mietwagen WI-ER 16 gemietet haben, sortiert nach Kundennamen absteigend. Angabe von Kundenname, Telefonnr., Mietpreis, Typ, Mietdauer von bis. Information ist in drei Dateien „verstreut“! Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 75 Lösung „virtuelle Dateien“, die die Information „zur Laufzeit“ zur Verfügung stellen. 4.3 Views / JOIN Auch: „logische Datei“, „virtuelle Datei/Tabelle“, „Join-Datei“ oder „externes Schema“ Hinweis: Bei ACCESS heißen Views „Abfragen“ Eine View ist eine „logische Sicht“ auf die Datenbank: virtuelle Datei (virtuelle Tabelle) Kombination von einer oder mehreren Dateien (Tabellen) Auswahl bestimmter Felder (Attribute) + ggf. neue „Rechenfelder“ Selektion (Filter) Sortierung Eine View wird zur „Laufzeit“ (d.h. bei Benutzung) als temporäre Datei erstellt und kann wie eine „normale“ Datei/Tabelle benutzt werden. Eine View enthält also keine Daten, wie eine „physische“ Datei, sondern nur eine Anweisung, wie die „virtuelle“ Datei erzeugt werden soll. Basis einer View ist eine SQL-Abfrage oder anders ausgedrückt SQL-Abfragen erzeugt Views Bei einfachen SQL-Abfragen (Typ A, nur eine Tabelle) kann man sich die View als einen „Ausschnitt“ der Tabelle vorstellen. Views, die sich aus mehreren Tabellen zusammensetzen werden über eine spezielle Operation (SQL-Befehl) gebildet JOIN ... ON Sie erscheinen wie eine neue „große“ Tabelle, die alle gewünschten Felder enthält. Beispiel: Mietwagen Liste aller Kunden, die den Mietwagen WI-ER 16 gemietet haben, sortiert nach Kundennamen absteigend. Angabe von Kundenname, Telefonnr., Mietpreis, Typ, Mietdauer von bis. Name Telefonnr Preis Typ Miete von bis Maier 0611-19194 153,00 BWM 1.12.1997 12.12.1997 Mayer 069-787989 325,00 BMW 13.5.1997 14.5.1997 Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Schmidt 125,00 0611-89874 BMW Seite 76 12.11.1997 14.11.1997 Beim Join muß angegeben werden: welche Dateien über welche Schlüssel die Datensätze verbunden werden Beispiel für Vertreter / Kunde SELECT Kundenname, Kundenort, Vertretername FROM Kunde JOIN Vertreter ON Kunde.Vertreternr = Vertreter.Vertreternr WHERE Vertretername=’Müller’ OR Vertretername=’Maier’ ORDER BY Kundenname ASC (ascending=aufsteigend) Ergebnisbeispiel: Kundenname Kundenort Vertretername Adam Wiesbaden Müller Beyer Leverkusen Müller Certa Mannheim Maier Düsentrieb Entenhausen Müller Erlenemayer München Maier Bemerkung: Die exakte Syntax (=Schreibweise) unterscheidet sich bei den unterschiedlichen Datenbanken, muß jedoch (für die spezielle Datenbank) genau eingehalten werden! Viele SQL-Datenbanken besitzen eine „benutzerfreundliche“ Oberflächen, mit der die Abfrage erzeugt werden kann, oft „Query by Example“ genannt. Die Benutzung scheitert in der Praxis jedoch vielfach daran, daß die Benutzer aus den Fachabteilungen die Datenbankstruktur (E-R Modell) nicht kennen oder verstehen. ( „Entwurfsansicht“ bei ACCESS) Bei ACCESS wird ein JOIN in der Regel dadurch erzeugt, daß die entsprechenden Dateien in das „Tabellenfenster“ der Abfrage gebracht werden (Entwurfsansicht). Wenn die „Beziehungen“ korrekt definiert wurden, wird der JOIN automatisch hergestellt. Die Angaben Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 77 zu Select, Where, Order by werden implizit durch das weitere Ausfüllen der Entwurfsansicht festgelegt. Das SQL-Statement wird im Hintergrund hieraus automatisch erzeugt und kann über Ansicht SQL angesehen und ggf. modifiziert werden. Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 78 Beispiel (Aufgabe 19) Projektabrechnung ( Übung 6: Datenbank „Projekt.mdb“) E-R Modell (Ausschnitt) View Das zugehörige SQL-Statement (SQL-Befehl): (Wähle: Ansicht SQL) SELECT DISTINCTROW Kunde.[Name der Firma], Mitarbeiter.Name, Projekt.[Telefonnr beim Kunden], Projekt.Stundenverrechnungssatz FROM Kunde INNER JOIN (Mitarbeiter INNER JOIN Projekt ON Mitarbeiter.Personalnr = Projekt.Mitarbeiter) ON Kunde.Kundennr = Projekt.Kunde ORDER BY Kunde.[Name der Firma], Mitarbeiter.Name; Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Beispiel Auftragskopf / Auftragsposition mit Rechenfeld „Betrag“: ( Übung 7: Datenbank „Auftrag.mdb“ Auftragsbestätigung über eine virtuelle Tabelle („View“, Abfrage“ s.u.) Rechenfeld: Betrag: Preis * Menge *(1-Positionsrabatt) Seite 79 Prof. Dr. J. Weinberg 4.4 IuK - Systeme Kurs A - WS 1999 Seite 80 Inner JOIN / Outer JOIN Beispiel „Vertreter / Kunde“: Was wird (soll) passieren, wenn kein „Partner“ vorhanden ist? Nur Kunden und Vertreter mit „Partner“ Alle Kunden (ggf N/V-Vermerk Null-Wert) Alle Vertreter Übung: mehrere Szenarien in denen die Alternativen „sinnvoll“ sind. Bsp: Ehe nur Ehepaare, alle Männer mit ggf. Ehefrauen, alle Frauen mit ggf. Ehemänner Inner Join: In der View nur die Datensätze, bei denen bezüglich aller Beziehungen ein entsprechender „Partner“-Datensatz vorhanden ist. Outer Join: Eine Primärdatei, die vollständig abgearbeitet wird. Eine oder mehrere Sekundärdateien, deren Felder ggf. leer bleiben (oder mit einem N/V-Vermerk). Beispiel: Projekte, Kundenlisten, ... Sonderfall: Bei einigen Datenbanken (zB DB2,) ist es auch möglich eine „inverse“ Join-Operation durchzuführen, d. h. alle Datensätze der Primädatei, die keinen gültigen Verweis auf eine Sekundärdatei haben. Beispiel: Alle Kunden ohne gültigen Vertreter. Beispiel: in ACCESS kann dies durch eine Outer-Join Abfrage realisiert werden, mit einer Selektion auf den Primärschlüssel der Sekundärdatei „=NULL“ „Assistent zur Inkonsistenzsuche Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Beispiel ACCESS: Alle Mitarbeiter ohne gültige Abteilung ( Musterlösung zu Übung6) Seite 81 Prof. Dr. J. Weinberg 4.5 IuK - Systeme Kurs A - WS 1999 Seite 82 Gruppierungen Oft stellt sich in der Praxis das Problem, nicht einzelne Datensätze anzuzeigen, sondern vielmehr gleichartige Datensätze zusammenfassen und Berechnungen für die Gruppe durchzuführen ( „Aggregatfunktionen“). Beispiel: Summe aller Umsätze eines Kunden Anzahl aller bei einem Kunden eingesetzten Berater Maximaler Einkaufspreis eines Artikels Durchschnittlicher Einkaufspreis einer Warengruppe ... Hierzu stehen in SQL „Aggregatfunktionen“ zur Verfügung, die in einer View benutzt werden können: Summe (SUM) MIN MAX Mittelwert (AVG) Std. Abweichung (STDDEV) Anzahl (COUNT) ... Als Ergebnis enthält die View einen Datensatz pro Gruppe mit dem Ergebnis der Aggregatfunktion. Beispiel: pro Kunde ein Datensatz mit dem Jahresumsatz. Nun kann bei Bedarf eine weitere Selektion und oder Sortierung auf die „Ergebnisfelder“ erfolgen. Beispiel: Hitliste Kundenliste mit Jahresumsatz größer 10 Mio. DM, absteigend sortiert nach Umsatz. Beispiel: Sortimentsübersicht(summarisch) Anzahl aller Artikel pro Warengruppe, sortiert nach Warengruppen (oder ... sortiert nach Anzahl Artikel). Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 83 SQL-Befehle zum „Gruppieren“ GROUP BY „Fasse alle Datensätze zusammen, die den gleichen Feldinhalt von ... haben“ HAVING „Jedoch nur, wenn das Ergebnisfeld die folgende Bedingung erfüllt ...“ Beispiel: Anzahl aller Artikel pro Warengruppe: Select Warengruppe, COUNT() From Artikel Group by Warengruppe Order by Warengruppe ASC Übung: ... absteigend nach Anzahl Artikel. Realisierung in ACCESS: Bemerkung: Der „Entwurf“ ist noch nicht vollständig, die Sortierung muß noch gewählt werden. Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 84 Wenn zusätzlich die Warengruppe im „Klartext“ erscheinen soll, ist ein „Join“ auf die Tabelle „Warengruppe“ erforderlich: Bemerkung: Auch in diesen „Screen-shots“ fehlt noch die Sortierung. Beispiel: „Hitliste“: Kunden nach Gesamtumsatz (lfd. Jahr) absteigend, jedoch nur mit Gesamtumsatz > 10.000.000: Select Kunde, SUM(Umsatz) From Auftrag Where Auftragsdatum >= 1.1.1997 Group by Kunde HAVING SUM(Umsatz) >10000000 Order by SUM(Umsatz) DESC (descending=absteigend) Prof. Dr. J. Weinberg IuK - Systeme Kurs A - WS 1999 Seite 85 Beispiel: Alle Mitarbeiter, die an mehr als einem Projekt arbeiten nach Anzahl Projekten absteigend Select Mitarbeiternr, COUNT() From Projekt Group by Mitarbeiternr Having COUNT() > 1 Order by COUNT() DESC Das Beispiel mit ACCESS ( Übung 6) „joint“ darüber hinaus den Mitarbeiternamen aus „Mitarbeiter“ Weitere Beispiele mit ACCESS: siehe Übung 6 und Übung 7.