Wirtschaftsinformatik II Datenorganisation – Datenbanken - Kommunikation Studiengang Wirtschaftsingenieurwesen Sommersemester 2009 (2. Semester) 2 SWS Vorlesung 2 SWS Praktikum Prof. Fritzsche 5 Gruppen, Prof. Fritzsche /Frau H. Schubert Beleg als Zulassungsvoraussetzung zur Prüfung Schriftliche Prüfung (Klausur, 90 min., ohne Unterlagen) Note Wirtschaftsinformatik = W-Inf I (40 %) + W-Inf II (60 %) Prof. Dr. Hartmut Fritzsche Fachbereich Informatik/Mathematik Raum Z 366 Tel. (0351) 462 2606 [email protected] www.informatik.htw-dresden.de/~fritzsch Inhalt 1. Grundlagen der Datenorganisation 2. Einführung in das relationale Datenmodell 3. MS Access 4. Programmentwicklung mit VBA 5. Datenmodellierung 6. Datenbankorganisation 7. Datenschutz und Informationssicherheit 8. Kommunikationssysteme 1. Grundlagen der Datenorganisation 1.1 Motivation: Speichern und Wiederfinden Programmverarbeitung findet grundsätzlich im Hauptspeicher (HS) statt. Datenverwaltung „intern“: HS, Register, Puffer (Cache) „extern“: Festplatte, CD-ROM, DVD, ... intern: „statisch“ Anforderung bereits zur Übersetzungszeit bekannt (Compiler) vs. „dynamisch“ Anforderung erst zur Laufzeit bekannt Dateien Persistenz Übersetzen, Verbinden und Ausführen von Programmen: übersetzen x.c verbinden (linken) HS x.o a.out y.h Bibliotheksprogramme Quellprogramme Objektprogramme (Zielprogramme) Ausführbares Programm (Lademodul, Executable) Organisationsformen ungeordnete Folge geordnete Folge Binärer Baum B*-Baum Hashtabelle Basisoperationen • Einfügen eines Elementes in die Datenbasis • Suchen eines Elementes in der Datenbasis • Entfernen eines Elementes aus der Datenbasis Reihenfolge der Verarbeitung • bestimmte Reihenfolge • beliebige Reihenfolge Zugriffsverfahren • sequentiell • binär/trichotom (bei Bäumen) • Hash-Verfahren (direkt oder indirekt) a) eine Folge von Bytes (Beispiel UNIX) b) eine Folge von Datensätzen (Beispiel CP/M) c) ein Baum 1.2 Datenbanksysteme Datenbanksystem (DBS) Datenbankmanagementsystem (DBMS) Datenbank (DB) DBS = DBMS + DB DBS sind eine spezielle Art von Informationssystemen Ziel: weitgehende Unabhängigkeit der Daten von den mit ihnen arbeitenden Programmen bzw. Benutzern 3 Ebenen - Externe Ebene (Benutzersichten) - Konzeptuelle Ebene (Logische Gesamtsicht) - Interne Ebene (physische Sicht) 2. Einführung Relationales Datenmodell Relationenmodell nach E. F. Codd, 1970 Strukturteil: Beschreiben von Objekttypen durch Relationenschemata Operationsteil: Satz von Operationen für Anfragen (Selektion) Definitionen Modifikationen (Einfügen, Entfernen) 2.1 Strukturteil Objekttyp beschrieben durch Menge von Attributen mit Wertebereichen Objekt besitzt Ausprägungen (Werte) zu Attributen Relationenschema R umfasst Objekttyp, Attribute, Wertebereiche Relationen r(R) Teilmenge des kartesischen Produktes über den Wertebereichen von R Ein Element einer Relation heisst Tupel Basisrelation Die in der Datenbank aktuell vorhandene Relation zu einem definierten Relationenschema Datenbank Menge aller Basisrelationen Datenbankschema Menge aller Relationenschemata Eigenschaften einer Relation: • • • • keine mehrfachen Tupel vorhanden keine festgelegte Reihenfolge der Tupel in der Relation keine Festlegung der Reihenfolge der Attribute Attributwerte sind „atomar“ (sog. 1 Normalform) Tabellendarstellung von Relationen: • • • • Relation Attribut Tupel Wertebereich • Grad (degree) • Kardinalität Tabelle Spalte Datensatz, Zeile Domäne Anzahl der Attribute Anzahl der Datensätze Beispiel für das gesamte Semester: 4 Objekttypen aus dem Geschäftsbereich einer Handelsfirma (Kaufen, Verkaufen) enthalten Bestellungen Artikel werden geliefert von Lieferanten Vorlesung: Praktikum: enthalten Kunden Kunden, Bestellungen Artikel, Bestellungen Lieferanten LNR LNAME … Kunden KNR Kundennummer NAME VORNAME STRASSE PLZ ORT UMSATZ SUMOFFEN Summe unbez. Rechnungen LETZTRECH Datum der letzten Rechnung FRECHOFFEN unbez. Rechn. vor LETZTRECH 2.2 Operationsteil Relationenalgebra Normsprache SQL Relationenalgebra: Satz von Grundoperationen Selektion Projektion Natürlicher Verbund Mengenoperationen , , Umbenennung Selektion Wählt Tupel (Zeilen) aus einer Relation (Tabelle) entsprechend einer Selektionsbedingung aus. Selektionsbedingung kann sein: Attribut – Konstanten – Vergleich Attribut – Attribut – Vergleich Verknüpfung von Selektionsbedingungen durch Operatoren , , ¬ Beispiele: ORT = “Dortmund“ (r(Kunden)) SUMOFFEN <> 0 (r(Kunden)) NAME = VORNAME (r(Kunden)) SUMOFFEN <> 0 AND UMSATZ > 10000 (r(Kunden)) Projektion Wählt Spalten aus einer Relation (Tabelle) aus. es entsteht eine neue Relation Mehrfache Tupel werden in der Ergebnismenge eliminiert Natürlicher Verbund Verknüpfung von Relationen über allen gemeinsamen Attributen. Nur Tupel mit gemeinsamen gleichen Attributwerten werden zu neuen Tupeln verbunden. Mengenoperationen Übliche Mengenoperationen auf Relationen anwenden, die das gleiche Relationenschema besitzen. Umbenennung Dient zum „kompatibel machen“ von Relationenschemata, die später vereinigt werden sollen. SQL (Standard Query Language) zur • • • • Definition von Relationenschemata Erzeugung von Zugriffspfaden Anfragen Datenmanipulationen Hier nur Anfrageteil behandelt. SQL-Abfrage (SFW_Block): SELECT … (Attributliste, kein Entfernen von Duplikaten, * für alle Attribute) FROM … (beteiligte Relationen, kartesisches Produkt) WHERE … (komplexe Selektionsbedingung) ; Semantik: 1. Kartesisches Produkt der Relationen hinter FROM mit dem Relationsnamen als Präfix 2. Anwendung der Bedingungen der WHERE-Klausel auf das Ergebnis der FROMKlausel 3. Projektion auf die Attribute der SELECT-Klausel Beispiel: Personen Name Vorname Geburtsdatum Wohnort Meyer Peter 10.05.1960 Berlin Meyer Peter 20.08.1966 Dresden Schmitt Susanne 01.01.1970 Aue Schmitt Petra 01.01.1970 Rostock Name Vorname Geburtsdatum Hobby Meyer Peter 10.05.1960 Surfen Meyer Peter 10.05.1960 Klavierspiel Meyer Peter 20.08.1966 Fußball Schmitt Susanne 01.01.1970 Tanzen Schmitt Petra 01.01.1970 Surfen Pers_Hobbies 3. MS ACCESS Leistungsmerkmale (eines DBMS): Systematische Verwaltung der Daten in Tabellen, Verbindung von Tabellen Bildschirmformulare zur Pflege der Daten (GUI) Werkzeuge zur Abfrage von Daten Komplexe Auswertungen, Erstellen von Verzeichnissen 3.1 Die Arbeitsoberfläche 3.2 Eine neue Datenbank anlegen 3.3 Tabellen 3.4 Abfragen 3.5 Formulare 3.6 Beziehungen zwischen Tabellen 3.7 Berichte 3.8 Makros 3.1 Die Arbeitsoberfläche Name der Datenbank Statusleiste Datenbankfenster 3.2 Eine neue Datenbank anlegen nach dem Starten von MS ACCESS können in einem File-Dialog Verzeichnis und Dateiname für eine neu anzulegende Datenbank gewählt werden für die LV wird Handelsfirma.mdb festgelegt. MS ACCESS Datenbanken haben die Dateinamen-Extension .mdb das Datenbankfenster wird geöffnet, in der Titelleiste erscheint der Name der DB. Über das Datenbankfenster kann mit der DB gearbeitet werden. 3.3 Tabellen Es wird unterschieden (beim Erstellen/Öffnen): Datenblattansicht Entwurfsansicht - Entwurfsansicht - Datenblattansicht Datentyp Erklärung Größe Text für Zeichenketten aus Buchstaben, Ziffern und Sonderzeichen max. 255 Zeichen Memo für längere Texte max. 65535 Zeichen Zahl für Ganzzahl-, Gleitkomma- und Dezimalzahltypen je nach Typ 1,2,4 oder 8 Byte Datum/Uhrzeit Jedes gültige Datum zwischen 1.1.100 und 31.12.9999 ist erlaubt. 8 Byte Währung Zahlenwerte, diese werden automatisch um ein Währungssymbol ergänzt, mit zwei Nachkommastellen dargestellt und bündig angeordnet 8 Byte AutoWert Zahlenwert, dient der fortlaufenden Vergabe von Nummern. Der Wert wird für jeden neu eingefügten Datensatz automatisch um 1 erhöht. Das Feld ist für die Dateneingabe gesperrt. Der Datentyp AutoWert darf nur einmal pro Tabelle vergeben werden. 4 Byte Ja/Nein Es gibt genau zwei Werte, die die möglichen Ergebnisse einer Entscheidungsfrage repräsentieren (sog. Boolesches Feld) 1 Bit OLE-Objekt Ein OLE-Objekt wurde in einem anderen Programm erstellt (z.B. Excel) und kann eine Grafik, eine Excel-Tabelle oder ähnliches sein. OLE steht für Object linking and embedding. bis zu 1 GByte Hyperlink Werte sind Hyperlinks, beim Klicken darauf werden die verlinkten Objekte geöffnet und angezeigt. max. 64000 Zeichen Nachschlagliste Feldwerte können aus einer Liste ausgewählt werden. Der Liste kann z.B. eine andere Tabelle zugrunde liegen. 4 Byte Eingabeformat: • Definition von Mustern für die Dateneingabe z.B. PLZ 00000;;* ***** • Literalzeichen: Klammern, Punkte, Bindestriche, … (werden automatisch durch Programm eingefügt) • Platzhalter (Joker): Formatzeichen Syntax: eingabeformat ; speicherangabe ; platzhalter Standard: underline 0: Literalzeichen sollen mit gespeichert werden 1: nur eingegebene Daten gespeichert 0 eine Dezimalziffer (0 – 9), Eingabe zwingend 9 eine Dezimalziffer (0 – 9) oder ein Leerzeichen, Eingabe optional # eine Dezimalziffer, ein Leerzeichen oder Plus- bzw. Minuszeichen L ein Buchstabe (A – Z), Eingabe zwingend ? ein Buchstabe (A – Z), Eingabe optional A ein Buchstabe oder eine Ziffer, Eingabe zwingend a ein Buchstabe oder eine Ziffer, Eingabe optional & ein beliebiges Zeichen (einschließlich Leerzeichen), Eingabe zwingend C ein beliebiges Zeichen (einschließlich Leerzeichen), Eingabe optional .,:;-/ Dezimal-, Tausender-, Datums und Zeittrennzeichen (tatsächliche Darstellungen sind länderspezifisch!) \ das nachfolgende Zeichen wird als Konstante ausgegeben < nachfolgende Zeichen werden in Kleinbuchstaben umgewandelt > nachfolgende Zeichen werden in Großbuchstaben umgewandelt Gültigkeitsprüfung während der Dateneingabe ► integrierte Gültigkeitsprüfung für Datum/Uhrzeit Zahlen Boolesche Werte ► nutzerdefiniert Gültigkeitsregeln Syntax: Gültigkeitsprüfung (+ Gültigkeitsmeldung) regel vergleichsoperator vergleichswert vergleichsoperator vergleichswert Verknüpfung von Regeln: = < > WIE datum zahl log. wert text funktion UND ODER NICHT ZWISCHEN Nachschlaglisten: -> Eingabewerte kommen aus Tabellen, Abfragen, selbst definierten Listen -> Vermeiden von Fehlern bei der Dateneingabe 3.4 Abfragen Abfragen erstellen Abfragearten: • Auswahlabfragen • Parameterabfragen • Aktionsabfragen -Tabellenerstellungsabfragen - Aktualisierungsabfragen - Anfügeabfragen - Löschabfragen • Kreuztabellenabfragen • Pivot-Tabellenabfragen • SQL-Abfragen Zum Erstellen einer Auswahlabfrage ist im Datenbankfenster das Objekt Abfragen zu wählen. Die gewünschte Tabelle hinzufügen und das Fenster schließen. Auf dem Bildschirm erscheint das Abfragefenster in der Entwurfsansicht: Parameterabfragen: Aktionsabfragen • Tabellenerstellungsabfragen neue Tabelle als Kopie • Aktualisierungsabfragen Änderungen an einer Gruppe von Datensätzen z.B. Erhöhung der Preise • Anfügeabfragen • Löschabfragen Datensätze aus einer Tabelle in zweite Tabelle einfügen löschen von Datensätzen aus einer Tabelle, die eine bestimmte Bedingung erfüllen Neue Bezeichnung! 3.5 Formulare Wahl eines Layouts: • • • • • Einspaltige Darstellung, Tabellarische Darstellung, Datenblattdarstellung, Block-Darstellung Hauptformular mit Unterformular Formularansicht, einspaltig : Formularansicht, tabellarisch : Formularassistent: Erstellen eines Formulars in der Entwurfsansicht: Entwurfsansicht: Die Steuerelemente Bezeichnung - Textfeld Listen- u. Kombinationsfeld Linien/Rechtecke/ … Befehlsschaltflächen Eigenschaften von Steuerelementen Aktivierungsreihenfolge festlegen 3.6 Beziehungen zwischen Tabellen 1. Konzeptuelle Grundlagen 2. Praktische Handhabung Beispiel: Hauptformular mit Unterformular Entity – Relationship – Modelle (Kap. 5) 3.7 Berichte In Berichten werden Daten aus Tabellen, Abfragen oder Formularen für den Druck aufbereitet und dargestellt. Zum Beispiel können in einem Bericht Diagramme erzeugt und dargestellt werden. Es wird wie bei Tabellen, Abfragen und Formularen unterschieden: Entwurf Dabei wird ein Objekt vom Typ Bericht erstellt, in dem Bezüge zu Datenquellen und Festlegungen zur Gestaltung enthalten sind. Präsentation Dabei wird das im Entwurf erstellte Objekt „ausgeführt“, d.h. es wird ein aktueller Bericht erzeugt. Struktur von Berichten: Berichtskopf Berichtsfuß Seitenkopf Seitenfuß Gruppenkopf Gruppenfuß Detailbereich (auf der 1. Seite des Berichts) (auf der letzten Seite des Berichts) (auf jeder Berichtsseite) (auf jeder Berichtsseite) (nur für Gruppierungsbericht) (nur für Gruppierungsbericht) In einem gruppierten Bericht werden die Daten nach bestimmten Datenfeldern gruppiert dargestellt. Beispiel: Artikel nach der ersten Stelle der Artikelnummer (der Artikelgruppe) gruppiert darstellen 3.8 Makros Makros sind Befehlsfolgen, die unter einem Namen in der Datenbank abgespeichert und ausgeführt werden können. Makros eignen sich besonders zur Gestaltung von Menüsteuerungen. Beispiel: Erzeugen eines Formulars FormMakroTest, das eine Befehlsschaltfläche mit der Beschriftung „Formularaufruf“ enthält. Durch ein mit der Schaltfläche verknüpftes Makro MakroTestFormular soll bewirkt werden, dass • ein bereits existierendes Formular Form1Artikel geöffnet und • das Formular FormMakroTest geschlossen wird. Klick Lösung: • Objekt Makros → Neu • Einfügen Aktionen: - Öffnen Formular - Schließen Formularname: Objekttyp: Objektname: Form1Artikel Formular FormMakroTest • Speichern des Makros unter dem Namen MakroTestFormular • Zuordnen des Makros zur Schaltfläche Befehl0 im Formular FormMakroTest, Ereignis: Beim Klicken • Testen der Schaltfläche im Formular FormMakroTest 4. Programmentwicklung mit VBA Module enthalten Prozeduren, sie sind selbst nicht ausführbar. Modultypen: Modul Standardmodul Klassenmodul Formularmodul Berichtsmodul Ein Standardmodul ist für die gesamte Datenbank gültig und sollte deshalb Prozeduren und Funktionen für häufig an verschiedenen Stellen benötigte Aufgaben enthalten. Ein Klassenmodul ist mit einem Objekt verbunden. Jedem Formular oder Bericht ist genau ein Klassenmodul zugeordnet. Access erstellt Formular- und Berichtsmodule automatisch, wenn eine Ereignisprozedur für ein Formular oder einen Bericht erstellt wird. Prozeduren sind Einheiten, die ausführbare Programme repräsentieren. → Notation als Quelltext in der Sprache VBA → Automatische Übersetzung (Compilation) in maschinen-internen Code → Unterscheidung: Deklaration und Ausführung (expliziter oder impliziter Aufruf) Prozedurtypen: Aufrufe • verarbeiten Parameter (Argumente) • Geben keinen Wert zurück Prozedur FunctionProzedur Aufrufe • verarbeiten Parameter (Argumente) • Geben Wert an den Aufrufer zurück SubProzedur Allgemeine Prozedur Werden als Reaktion auf Ereignisse implizit ausgeführt EreignisProzedur Konstanten bezeichnen Werte, die während der Abarbeitung eines Programms unveränderlich sind. Die Werte werden a. in einer externen Darstellung angegeben (sog. Literale) . Mit der Bezeichnung der Konstanten wird ihr Datentyp festgelegt. Beispiele: 4, "Dresden", #12.04.2005# b. durch eine Konstantendeklaration festgelegt, wobei die Konstante einen Namen erhält. Beispiel: Const mws = 0.16 Variablen bezeichnen Speicherplätze, die während der Abarbeitung eines Programms nacheinander verschiedene Werte eines bestimmten Datentyps aufnehmen können. Beispiel: summe ist der Name einer Variablen. Die Zuordnung eines Datentyps zu einer Variablen erfolgt explizit durch eine Variablendeklaration oder implizit. Syntax: <vartyp> <variable> As <datentypname> [, <variable> As <datentypname> ] … Beispiel: Dim menge As Integer, preis As Integer Mittels Wertzuweisungen können Variablen Werte zugewiesen werden. Beispiel: summe = 2+3 Der Variablen mit dem Namen links vom Zuweisungssymbol (=) wird der Wert zugewiesen, der sich bei der Berechnung des rechts vom Zuweisungssymbol stehenden Ausdrucks ergibt. Programm: Folge (Sequenz) von Anweisungen Anweisungen sind ► Wertzuweisungen ► Prozeduraufrufe (keine Funktionsaufrufe!) ► Steuerstrukturen zur Ablaufsteuerung Regeln für Sichtbarkeit (Scope ) und Lebensdauer (Extent) von Variablen Bezeichner Variablentyp Sichtbarkeitsbereich Lebensdauer Public Globale Variable jede Prozedur der gesamte Laufzeit der gesamten Datenbankanwendung Datenbankanwendung Private Global für Modul jede Prozedur des Moduls, in dem die Variable deklariert ist gesamte Laufzeit der Datenbankanwendung Dim Lokale Variable nur die Prozedur, in der die Variable deklariert ist nur während der Ausführungszeit der Prozedur Static Lokale Variable nur die Prozedur, in der die Variable deklariert ist gesamte Laufzeit der Datenbankanwendung Beispiel: Prozedur, die einen Zähler realisiert, der bei jedem Prozeduraufruf den Wert einer Zustandsvariablen z um 1 erhöht. Der Wert wird in einer „Message Box“ ausgegeben. Prozedurdeklaration: Public Sub Zähler() Static z As Integer z = z + 1 MsgBox "Zustand:" & z, vbInformation End Sub Prozeduraufruf: Zähler Prozedurausführung: Das im Beispiel verwendete Meldungsfenster (MsgBox) kann sowohl als Funktion als auch als Sub-Prozedur angewendet werden. Syntax: MsgBox( <text>, <schaltflächen>, <titel> ) Verwendung als Funktion MsgBox <text>, <schaltflächen>, <titel> Verwendung als Prozedur <text> enthält den anzuzeigenden Meldungstext <schaltflächen> spezifiziert die anzuzeigenden Schaltflächen. Es existieren vordefinierte Symbole, die mit Konstanten benannt werden können. <titel> bestimmt den Text in der Titelleiste des Meldungsfensters Bei Anwendung als Funktion liefert der MsgBox-Aufruf den Wert der betätigten Schaltfläche. Folgende Werte werden von den in Meldungsfenstern dargestellten Schaltflächen geliefert: Wert Konstante Gewählte Schaltfläche 1 vbOK OK 2 vbCancel Abbrechen 3 vbAbort Abbrechen 4 vbRetry Wiederholen 5 vbIgnore Ignorieren 6 vbYes Ja 7 vbNo Nein Vordefinierte Konstanten für das Anzeigen von Schaltflächen, Symbolen und anderen Einstellungen: Beachte: Kombinationen der Werte bei Verwendung von Schaltflächen und Symbolen. Eingabedialoge Public Function Mehrwertsteuer() Dim wert wert = InputBox("Bitte Betrag eingeben:", _ "Berechnung der Mehrwertsteuer") wert = FormatCurrency((Nz(wert, 0) * 0.19), 2) MsgBox "Ergebnis:" & wert End Function Die Gestaltung von Eingabedialogen erfolgt mittels InputBox. Syntax: InputBox( <text>, <titel>, <vorgabe> ) Verwendung als Funktion <text> enthält einen Meldungstext als Eingabeaufforderung <titel> spezifiziert den Text in der Titelleiste des Fensters <vorgabe> Wert der im Eingabefeld als Vorgabe angezeigt werden soll Semantik: Rückgabewert ist die Eingabe des Anwenders im Eingabefeld. Der Datentyp des Rückgabewertes ist String bzw. Variant. Bei Betätigen der Schaltfläche „Abbrechen“ ist der Rückgabewert ein leerer String. Operatoren In den bisherigen Beispielen wurden bereits Operatoren in Ausdrücken verwendet. Grundsätzlich werden Klassen von Operatoren unterschieden: ► Zeichenkettenoperatoren Verkettungsoperator: & Bsp.: "Datenbank" & "fenster" → "Datenbankfenster" ► Arithmetische Operatoren +,-,*, / \ ganzzahlige Division – Quotient MOD ganzzahlige Division – Rest (modulo – Operator) ^ Potenz ► Vergleichsoperatoren =, <>, >, <, >=, <=, Like ► Logische Operatoren Not, And, Or, Xor Steuerstrukturen Ein Programm besteht aus einer (zeilenweise notierten) Folge von Anweisungen, die der Reihe nach ausgeführt werden. Eine solche Folge nennt man Anweisungssequenz. Als Alternative wird eine Programmkonstruktion bezeichnet, die es erlaubt, - eine Anweisungsfolge in Abhängigkeit vom Ergebnis der Auswertung einer Bedingung auszuführen oder nicht auszuführen, oder - zwei unterschiedliche Anweisungsfolgen je nach Ergebnis der Auswertung einer Bedingung (True oder False ) auszuführen. Syntax: If End If <bedingung> Then <anweisungsfolge> If <bedingung> Then <anweisungsfolge1> Else <anweisungsfolge2> End If Beispiel: Public Sub Rabatt() Dim anzahl As Integer, ausgabe As String Dim einzelpreis As Double, gesamtpreis As Double anzahl = InputBox("Wieviele Teile bestellt: ") einzelpreis = 10 gesamtpreis = anzahl * einzelpreis If gesamtpreis >= 100 Then ausgabe = "rabatt möglich" Else ausgabe = "kein Rabatt möglich!" End If MsgBox ausgabe End Sub Beispiel für eine Fallauswahl: Public Sub Noten() Dim note As Integer, text As String note = InputBox("Bitte Note eingeben:","Noteneingabe") Select Case note Case 1 text = "Note: sehr gut" Case 2 text = "Note: gut" Case 3 text = "Note: befriedigend" Case 4 text = "Note: genügend" Case 5 text = "Note: ungenügend" Case Else text = "keine gültige Note!" End Select MsgBox text, vbInformation, "Beispiel Noten" End Sub Als Iteration (Schleife) wird eine Programmkonstruktion bezeichnet, die es ermöglicht, eine Anweisungsfolge wiederholt auszuführen. Die Anzahl der Wiederholungen kann durch einen Zähler gesteuert werden oder vom Ergebnis der Auswertung einer Bedingung in jedem Schleifendurchlauf abhängen. Zähler-gesteuerte Iteration Syntax: For <zähler> = <startwert> To <endwert> [Step <schrittweite>] <anweisungsfolge> Next Semantik: Für <zähler> ist der Name einer Variablen einzusetzen. <startwert>, <endwert> und <schrittweite> stehen für Ausdrücke, deren Auswertung jeweils eine ganze Zahl liefert. Die <anweisungsfolge> wird wiederholt ausgeführt. Die Anzahl der Wiederholungen ergibt sich aus <endwert> - <startwert>+1, falls keine <schrittweite> angegeben wurde, d.h. die <schrittweite> ist in diesem Fall gleich 1. Die <anweisungsfolge> wird das erste Mal mit dem <startwert> als Wert für <zähler> ausgeführt, anschließend wird der <zähler> um die <schrittweite> erhöht bzw. erniedrigt und geprüft, ob der <endwert> über- bzw. unterschritten wurde. Ist das nicht der Fall, wird die <anweisungsfolge> erneut ausgeführt usw. Bedingungs-gesteuerte Iteration: „anfangsgesteuert“ Syntax: Do While <bedingung> <anweisungsfolge> Loop Semantik: Zuerst wird <bedingung> ausgewertet. Liefert die Auswertung des als <bedingung> formulierten Ausdrucks True, wird anschließend die <anweisungsfolge> ausgeführt und es wird mit der erneuten Auswertung der <bedingung> fortgesetzt. Die Iteration wird beendet, wenn die Auswertung der <bedingung> erstmals den Wert False liefert. Die Abarbeitung wird in diesem Fall mit der auf Loop logisch folgenden Anweisung fortgesetzt. “endegesteuert” Syntax: Do <anweisungsfolge> Loop Until <bedingung> Semantik: Zuerst wird die <anweisungsfolge> ausgeführt. Anschließend wird <bedingung> ausgewertet. Liefert die Auswertung des als <bedingung> formulierten Ausdrucks True, wird die Iteration beendet. Die Abarbeitung wird in diesem Fall mit der auf Loop logisch folgenden Anweisung fortgesetzt. Liefert die Auswertung des als <bedingung> formulierten Ausdrucks False, wird anschließend die <anweisungsfolge> ausgeführt und es wird mit der erneuten Auswertung der <bedingung> fortgesetzt. Beispiel: Berechnung des größten gemeinsamen Teilers zweier natürlicher Zahlen p und q , mit p > 0 und q > 0. Public Function ggt(p As Long, q As Long) Dim h As Long, r As Long If q > p Then h = p p = q q = h End If r = p Mod q Do While r <> 0 p = q q = r r = p Mod q Loop ggt = q End Function Objekte in Access Access-Elemente – wie Tabellen, Formulare, Berichte, Steuerelemente usw. – sind Objekte. Von einem VBA-Programm kann auf Objekte zugegriffen werden. ► Jedes Objekt besitzt individuelle Eigenschaften, d.h. Ausprägungen von Merkmalen. ► Auf jedes Objekt können Operationen angewendet werden. Solche Operationen werden als Methoden bezeichnet. Bestimmte Access-Objekte haben definierte Namen und können über diese Namen angesprochen werden. Man spricht: „... können referenziert werden“. Wichtige Objekte zeigt die folgende Übersicht: Objektname Bedeutung Application Die MS_Access - Anwendung Controls Auflistung aller Steuerelemente eines Formulars oder Berichts Debug Direktfenster DoCmd Interpreter für Aktionen (Makrointerpreter) Forms Auflistung geöffneter Formulare Reports Auflistung geöffneter Berichte Module Formular- oder Berichtsmodul Das Objekt Application wird von Access beim Öffnen einer Datenbank erzeugt. Zwischen den Objekten ist eine Hierarchiebeziehung „enthält“ definiert: Application enthält Formulare (Forms), Berichte (Reports), das Direktfenster (Debug), den Makrointerpreter (DoCmd) usw. Forms repräsentiert eine Auflistung (Collection) enthaltener Elemente, also alle definierten Formulare. Jedes Formular enthält das Objekt Controls. Das Objekt Controls repräsentiert eine Auflistung (Collection) enthaltener Steuerelemente. Reports repräsentiert eine Auflistung (Collection) enthaltener Elemente, also alle definierten Berichte. Jeder Bericht enthält das Objekt Controls. Das Objekt Controls repräsentiert eine Auflistung (Collection) enthaltener Steuerelemente. Weitere Objektnamen vergibt Access automatisch beim Erzeugen von Steuerelementen in Formularen und Berichten. Falls eine hierarchische Folge von Objekten vorliegt, werden die einzelnen Objekte nacheinander und durch Punkt (.) getrennt notiert. Mit Ausrufezeichen (!) schließt man den Namen eines Objekts (Formulars oder Berichts) an ein Auflistungs-Objekt an, wenn man ein bestimmtes Objekt der Auflistung referenzieren möchte. <objektreferenz> steht nachfolgend • für den Namen eines Objekts oder • für einen Ausdruck, der das Objekt in der Objekthierarchie eindeutig bestimmt, d.h. für eine Auflistung von Objektnamen, die jeweils durch . oder ! getrennt sind. Beispiel: Application.Forms!FormTestArtikel.Caption Name des Formulars Auflistung aller Formulare Bei Auflistungen ! Statt . Eigenschaftsname: Beschriftung des Formulars Syntax zum Zugriff auf Objekteigenschaften: . <objektreferenz> <merkmalsname> Diese Notation ist wie ein Variablenname zu verwenden: • • auf der rechten Seite einer Wertzuweisung repräsentiert sie einen Zugriff auf den Merkmalswert. auf der linken Seite einer Wertzuweisung bedeutet sie, dass der bisherige Merkmalswert durch das Ergebnis der Auswertung des rechts stehenden Ausdrucks ersetzt wird. Me ist ein spezielles Schlüsselwort in VBA. Es bezeichnet das jeweils aktuelle Objekt. Innerhalb der Prozeduren eines Formularmoduls kann mittels des Schlüsselwortes Me auf das zum Modul gehörige (und gerade geöffnete) Formular Bezug genommen werden. Beispiel: Um einem Textfeld Text1, das sich auf einem geöffneten Formular FormT1 befindet, die Zeichenkette "Dresden" zuzuweisen, können die folgenden Notationen gleichwertig benutzt werden: Application.Forms!FormT1.Text1 = "Dresden″ Me.Text1 = "Dresden″ Objektvariablen sind eine spezielle Art von Variablen, die Referenzen auf Objekte aufnehmen können. Objektvariablen sind vom Nutzer wie andere Variablen auch zu deklarieren. Syntax: Dim <objektvariablenname> As <objektdatentyp> 4.4 Laufzeitfehler Laufzeitfehler machen sich zur „Lauf-Zeit“ – also während der Ausführung – eines Programms bemerkbar, sie führen zum ungewollten Abbruch der Abarbeitung. Laufzeitfehler werden von Fehlern unterschieden, die zur „Compile-Zeit“ – also während der Übersetzung – eines Programms feststellbar sind. Zur Compile-Zeit feststellbar: → Syntax-Fehler → Fehler bzgl. der statische Semantik Beispiel: Funktionsprozedur ggt zur Berechnung des größten gemeinsamen Teilers zweier Zahlen p und q. Falls der kleinere der beiden Parameterwerte gleich 0 ist, gibt es einen Abbruch aufgrund einer versuchten Division durch 0 an der Stelle: … r = p Mod q … ► Ein Programm kann so gestaltet werden, dass im Falle des Auftretens von Laufzeitfehlern und in Abhängigkeit des Typs dieser Fehler vom Nutzer zur Behandlung vorgesehene Programmteile ausgeführt werden. In diesen Programmteilen können möglicherweise sogar Fehlerursachen behoben werden. In diesen Fällen ist es sinnvoll, an der Stelle mit der Abarbeitung fortzusetzen, an der ein Abbruch aufgrund eines Fehlers stattgefunden hat. Ist dies nicht möglich, kann das Programm zumindest kontrolliert beendet werden. Beispiel: Funktionsprozedur ggt. Falls der kleinere der beiden Parameterwerte gleich 0 ist, gibt es keinen Abbruch aufgrund einer Division durch 0. Als größter gemeinsamer Teiler wird in diesem Fall 0 geliefert. Public Function ggt(p As Long, q As Long) Dim h As Long, r As Long On Error GoTo ggt_err If q > p Then h = p p = q q = h End If r = p Mod q Do While r <> 0 p = q q = r r = p Mod q Loop ggt = q Exit Function ggt_Exit: ggt = 0 Exit Function ggt_err: MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!" Resume ggt_Exit End Function ► Einschalten der Fehlerüberwachung On Error GoTo ► <sprungmarke> Aktuelle Prozedur verlassen und Fehlerüberwachung abschalten Exit Sub ► Fortsetzung des Programms mit der Ausführung der Anweisung, in der die Unterbrechung aufgetreten war (Vorsicht Endlosschleife!) Resume ► Fortsetzung mit der auf die fehlerhafte Anweisung folgenden Anweisung Resume Next ► Fortsetzung an der mit <sprungmarke> gekennzeichneten Anweisung Resume <sprungmarke> Datenzugriff mit VBA 1. Domänenfunktionen für Tabellen 2. Datenzugriffsobjekte (Data Access Objects – DAO) 3. Seit Access 2000: ActiveX-Datenobjekte (ActiveX Data Objects – ADO) Die ADO-Architektur ► Mit Hilfe von ADO-Objekten können Client-Anwendungen komfortabel auf Daten eines Datenbankservers zugreifen. ► Die ADO-Architektur wird hier speziell für den Umgang mit Datenobjekten verwendet, also z.B. nicht für Strukturänderungen an der Datenbank. ► ADO besteht aus mehreren Teilen, von denen hier nur die Bibliothek ADODB betrachtet wird, die für Datenzugriffe benötigt wird. Hierarchie des Objektmodells: Connection Errors Command Recordset Parameters Fields Mit dem Objekt Connection wird eine Datenverbindung zu einer Datenquelle hergestellt. Das Objekt repräsentiert die geöffnete Verbindung. Über die Merkmale (Eigenschaften) des Connection-Objekts werden Provider, Cursortyp, die Standarddatenbank und das Zeitlimit für eine Verbindung festgelegt Das Command-Objekt kapselt Informationen zu einem Befehl (z.B. SQL-Anweisung). Das Objekt Recordset ermöglicht einen Zugriff auf die einzelnen Datensätze einer geöffneten Datenquelle. Mit der folgenden Deklaration wird eine Variable vom Typ Recordset im Programm angelegt: Dim rs As ADODB.Recordset Erzeugen eines Recordset-Objektes und Initialisieren der Variablen mit dem erzeugten Objekt: Set rs = new ADODB.Recordset Öffnen einer Datenquelle: rs.Open <datenherkunft>, <verbindung>, <cursortyp>,<sperrtyp> <datenherkunft> ein Objektname (Tabellenname) oder eine SQL-Anweisung als String . Beispiel: "Artikel" <verbindung> Beispiel: <cursortyp> Name des aktuellen Connection-Objekts, über das zuvor eine Verbindung zur Datenquelle aufgebaut worden ist. CurrentProject.Connection liefert die gerade geöffnete Verbindung zur aktuellen Datenbank. Art der Öffnung des Recordset (davon ist abhängig, welche Aktionen möglich sind). <sperrtyp> Art der Sperrmethode, die bei einem gemeinsamen Datenzugriff anzuwenden ist. Cursortypen: adOpenForwardOnly Einmaliges Durchlaufen der Datensätze; nur Lesen, nicht Ändern; geringster Ressourcenverbrauch; Defaultwert adOpenStatic Statische Kopie der Daten verwendet; beliebige Navigation möglich; geringer Ressourcenverbrauch adOpenKeyset Ändern, Einfügen und Löschen von Zeilen möglich; Nur die zum Zeitpunkt des Öffnens vorhandenen Datensätze werden berücksichtigt. adOpenDynamic Ändern, Einfügen und Löschen von Zeilen möglich; Auch Datensätze berücksichtigt, die nach dem Öffnen durch andere Benutzer eingefügt wurden; Hoher Ressourcenverbrauch Sperrtypen: adLockReadOnly Es wird ein Recordset erzeugt, in dem nur gelesen werden kann adLockPessimistic Pessimistische Sperrmethode: Datensatz wird gesperrt, sobald mit dem Schreiben begonnen wird. Es bleibt solange gesperrt, bis die Änderung abgeschlossen ist. adLockOptimistic Optimistische Sperrmethode: Datensatz wird erst gesperrt, wenn Update erfolgt. Paralleles Editieren ist möglich. Wer zuerst speichert, dessen Änderung wird in die Tabelle übernommen. adLockBatchOptimistic Änderungen werden in einem Cache gespeichert und später ausgeführt. Navigieren innerhalb eines Recordset MoveFirst Datensatzzeiger auf den ersten Datensatz stellen MoveLast Datensatzzeiger auf den letzten Datensatz stellen MoveNext ~ nächsten ~ MovePrevious ~ vorherigen ~ Move <anzahl> ~ um <anzahl> weiter (bei negativer Zahl zurück) True wenn Recordset keinen Datensatz enthält oder nach Anwendung von MovePrevious, wenn DS-Zeiger auf erstem Datensatz stand False sonst BOF = ~ EOF = True wenn Recordset keinen Datensatz enthält oder nach Anwendung von MoveNext, wenn DS-Zeiger auf letzten Datensatz stand False sonst Prüfen, ob in einem Recordset Datensätze vorhanden sind: If rs.EOF And rs. BOF Then Aktion, wenn keine Datensätze vorhanden Else Aktion, wenn keine Datensätze vorhanden End If Merke: Der Zugriff auf ein Datenfeld führt zu einem Laufzeitfehler, wenn der DS-Zeiger auf BOF oder EOF steht. Suchen eines Datensatzes im Recordset Um festzustellen, ob eine Suche (mit find) erfolgreich war, wird die Eigenschaft EOF (End of File) überprüft: If rs.EOF Then Suche war erfolglos Else Suche war erfolgreich End If Public Sub ArtikelLöschen() Dim rs As ADODB.Recordset Dim nr As String Set rs = New ADODB.Recordset rs.Open "Artikel3", CurrentProject.Connection, adOpenDynamic, _ adLockOptimistic nr = InputBox("Artikelnummer:", "Artikel löschen") Do While Not nr = "*" rs.Find "ARTNR =" & nr If rs.EOF Then Debug.Print "zu löschender Datensatz wurde nicht gefunden!" Else If MsgBox("Datensatz" & nr & "wirklich löschen?", vbYesNo, _ "Datensatz löschen") = vbYes Then rs.Delete Debug.Print "Datensatz wurde gelöscht" Else Debug.Print "Datensatz wurde nicht gelöscht" End If End If nr = InputBox("Artikelnummer:", "Artikel löschen") Loop rs.Close Debug.Print "Programm beendet" End Sub Recordset mit SQL-Anweisung öffnen Beispiel: Dim Dim Set sql tabelle As ADODB.Recordset sql As String tabelle = new ADODB.Recordset = "Select ARTNR,ARTBEZEICH,BESTAND From Artikel Where BESTAND > 100" tabelle.Open sql,CurrentProject.Connection,adOpenStatic,adLockReadOnly Tabelle ARTIKEL Recordset SQL-String eingeschränkte Tabelle Beispiel: Auswahl eines Datensatzes nach Eingabe einer Artikelnummer über ein Formular Dim tabelle As Recordset Dim sql As String Dim nr As String Set tabelle = new Recordset nr = Forms!Formularx.text1 sql = "Select ARTNR,ARTBEZEICH,BESTAND From Artikel Where ARTNR='" & nr & "'" tabelle.Open sql,CurrentProject.Connection,adOpenStatic,adLockReadOnly Mit der Funktion VarType( <variablenname> ) kann der Variablentyp einer Variablen ermittelt werden. Rückgabewert: Zahl 0 1 2 3 vb-Konstante vbEmpty vbNull vbInteger vbLong . . . Datentyp Empty Null Integer LongInteger Unterschied: x = Null Zuweisung des Null-Wertes oder keine Wertzuweisung → vbNull → vbEmpty Empty ist ein Subtyp von Variant, der bei einer Deklaration (also vor einer Wertzuweisung) zugewiesen wird. Anwendung: → Deklaration Ermitteln, ob ein Recordset initialisiert ist: Private rs vor den Ereignisprozeduren eines Formularmoduls - Typ Variant - Gültig in allen Prozeduren des Moduls → If VarType(rs) = vbEmpty Then nicht initialisiert Else bereits initialisiert End If Aktivieren einer Ereignisprozedur bei Auswahl aus Listenfeld Bericht öffnen mit Bestellungen 5. 4.1 Datenmodellierung Dienste verwalten 5.1 Das Entity-Relationship-Modell → bereits behandelt 5.2 Schlüsselarten / Anforderungen an den Schlüsselaufbau Ein Schlüssel (key) ist ein Merkmal oder eine Kombination von Merkmalen, womit Datensätze (Entitäten) in einer Menge von Datensätzen ausgezeichnet werden können. Schlüsselarten: • Suchschlüssel (search key) Schlüssel, dessen Wert mit den entsprechenden Merkmalswerten genau der Entitäten übereinstimmt, die bei einer Abfrage gesucht werden. Mit einem Suchschlüsselwert können ggf. auch mehrere Entitäten einer Entitätsmenge angesprochen werden. • Sortierschlüssel (sort key) Bestimmt bei einer gegebenen Ordnung der Schlüsselwerte die physische Reihenfolge der Datensätze in der Datei. • Primärschlüssel (primary key) Positioniert die Datensätze in einer Speicherorganisation bei mehreren möglichen Sortierschlüsseln. Indizieren 1. Indexverwaltung 2. Primärschlüsseleigenschaften 3. Indizes erstellen (einfach – zusammengesetzt) Identifikationsschlüssel Def.: Ein Identifikationsschlüssel ist ein Attribut oder eine minimale Attributkombination, anhand dessen bzw. deren jedes Tupel der Relation eindeutig identifiziert werden kann und dessen bzw. deren Wert zeitinvariant ist, d.h. sich während der Existenz des Tupels nicht ändert. Der Ausdruck „minimale Attributkombination“ bedeutet, dass ohne Verlust der eindeutigen Identifizierbarkeit kein Attribut der Attributkombination weggelassen werden darf. Sind mehrere minimale Attributkombinationen vorhanden, spricht man von Schlüsselkandidaten (candidate key). In diesem Fall wird ein Schlüssel als Primärschlüssel ausgezeichnet. Die anderen Kandidaten heißen Sekundärschlüssel. Forderungen an künstliche Identifikationsschlüssel sind: • • • • Eindeutigkeit (Unveränderlichkeit) laufende Zuteilbarkeit (neu auftretende Entität erhält Schlüssel sofort) Kürze und Schreibbarkeit „sprechende“ Schlüssel (aus den Schlüsselwerten sollen bestimmte Eigenschaften der beschriebenen Entität erkennbar werden) Verbundschlüssel umfassen einen → Identifikationsteil und einen → Klassifikationsteil. Parallelschlüssel sind Verbundschlüssel, bei denen es keine Beziehung zwischen klassifizierendem und identifizierendem Teil gibt. Bsp.: Zugbezeichnung IC 100. IC bezeichnet einen Zug der Klasse IC. 100 ist eine willkürliche Bezeichnung, die keine Aussage über die Art des Zuges liefert. 5.3 Entwurf von Relationen Strukturregel SR1: Bei der Darstellung von Entitätsmengen durch Relationen muss für jede Relation ein Identifikationsschlüssel festgelegt werden. Notation: R(A,B,... ) mit R : Name der Relation (Tabelle) A,B, … : Namen von Attributen (Spalten) Die zum Identifikationsschlüssel gehörigen Attribute werden unterstrichen. Warum kommt es auf einen guten Entwurf von Relationen an ? → es kann Anomalien oder Redundanz geben Anomalien 1. „Insertion“- Anomalie 2. „Deletion“- Anomalie 3. „Update“- Anomalie Attributabhängigkeiten 1. funktionale Abhängigkeit 2. volle funktionale Abhängigkeit 3. Transitive Abhängigkeit 4. Mehrwertige Abhängigkeit funktionale Abhängigkeit Def.: In R(A,B) ist das Attribut B vom Attribut A funktional abhängig, wenn zu jedem Wert von A genau ein Wert von B gehört. volle funktionale Abhängigkeit Def.: In R(S1,S2,A) ist das Attribut A von (den Schlüsseln) S1, S2 voll funktional abhängig, wenn A von dem zusammengesetzten Attribut (S1,S2) funktional abhängig ist, nicht aber von einem einzelnen Attribut S1 oder S2. Def.: (neu) Ein Identifikationsschlüssel (IS) ist ein Attribut oder eine Attributkombination, so dass gilt: Jedes Attribut einer Relation ist vom IS funktional abhängig, und kein Attribut aus dem IS ist von den übrigen Attributen des IS funktional abhängig. volle funktionale Abhängigkeit Def.: In R(S,A,B) ist das Attribut B vom Schlüssel S (der auch ein zusammengesetzter Schlüssel sein kann) transitiv abhängig, wenn A von S funktional abhängig ist, S jedoch nicht von A, und wenn B von A funktional abhängig ist. mehrwertige Abhängigkeit Def.: In R(A, B, C) ist das Attribut C mehrwertig abhängig von A, wenn zu einem A-Wert für jede Kombination dieses A-Wertes mit einem B-Wert eine identische Menge von C-Werten existieren kann. Normalformen 1 NF 2NF 3NF BCNF (Boyce/Codd) 4NF 5NF Beispiel: Die nachfolgende Relation PERSONEN mit PERS# als Identifikationsschlüssel ist nicht in der 1NF, da sie für PROJ#, PROJNAME und %ARBZEIT Mehrfacheinträge aufweist. PERSONEN PERS# PERSNAME ABT# ABTNAME PROJ# PROJNAME %ARBZEIT 101 Meyer 1 Planung 11,12 A,B 60,40 102 Krause 2 Projektierung 13 C 100 Lösung: Die Inhalte der Tupel mit Mehrfacheinträgen müssen auf mehrere Tupel aufgeteilt werden, so dass für unterschiedliche Projektnummern, Projektnamen und prozentuale Anteile der Arbeitszeit unterschiedliche Tupel entstehen. Der Informationsgehalt der Relation bleibt dadurch ungeändert, aber es entstehen Redundanzen. PERS# allein genügt als Identifikationsschlüssel nicht mehr. Es wird eine Kombination (PERS#, PROJ#) als Identifikationsschlüssel verwendet. Beispiel: Die modifizierte Relation PERSONEN (jetzt PERS-PROJ-TAETIGK) mit dem Identifikationsschlüssel (PERS#,PROJ#) befindet sich in der 1NF, aber nicht in der 2NF. PERS-PROJ-TAETIGK PERS# PERSNAME ABT# ABTNAME PROJ# PROJNAME %ARBZEIT 101 Meyer 1 Planung 11 A 60 101 Meyer 1 Planung 12 B 40 102 Krause 2 Projekti erung 13 C 100 → PROJNAME ist von PROJ# allein funktional abhängig. → Auch ABT# ist von PERS# allein funktional abhängig (Annahme: 1 Person kann nicht gleichzeitig zu mehreren Abteilungen gehören). Lösung: Aufspalten der Relation PERS-PROJ-TAETIGK in 3 Relationen PERSONEN, PROJEKTE, PERS-PROJ-TAETIGK PERSONEN PERS# PERSNAME ABT# ABTNAME 101 Meyer 1 Planung 102 Krause 2 Projektierung PROJEKTE PROJ# PROJNAME 11 A 12 B 13 C PERS-PROJ-TAETIGK PERS# PROJ# %ARBZEIT 101 11 60 101 12 40 102 13 100 → Auch jetzt steckt in der Relation PERSONEN noch Redundanz: Für jede Person ist der Abteilungsname gespeichert, obwohl dieser mit der Abteilungsnummer funktional gekoppelt ist. → Die Relation PERSONEN(PERS#,PERSNAME,ABT#,ABTNAME) befindet sich nicht in der 3NF, weil ABTNAME über ABT# transitiv von PERS# abhängt. Lösung: Aufspalten der Relation PERSONEN in zwei Relationen: PERSONEN(PERS#,PERSNAME,ABT#) ABTEILUNGEN(ABT#,ABTNAME) Relationen in der 3NF heißen „normalisiert“. Beziehungen zwischen Relationen: Globale Normalisierung Die globale Normalisierung verbindet die existierenden Beziehungen zwischen Entitätsmengen (ER-Diagramme) mit der Normalisierung des Relationenmodells. Def.: Ein Attribut heißt global, wenn es mindestens in einer Relation im Identifikationsschlüssel vorkommt. Def.: Ein Attribut heißt lokal, wenn es nur in einer einzigen Relation und dort nicht im Identifikationsschlüssel vorkommt. → Es kann nach diesen Definitionen Attribute geben, die weder global noch lokal sind. ( Sie kommen in mehreren Relationen nicht im Identifikationsschlüssel vor) Solche Attribute treten bei „sich überlappenden“ Entitätsmengen auf. Beispiel: Angestellte und Studierende sind Hochschulangehörige. Doktoranden sind sowohl Angestellte als auch Studierende. Angenommen, die Attribute NAME und ADRESSE werden sowohl in einer Relation ANGESTELLTE als auch in einer Relation STUDIERENDE verwaltet: ANGESTELLTE(A#,NAME,ADRESSE,LOHNGRUPPE) STUDIERENDE(S#,NAME,ADRESSE,STUDIENGANG) In diesem Fall sind die Attribute NAME und ADRESSE weder lokal noch global. ► Attribute, die weder global noch lokal sind, sind Quelle von Redundanz und deshalb zu eliminieren. → Sie sind einer neuen, übergeordneten Relation zuzuordnen (Generalisierung). Beispiel: HOCHSCHULANGEHOERIGE(PERS#,NAME,ADRESSE) ANGESTELLTE(PERS#,A#,LOHNGRUPPE) STUDIERENDE(PERS#,S#,STUDIENGANG) Die gewonnenen Erkenntnisse können nun in einer zweiten Strukturregel zusammengefasst werden: Strukturregel SR2: Die Datenbasis muss aus Relationen in der 3NF bestehen, die nur globale und lokale Attribute enthalten. → Verbindungen zwischen Relationen werden nunmehr ausschließlich über Globalattribute hergestellt. Trotz der Einhaltung der Normalformen und der Vermeidung von Attributen, die weder global noch lokal sind, können zunehmend bei großen Datenmengen Konsistenzverletzungen auftreten. Mit dem Begriff des Fremdschlüssels wird die Möglichkeit geschaffen, auszudrücken, dass Wertebereiche für Attribute einer Relation von den aktuell in einer anderen Relation vorhandenen Datensätzen bestimmt werden. Def.: Ein Fremdschlüssel (foreign key) in einer Relation R2 ist ein Attribut (oder eine Attributkombination), welches (welche) dem Identifikationsschlüssel in einer anderen Relation R1 entspricht, und dessen zugehöriger Wertebereich die Menge genau jener Werte umfasst, welche die aktuell in R1 enthaltenen Tupel identifizieren. R1 heißt Basisrelation des Fremdschlüssels. Beispiel: Sei R1 PERSONEN(PERS#,PERSNAME,ABT#) und R2 PERS-PROJ-TAETIGK(PERS#,PROJ#,%ARBZEIT) → PERS# ist Fremdschlüssel in PERS-PROJ-TAETIGK und Identifikationsschlüssel in PERSONEN. PERSONEN ist Basisrelation. PERS-PROJ-TAETIGK PERS# PERSONEN PROJ# %ARBZEIT Fremdschlüssel 101 11 60 PERS# PERSNAME ABT# 101 Meyer 1 101 12 40 102 Krause 2 102 13 100 103 Müller 2 103 11 20 104 Schulze 1 103 12 50 103 13 30 Basisrelation Def.: Die referentielle Integrität ist eine Konsistenzbedingung, welche verlangt, dass Fremdschlüssel in R2 nur Tupel in R1 referenzieren, die z. Z. tatsächlich existieren. Def.: Ein statischer Wertebereich ist eine Menge von Werten, welche bei der Definition der Datenbasis festgelegt wird, und die sich im Verlaufe der Zeit nicht ändert. Def.: Ein dynamischer Wertebereich ist eine Menge von Identifikationsschlüsselwerten oder -wertkombinationen einer Basisrelation, die für Fremdschlüssel zur Verfügung stehen. Strukturregel SR3: Lokale Attribute müssen statische Wertebereiche verwenden. Jedes Global-Attribut darf nur in einer einzigen Relation auf einem statischen Wertebereich basieren und muss in dieser Relation Identifikationsschlüssel sein. In allen anderen Relationen muss es auf einem dynamischen Wertebereich basieren, d.h. als Fremdschlüssel aus einer anderen Relation eingebracht werden. Normalisierungen anhand von ER-Diagrammen Beziehungstypen bei Relationen: 1 c m mc 1 1-1 c-1 m-1 mc - 1 Hierarchische Beziehung c 1-c c-c m-c mc - c Konditionelle Beziehung m 1-m c-m m-m mc - m Netzwerkartige Beziehung mc 1 - mc c - mc m - mc mc - mc Def.: → Eine hierarchische Beziehung (H-Beziehung) besteht zwischen den Relationen R1 und R2 genau dann, wenn ein Attribut (oder eine Attributkombination) in R2 als Fremdschlüssel auf R1 basiert. Hierarchische Beziehungen lassen sich direkt mit Fremdschlüsseln und dynamischen Wertebereichen darstellen. → Zur Modellierung konditionelle Beziehungen sind zusätzliche Relationen erforderlich. MÄNNER c c MÄNNER FRAUEN FRAUEN 1 1 c EHE c → Zur Modellierung netzwerkartiger Beziehungen sind zusätzliche Relationen erforderlich. PERSONEN mc m PERSONEN PROJEKTE PROJEKTE 1 1 m mc PERS_PROJ_TÄTIGK Strukturregel SR4: Rekursive Beziehungen zwischen Entitätstypen sind untersagt (direkte und indirekte). mc PERSONEN ↑ Vorgesetzter ↓ Unterstellter ↑ leitet direkte Rekursion c c ABTEILUNGEN 1 m ↑ PERSONEN 1 gehört zu indirekte Rekursion Auflösung: Einführung einer „Beziehungsrelation“ PERSONEN 1 1 mc mc vorgesetzt HIERARCHIE unterstellt 6. Datenbankorganisation 6.1 Klassifizierung und Architektur von Datenbanksystemen 6.2 Konsistenz und Transaktionen 6.1 Klassifizierung und Architektur von Datenbanksystemen 1. hierarchische DBS (HDBS) z.B.: IMS (Fa. IBM, 1968) 2. Netzwerk-DBS z.B.: IDMS 3. Relationale DBS (RDBS) z.B.: INGRES, ORACLE, MS ACCESS, dBASE, SYBASE, MySQL 4. Objektorientierte DBS (OODBS) z.B.: O2, ORION/ITASCA, POET, UniSQL Das DBMS - stellt Abfrage und Modifikationsoperationen bereit - gewährleistet die Datenintegrität - verwaltet Datenbeschreibungen (Schemaverwaltung) Funktionsschichten des DBMS: Relationenverwalter Tupelverwalter Speicherverwalter Betriebssystem 6.2 Konsistenz und Transaktionen Konsistenz = Richtigkeit und Widerspruchsfreiheit in einer Ansammlung von Daten. → Daten sind konsistent, wenn sie vordefinierte Konsistenzbedingungen einer Datenbank erfüllen. → Man unterscheidet Konsistenzbedingungen, die Beispiel: • dauernd erfüllt sein müssen (Zustandsbedingungen), • temporär Inkonsistenzen erlauben (Übergangsbedingungen). Transaktion: Überweisung 500.- € Eigenschaften von Transaktionen: • • • • atomar isoliert consistent dauerhaft (persistent) 7. Datenschutz und Informationssicherheit 7.1 Datensicherheit und Datenschutz 7.2 Sicherheit in Netzwerken 7.1 Datensicherheit und Datenschutz Datensicherheit (data security) umfasst alle organisatorischen und technischen Maßnahmen für die Sicherstellung der notwendigen Verfügbarkeit und Abschirmung der Daten. → Verfügbarkeit bedeutet, auf bestimmte Daten zugreifen zu können. → Abschirmung bedeutet, den Zugriff auf Daten für Unbefugte verhindern zu können. Datenschutz ist der Schutz der durch Daten dargestellten Sachverhalte des realen Lebens vor jeder Art von Missbrauch, insbesondere bei Daten über Personen. Zum Datenschutz gehört die Abschirmung gegen Unberechtigte, aber auch deren Verfügbarkeit für Berechtigte. Beispiel: Aus Datenschutzgründen Bibliotheksnummern für Login-Kennzeichen Zielkonflikte ► Datenverfügbarkeit verlangt Duplikate, Datenabschirmung will Duplikate vermeiden ► Mehrbenutzersysteme erschweren die Datensicherheit (Synchronisation, inkrementelle Duplizierung) ► Datenkonsistenz kann sehr leistungsbehindernd sein ► Datenschutzmaßnahmen können neue Datenschutzprobleme schaffen 7.2 Sicherheit in Netzwerken Anforderungen: Vertraulichkeit - Vertraulichkeit von Nachrichteninhalten - Anonymität von Sender und/oder Empfänger - Unbeobachtbarkeit - keine Preisgabe des Ortes mobiler Kommunikationsstationen Integrität - Erkennbarkeit von Fälschungen des Nachrichteninhaltes Verfügbarkeit - Kommunikation zwischen allen Partnern, die dies wünschen Verbindlichkeit/Zurechenbarkeit - Nachweisbarkeit, dass Instanz x Nachricht y (mit korrektem Inhalt) gesendet hat - Beweismittel für Betreiber über Diensteinanspruchnahmen Geheime Kommunikation Kryptographie Transposition Steganographie Substitution Kryptologie = Kryptographie + Kryptoanalyse Maria Stuart enthauptet am 8.2.1587 wegen Hochverrats Crypto system M : plaintext space C : ciphertext space K : key space M M : plaintext message C C : ciphertext message K K : key E = Encrypt D = Decrypt E(M )=C E:M× KC D(C )=M D:C× KM DK (EK (M) ) = M | M M Schlüsselaustausch nach Diffie/Hellman (1976) Die Kommunikationspartner A und B können jeder einen gemeinsamen Schlüssel K erzeugen, ohne geheime Informationen austauschen zu müssen. Beispiel: A B A und B vereinbaren zwei Zahlen g = 4 und p = 11 A wählt seinen privaten Schlüssel XA = 3 B wählt seinen privaten Schlüssel XB=4 A berechnet seinen öffentlichen Schlüssel B berechnet seinen öffentlichen Schlüssel YA = g XA mod p YB = 4 3 mod 11 = 64 mod 11 = 9 = g XB mod p = 4 4 mod 11 = 256 mod 11 =3 A sendet YA an B B sendet YB an A A berechnet den Sitzungsschlüssel K: B berechnet den Sitzungsschlüssel K: K = YBXA = 33 mod 11 = 27 mod 11 = 5 K = YAXB = 94 mod 11 = 6561 mod 11 = 5 Whitfield Diffie, * 1944 Martin Hellman, * 1946 Random number symmetric encryption k = secure key Key generator k ciphertext plaintext x encrypt C(x) plaintext decrypt x B A asymmetric encryption s = private key Key generator t = public key ciphertext plaintext x decrypt A C(x) plaintext encrypt B x 8. Kommunikationssysteme 8.1 Technisch- technologische Grundlagen 8.2 Kommunikationsdienste 8.1 Technisch-technologische Grundlagen ► Prozess: ein sich gerade auf einem Rechner in Abarbeitung befindliches Programm (z.B. Explorer, MS Access, PuTTY, … ) mit GUI oder über Kommandozeile bedienbar/startbar ► Computer arbeiten in einem Netzwerk zusammen. Auf jedem Rechner laufen Prozesse (P1, …) ab. Rechner 1 P1 Rechner 2 P2 P3 Betriebssystem-“Kern“ Verteiltes System → Netzwerkbetriebssystem: Jeder Benutzer ist sich der Existenz mehererer Rechner im Netz bewusst ► Prozesse können miteinander kommunizieren über • Temporäre Dateien • Pipes • Signale • Shared Memory • Semaphore • Messages • Sockets (IP-Adresse + Portnummer) ► Client – Server – Prinzip Prozesse realisieren Dienste: Dienstenutzer (Clients) - Diensteanbieter (Server) Rechner 1 P1 Rechner 2 P2 P3 Socket Socket ► Alle angeschlossenenen Rechner können sich gegenseitig Dienste anbieten ► Client und Server können sich auf demselben Rechner befinden IP-Adressen: (IPv4) 4 Zahlen zwischen 0 und 255, jeweils durch Punkt getrennt, weltweit eindeutig vergeben. Beispiel: 192.168.24.105 192.168.24 Netzadresse Rechneradresse Subnetzmaske 105 255.255.255.0 Klasse W-Werte Netzwerk-ID Host-Id max Netzwerke max Hosts A 1-126 w x.y.z 126 16.777.214 B 128-191 w.x y.z 16384 65.534 C 192-223 w.x.y z 2.097.151 254 127 für Loop-back-Tests (127.0.0.1) Komm. Zwischen Prozessen auf lokalem Rechner Adressübersetzung ► Um Datenpakete aus Netzwerken weiterleiten zu können, werden Router eingesetzt. ► Routing ist das Weiterleiten von Datenpaketen aus einem Netzwerk in ein anderes. LAN 192.168.0.0 myPC 192.168.0.104 Internet Router Home-win 192.168.0.101 karlsPC 192.168.0.102 ISDN 195.234.113.11 NAT (Network Address Translation) : Das gesamte LAN ist nur als 195.234.113.11 ansprechbar. 8.2 Kommunikationsdienste Beispiel: An der Eingabeaufforderung feststellen, ob ein Computer erreichbar ist ping 141.56.20.1 ping iaix1.informatik.htw-dresden.de Beispiel: Finger-Dienst - Informationen über Nutzer im System finger s52663 finger Arnoldt Informationen können vom Nutzer in einer Datei bereitgestellt werden. → Textdatei .plan im Homeverzeichnis