Prof. Dr. rer.nat.habil. Bernhard Thalheim Information Systems Engineering Department of Computer Science Christian-Albrechts-University Kiel Olshausenstr. 40 D - 24098 Kiel Vorlesung Datenbanken I 1. Einführung SS 2008 1 Grundlagen und Ziele Für die Erörterung im schriftlichen Teil der Vorlesung: Systematik Hier: Informationssysteme aus der Sicht des Informatikers Informatik: Wissenschaft (oder Kunst) der formalen Sprachen zur Beschreibung von abstrakten Dingen und Handlungsabläufen • erfinden Syntax Form der formalen Sprache, Standardisierung, Rückgriff auf existierende Verständigungsmittel, verschiedene Detailisierung (bis hin zu abstrakten Maschinen) • verwirklichen (d.h. beherrschbar) implementieren erst nach Festlegung der Semantik, verschiedene Semantiken (operationale, ...) • nutzen Beschreibung der Aufgaben mit den Mitteln der Sprache, Methodologie schwierigste Teile: von informal zu formal Semantik Pragmatik Wolkenbild mit Maschine Semiotisches Dreieck: Syntax, Semantik, Pragmatik formale Sprache erfinden verwirklichen benutzen Paradigmen \ Theorie Abstraktion Entwurf Unsere Vorlesungsanwendung : Universitätsdatenbank (Verwaltung von Studenten, Mitarbeitern, Ressourcen (Gebäude, HW, SW, Bücher, ...), Fonds, Stundenplanung, ... ) mit unterschiedlichen Sichten 1.1 Information, Kommunikation Zeitalter 1. Zeitalter der manuellen Produktion Jäger, Sammler, Landwirte, Handwerker 2. Industriezeitalter CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 2 3. Informationszeitalter Der Mensch ändert sich nicht so sehr wie die Technik suggeriert. Psychologische Barrieren • Verarbeitungskapazität des Menschen • Formulierungsfähigkeit des Menschen • Gewohnheiten des Menschen US-Diskussion der ‘Y’-Gesellschaft und der Trennung Wir sind bereits in Informationen ertränkt. • Anstelle von mehr Information brauchen wir Information • zur rechten Zeit, • der richtigen Sorte, • in der richtigen Dosis, • in der richtigen Form, • im vollen Umfang, • zu akzeptablen Kosten für alle Benutzer (bzw. Anwendungen) unserer Informationssystemes. • Der Mensch ist das einzige Ziel der Information. • Gespeicherte Information muß verarbeitet werden, ehe sie Nutzen bringt. Information Daten + empfangen + ausgewählt durch Interesse + integriert 1.1.1 Einleitung Verschiedene Arten von Informationssystemen (Sammlung von Daten): Computerized Information System CIS Management-Informationssysteme POI-Systeme, meist Spreadsheet-unterstützt, graphische Oberfläche, einfache Bedienung, Vernetzung mit Partnern mit unterschiedlichen Aufgaben im System, hierarchisch Entscheidungsunterstützungssysteme meist stand-alone-Lösungen, Expertensystem-shell-basiert, verschiedene Unterstützung für Äbwägen, Diskussion, Rücknahme (Hyper)textsysteme Volltextsysteme mit umfangreichen Verweismöglichkeiten und evt. logischen Ableitungen (zwischen den Zeilen) (Supertextsysteme) Information-Retrieval-Systeme meist über Deskriptoren organisiert, einfache Funktionen, einfache Datenstrukturen, effiziente Suche, schwierig zu erweitern, unscharfe Suche, unscharfe Daten Dokumentationssysteme hierarchisch, Deskriptoren, komplexe Struktur, eingeschränkte, schnelle Suche CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 3 Büroinformationssysteme kleine Anwendungssysteme, kooperative Lösung Datenbanksysteme Datenbeschreibungssprache (basierend auf Datenmodell), viele Funktionen, optimierend, verteilte Systeme, Konsistenz, Sicherheit, konkurrierender Zugriff und Fehlerbehandlung (Zurückfahren), Sichten für verschiedene Nutzer Wissensbanken Datenbanken sind übergreifend Entwicklung der DBMS führte zur Integration verschiedener Funktionen anderer Arten von CIS • graphische Oberfläche • deduktive Datenbanken • aktive Datenbanken • parallele Datenbanken • Deskriptoren • Wissensverarbeitung • objektorientierte Entwicklung • Reasoning-Funktionen zum Abwägen und Ableiten • groupware-middleware-Datenbanken • telekommunikative, mobile Datenbanken Trotzdem: Datenbanksysteme haben nicht die gesamte Funktionalität von allen CIS (und werden diese auch nicht anstreben). Volltextsysteme, Entscheidungsunterstützungssysteme, inexakte, inkonsistente Daten, ... Entscheidungsunterstützungssysteme sind spezielle Datenbanken. Vielfältige Anwendungen: Materialwirtschaft, Reservierungssysteme, Bibliotheksverwaltungssysteme, Versicherungswirtschaft, Banken, Meldewesen, Auskunftswesen, Produktionsplanung und -steuerung, Personalverwaltung, Auftragsverwaltung, ... Neuartige Anwendungen: CAx, Büroinformationssystem, Geoinformationssysteme, Prozeßdatenverarbeitung, Versuchsdaten, intelligente Systeme, statische Systeme, Multimediasysteme, ... Musikverarbeitung Riesiger Marktsprung (siehe Übersicht) Kennzeichen einer DB • große Mengen von Daten large amount • dauerhaft persistent • verläßlich dependable • verschiedene Benutzer • Sicherheit der Daten • effizient shared security CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 4 • verwalten • Anfragen storage management queries ad-hoc-Anfragesprachen • Änderungen updates ‘Unternehmen’ kann Informationssystem auf verschiedene Arten benutzen; evt. auch gemischt 1. System ist “Modell” der Welt (Daten als Gegebenheiten) 2. System verwaltet ‘Original’dokumente (Bsp. Programmentwicklungssystem, Referatesystem) 3. System wird als ‘schwarzes Brett’ benutzt (gemeinsame Hinterlegung von Daten; Austausch (Bsp. Patienteninformationssystem)) ⇒ Anforderungen • “Daten” strukturieren (für alle Benutzer verstehbar + verwaltbar) • verschiedenartige Benutzer wirken zusammen, unabhängig - wie ? wie sicher ? • Gestaltung von Oberflächen bei gleichzeitiger einheitlicher Verwaltung • Kommunikation ⇒ Besonderheiten von Informationssystemen • Modellierung formalisierbarer statischer und dynamischer Gesichtpunkte von ‘Unternehmen’ • anschauliche Beschreibungen • formale Beschreibungen semantische Begriffe Modelle • Datenmodelle (logische, relationale, objektorientierte) • Algorithmenmodelle (Transaktionen) • Implementierungen • Structured Query language, QBE, Quel, Datalog, ... • Algorithmen, Datenstrukuren für (relationale) Operationen • unterliegende System (C++, Ontos, ...) • Dauerhaftigkeit und Teilhabe • Transaktionen • Schemaentwurf • Sicherheit • Schichtenarchitektur Außerdem: ‘Unternehmen’ bestehen aus Menschen; DB als technisches Hilfsmittel ⇒ Definition von Information , Kommunikation, Wirklichkeit und Modell erforderlich Hinzu: Informationssystem beeinflußt auch den Geschäftsablauf Historie Generationen verschiedene Einteilungen; evt. analog zu Rechnergenerationen 1. Filesysteme auf Band bzw. später auf Platte 50-er + 60-er Redundanz, Gefahr der Inkonsistenz, Inflexibilität, eingeschränkte Produktivität (aufwendige Programmierung), Datenschutzprobleme, Einhaltung und Durchsetzung von Standards CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 5 2. Prärelationale Systeme 70-er Unterscheidung der physischen und logischen Sicht Katalog, verschiedene Benutzer hierarchisches und Netzwerk-Datenmodell Redundanzvermeidung, zentrale Integritätskontrolle, Strukturierung, DML und DDL relativ implementationsnah, navigierender Zugriff Effizienzprobleme, Konsistenzprobleme, Sicherheitsprobleme, Compatibilität 1961 C. Bachman’s Vorschlag, 1965-70 IMS DB/DS (Netzwerk), Dodd’s APL für PL/1, Sabre (IBM + Am. Airlines), IBM’s hierarch. System 1971 CODASYL DBTG Vorschlag; IDMS, IDS II, DMS verschied. Hersteller 1985 Vorschlag für NDL (Network defintion language) 3. Relationale Systeme Dreiebenenarchitektur, Unabhängigkeit der konzeptionellen Darstellung mächtige Sprachen mengenorientiert, Programm-Daten-Unabhängigkeit, Datenabstraktion, insert, delete, update 1970 E.F. Codd (Childs); 1975 VLDB, 1972 ACM SIGMOD; 1976 P.P. Chen SQUARE, SEQUEL (SQL), QBE, QUEL 1985 Preliminary SQL, 1986 ANSI SQL, SQL 89, SQL 2; 199x SQL 3 (x > 5) Etappen der Entwicklung des relationalen Systeme 80-er • Codd’s Arbeit in den Comm. of the ACM, 1970 • MacAIMS (1970-71) (R. Godstein, J. Strnad) • IS/1, PRTV (71-75) • Große Debatte von Codd/Date und Charlie Bachmann • System R (Mitte 70er) • System Ingres (Mitte 70er) • frühe relationale Produkte (79-83) • Tandem NonStop SQL (87) mit ersten besseren Leistungsparametern Hauptbeträge zur Entwicklung der Technologie • Arbeiten von Hall, Todd, Hitchcock, Immon, Stonebraker, Strnad (parallel zu Codd 1971 im IFIP Congress) zu IS/1- und PRTV-Prototypen • Arbeiten von Chamberlin, Traiger u.a. zum R Prototypen • Arbeiten von Zloof zu QBE • Arbeiten von Stonebraker zum Ingres Prototypen • Arbeiten von Armstrong, Fagin u.a. zur Abhängigkeitstheorie 4. Postrelationale Systeme 90-er aufgrund obiger neuartiger Anwendungen Erweiterung der Funktionalität umfangreichere Typenkonstruktoren, verbesserte Semantik, umfangreichere Operationalität, Verhalten, Mehrnutzerbetrieb, offene Systeme, objektorientierte Systeme, Versionen, räumliche Daten, aktive Anwendungen Vermutung: keine universellen Systeme, eher anwendungsspezifische goodies: benutzerdefinierte Datentypen, Vererbung Falsche Ansichten zu OODB • blobs + gespeicherte Prozeduren = Objekte Typ hat Zustands- und Verhaltenscharakteristika (blobs nur Zustand), Typen sind in Hierarchie (?), klare Trennung von Typ-Spezifikation und -Implementation CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 6 • richtige DBMS unterstützen SQL besser Vielzahl von Sprachkonzepten • Client-Server = Client-Server relationales Client-Server-Modell ist Auswuchs der mainframe-Architektur (Steuerung, auch für Terminals und Benutzeroberflächen durch Server); besser Verteilung nach Rechenleistung etc. auf Server Objektrelationale Modelle XMLbasierte Modelle i } 6 XMLAlgebraWirrwarr 16 Universelle Modelle Objektorientierte Modelle Deduktive Modelle ] 6 Relationale Modelle 6 Navigationsmodelle 6 File Strukturen Datenabstraktionshierarchie HERMAlgebraAusdrücke ] 6 Logikbasierte Ausdrücke Erweiterte EntityRelationshipModelle 6 EntityRelationshipModelle 6 Relationale Algebra 6 Normalisierungstheorie 6 Anfrageberechnungsstrategien 6 Rekursionsmodelle Baumstrukturen 6 6 Implementations- Strukturierte programme Programmierung Algorithmische Hierarchie Modellieringshierarchie Abbildung 1: Generationen 1, 2, 3, 4 von Datenbankverwaltungssystemen Relationale Systeme 1. SQL - Linie SQL ist De-Facto-Standard der relationalen Datenbankwelt • 1970 : Codd’s Arbeit CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 7 • 1974 : Chamberlain’s SEQUEL verschiedene Versionen 1975 (SEQUEL-XRM), 1977 (SEQUEL/2 - R), Standardisierung, 1981 (ORACLE, SQL/DS), 1983 (DB2), DG/SQL (1984), SYBASE (1986), ... • SQL-Standardisierung ISO 9075 (1987) - größerer gemeinsamer Nenner ISO 9075 (1989) - echter Standard, Integritätsregeln, Schlüssel, ... ISO 9075 (1992) - SQL2 SQL89 + Säuberung + voll relational ISO 9075 (1999) - SQL:1999 ISO 9075 (2003) - SQL:2003 • SQL-Schnittstellen anderer Systeme (IDM (1984), INGRES (1985), SESAM (1989), UDS (1989)) VisualSQL als Zusammenführung von SQL, Quel und visuellen Sprachen 2. QUEL - Linie logisch-orientierte Sprache 3. QBE -Linie Query-by-example nicht durchgesetzt ... intelligente Oberflächen 4. Datenbankprogrammiersprachen DBPL, ADABPL, Galileo, Persistente Programmiersprachen Einbettung in PASCAL, Modula-2, QUEST, ... 5. VisualSQL - unsere Eigenentwicklung - steht auch jedem zur Verfügung Verschiedene Benutzer verschiedene Rollen • Administrator (Datenbankadministrator) Ressourcenverwaltung, Zutrittsrechte, internes Schema, tuning und monitoring, Sicherheit und Zuverlässigkeit • Entwerfer (Unternehmensadminstrator) konzeptionelles Schema, externe Schemata, Software-Entwicklung • Systemanalytiker, Anwendungsprogrammierer Anforderungserhebung, Software-Entwicklung • Endbenutzer • Zufälliger Benutzer unterschiedliche Info, komplexe Auswertungen, schnell mal reinschauen, manager, Anfragen nicht vorhersehbar • Naiver (oder parametrischer) Benutzer Anwendungsprogramme, ‘canned transactions’, Sachbearbeiter, ... • Voll ausgebildeter Benutzer komplexe Anforderungen, gute Kenntnis von DBS und Schnittstellen, Techniker, wissenschaftler, Analytiker, ... • DBMS und Tools Designer und Implementierer • Operatoren und Wartungspersonal Nutzen von DBMS CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 8 1. Kontrollierte Redundanz 2. Daten-sharing 3. Eingeschränkter Benutzerzugriff concurrency, user view security, authorization 4. Verschiedene Interfaces 5. Darstellung komplizierter Beziehungen der Daten 6. Integritätserzwingung 7. Robustheit, Wiederanlauf Vorteile von DB 1. Standarderzwingung 2. Flexibilität 3. Verringerte Anwendungsentwicklung 4. Up-to-date-Information für alle Benutzer 5. Aufgabenverteilung ⇒ Einsatz von DBMS • heterogene Benutzergruppen, gemeinsame Datenhaltung • keine oder kontrollierte Redundanz gewünscht • Benutzerverwaltung, Authorisierung • Unterschiedliche Schnittstellen für unterschiedlich geschulte Benutzer • komplexe Daten, komplexe Beziehungen zwischen den Daten • Integritätsmechanismen sollen genutzt werden • Backup, Fehlerbehandlung • geringe Entwicklungszeit für sich ändernde Anwendungen Ein DBMS sollte man nicht benutzen, wenn • hoher overhead wegen • hoher initialer Aufwand (HW + SW) bei geringem Nutzen • Allgemeinheit der vorhandenen Funktionen • security, safety, concurrency control, recovery, integrity • Anwendung und DB sind eher einfach • real-time-Forderungen, die dem overhead gegenüberstehen • kein Mehrfachparallelzugriff auf Daten backup, recovery β CAU Kiel, IfI, ISE SS 2008 Datenbanken I 1. Einführung 1.1.2 Information ‘Information’ - vielseitig belegt Ereignisse untereinander in Beziehung gesetzt unter Gesichtspunkt inwieweit Unsicherheit verringert wird Absteckung des Möglichen Wahrscheinlichkeitstheoretische Sicht von Informationen Gegeben ist eine Zufallsvariable a = (a1 , ..., an ) p(ai ) Wahrscheinlichkeiten des Eintreffens von ai a - Ausschnitt aus Menge der möglichen Ereignisse Informationsgehalt des Wertes ai der Zufallsvariablen a : Unsicherheit, die durch das tatsächliche Eintreffen von ai beseitigt wird Nichtereignis versus Ereignis Formalisierung durch Maß • I(ai ) = I(ai ) mit folgenden Anford. f (p(ai )) • f ist stetig in [0,1] • f ist antiton (wahrscheinlichere Ereignisse enthalten weniger Information) • Informationsgehalt ist additiv: f (p1 ∗ p2 ) = f (p1 ) + f (p2 ) ⇒ dadurch ist I bis auf Konstante eindeutig festgelegt I(ai ) = −ld(p(ai )) = ld( 1 ) p(ai ) falls p(ai ) ̸= 0 Informationsgehalt von einem einzelnen Wert ai falls p(ai ) = 1 , dann keine Unsicherheit beseitigt wird nun der gesamte Informationsgehalt der Zeichen von a betrachtet, d.h. H(a) = n ∑ p(ai )I(ai ) i=1 = − n ∑ p(ai ) ld(p(ai )) i=1 ist der mittlere Informationsgehalt von a (Entropie) durch weitere Ausnutzung der WMS-Grundlagen angewandt auf Übertragung von Signalen Kanal Sender −→ Empfänger bedingte Wahrscheinlichkeiten, unabhängige Zufallsgrößen, ... z.B. Hvor (x|y) und Hnach (x|y) Unsicherheiten von x unter y vor und nach Ausführung D(x, y) := Hvor (x|y) − Hnach (x|y) übertragene Information Modelltheoretische Sicht von Informationen Klasse K von Strukturen gegeben (M = (D, r1 , ..., rn ), ri τi -stellige Relationen) “Ereignisse” werden durch FOPL-Formeln dargestellt Aussage entweder wahr oder falsch in M (falls wahr, dann M Modell von α) 9 CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung d.h. M odK (α) = {M ∈ K | M |= α} ⊆ K bzw. M odK (Φ) = ∩M odK (α) falls Φ bekannt, dann unsicher, welches Modell vorliegt sicher, fall ||M odK (Φ)|| = 1 ; höchst unsicher, falls M odK (Φ) = K Beispiel: S := if x ≥ 8 then y := 1 else y := 0 nach Ausführung der Anweisung und bei Beobachtung von y verringert sich Unsicherheit über x w(eakest) p(recondition) {S} Φ x - Sender; y - Empfänger damit verändert der Informationsfluß von x nach y unsere Kenntnis über die Modellklasse mitunter ist auch Information redundant 1.1.3 Kommunikation ebenso überladen kommunikatives Handeln: Verständigung über ihre Handlungssituation Sprache zur Mittlung Kommunikation als Synthese dreier Selektionen: • Information, ausgewählt aus einem Vorrat an Möglichen • Mitteilung, von Sender gewählt für sein Verhalten • Verstehen zur Veränderung der Möglichkeiten des Empfängers daran anschließend: Ablehnung oder Annahme des Verstandenen 1.1.4 Wirklichkeit und Modell Abstraktion als Mittel der Modellierung verschiedene Arten 1. Datenabstraktion • Klassifizierung / Instantiierung • Aggregation / Dekomposition (Tupel-, Mengen-, Listen-, Clusteroperatoren) • Hierarchien (Generalisierung / Spezialisierung) 2. Lokalisierungsabstraktion • Unterscheidung zwischen Definition und Verwendung (Wiederverwendung, Wiederholung) • naming • binding • scoping 3. Implementationsabstraktion • Verkapselung (Modularisierung) 10 CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 11 • Sichtbarkeit , hiding • mapping 1.2 Architektur Architektur mit einer Vielzahl von Sichten Modellierungsarchitektur z.B. Dreiebenenarchitektur dient dem Verständnis Modularchitektur (auch als technische Architektur) Typische Ausprägungen Schichtenarchitektur je nach Anwendungsaktivität oft auch eigenständige Architekturvariante Anwendungsarchitektur entspricht Diagramm der Aktivitäten (wie z.B. Gehirnaktivität) Architektur der Komponenten mit entsprechenden Schnittstellen Architektur als glass box mit einer Abstraktion von Interna der Komponenten Infrastruktur-Architektur mit den entsprechenden Begleitsystemen, Schnittstellen, Kollaboration Integrationsarchitektur im Sinne der Gestalltung der Landschaft Landschaftsarchitekt DBS = DBn + DBMS Dreiebenenarchitektur einer DB-Anwendung Abstraktionsebene Externe Ebene Externes Externes Schema ... Schema n 1 6 ? Konzeptionelle Ebene 6 ? Interne Ebene zugeordnete Sprache I - DatenDefinition R DatenManipulation - DatenAdministration - Abbildung 2: Dreiebenen-Modellierungsarchitektur bzw. -schichtung darauf aufbauend: 5-Schichten-Modell eines DBMS 1. Ebene derBenutzersprache Benutzerschnittstelle CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 12 DBMS Kommunikations-Subsystem InputOutputProzessor Authorisierungkontrolle Parser Precompiler Compiler UpdateProzessor QueryProzessor Optimierer Zugriffsplanerstellung Code-Erzeugung Integritätsprüfung und -erzwingung Verteilungsmanager Recovery Manager Synchronisation paralleler Zugriffe Transaktionsverwaltung Scheduler Speicherverwaltung Data-Manager 6 6 ? Support Systeme Graphische etc. Buffer-Manager 6 ? Logbuch 6 ? - Data Dictionary Datenbank Datenbank Datenbank Datenbank ... Datenbank ? Betriebssystem Abbildung 3: Einfache Sicht (Schichtenarchitektur der Module) auf moderne DBMS CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 13 DBMS InputOutputProzessor Authorisierungkontrolle UpdateProzessor QueryProzessor Code-Erzeugung Speicherverwaltung Data-Manager 6 6 ? Support Systeme Graphische etc. 6 ? Logbuch 6 ? - Data Dictionary Datenbank ? Betriebssystem Abbildung 4: DBMS einfachster Prägung (meist als Einstiegsdroge benutzt) CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 14 2. Ebene der Anfrageverarbeitung 3. Ebene der Zugriffstrukturen und Code-Erzeugung 4. Ebene der Synchronisation paralleler Zugriffe 5. Ebene der Speicherverwaltung Geräteschnittstelle Darauf aufbauend hat das System verschiedene Schnittstelle • Mengen-Schnittstelle select, insert, delete, modify 1 ↔ 2 views, Relationen • Tupel-Schnittstelle fetch, store, erase, update 2 ↔ 3 Cursor, Tupel • Record-Schnittstelle retrieve, add, change, dispose, change 3 ↔ 4 (Index-)Records • Seiten-Schnittstelle read, write 4 ↔ 5 Seiten, Segmente Service des DBMS am Beispiel der Anfrageverarbeitung 1. Überprüfung der Syntax 2. Authorisierungs- und Existenztest 3. Generieren der notwendigen internen Operationen und Speichermechanismen 4. Generieren eines effizienten Programmes 5. Berechnen der Anfrage in der DB 6. Aufbereiten der Anfrageergebnisse (Operand) 7. Sicherstellen, daß Ergebnis während der Ausführung der Anfrage nicht geändert wird darauf aufbauend verschiedene Sprachen für den Benutzer Data Definition Language (DDL): Definition des konzeptionellen Schemas einer Datenbank falls keine zusätzliche Storage Definition Language (SDL) vorhanden auch implizit (d.h. abgeleitet aus DDL-Definitionen) oder explizit Defintion des internen Schemata View Definition Language: Sichtendefinitionssprache zur Definition der externen Schemata Data Manipulation Language (DML): Datenmanipulationssprache zur Modifikation der vorhandenen Datenbank und zur Wiedergewinnung von Informationen Retrieval für die Abfrage Insert für das Einfügen von Daten Delete für das Löschen von Daten Update für die Modifikation der Daten Konzepte der DML können auf unterschiedlicher programmiersprachlicher Basis existieren nicht prozedural / prozedural mengenorientiert / satzorientiert CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 15 data sublanguage / host language Host Language des unterlegten Programmiersystemes Moderne DBMS bieten eine deklarative DDL, eine deklarative DML und auch eine embedded host language an. Alles andere kann aus diesen Sprachen generiert werden. Die DDL umfaßt auch direkte Möglichkeiten zur Darstellung von Sichten. Die Sprachen basieren auf entsprechenden Datenbankmodellen und auf Typensystemen, die den Programmiersprachen entlehnt sind. Wir unterscheiden heute je nach Datenbankmodell Relationale DBMS (auf der Grundlage des relationalen DB-Modelles), Hierarchische DBMS (auf der Grundlage des hierarchischen DB-Modelles), Netzwerk-DBMS (auf der Grundlage des Netzwerk-DB-Modelles) und neuerdings Objektorientierte DBMS (auf der Grundlage von DB-Modellen mit umfangreicheren Typensystemen und einer direkten Darstellung von Objekten mit ihren Identifikationsmechanismen und ihren Methoden), XML-DBMS als Erweiterung von Ausspiel- und Austauschformaten hin zur objektentfalteten Speicherung von Dingen der Realität mit Eigenbeschreibung, Objektrelationale DBMS als Erweiterung relationaler und universeller Systeme, sowie eine Reihe weiterer Arten von DBMS. Klassifikation von DBMS Datenmodell relational, Netzwerk, hierarchisch, oo # Benutzer Single oder Mehrfachbenutzer # Knoten Zentralisiert oder verteilt • homogen • heterogen • förderiert • interoperabel Kosten Zugriff Typen von Zugriffspfaden General purpose Allgemeine Anwendungen oder Spezialanwendungen Architektur Wie gut kann der Server seine Ressourcen im Mehrnutzerbetrieb ausschöpfen ? Einprozeßarchitektur Module der Anwendung und für Zugriff in einem Prozeß zusammengefaßt. + : keine zusätzliche Kommunikation - : selten im Unix-Umfeld Mehrprozeßarchitektur Volle Parallelität der einzelnen Module. + : für viele Anwender und viele parallele Prozesse Zugriffsprogramm nur einmal geladen; Ressourcenminimierung + : einfache Kontrolle der beteiligten DB-Prozesse CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 16 Single-Threaded-Single-Server-Arch. Jedem Anwendungsprogramm wird sein Prozeß zugeordnet, der über die volle Funktionalität des Servers verfügt. evt. auch Weiteruntergliederung des Servers in verschiedene spezialisierte Prozesse; + : Verarbeitung läßt sich parallelisieren; effizienter Parallel-Server-Arch. Einzelne Funktionen sind in einem Cluster-System (Rechnerzusammenschluß ohne Hauptspeicher und mit gemeinsamer Peripherie) zusammengefaßt Multi-Threaded-Single-Server-Arch. Ein zentraler DB-Prozeß bedient alle Front-End-Prozesse. + : Ein Prozeß wird nur einmal geladen und verteilt die Arbeit auf parallel arbeitende spezialisierte Prozesse. (weniger Speicherbelastung, jedoch wird dann zentraler Prozeß evt. Engpaß) Multi-Threaded-Multi-Server-Arch. Mehrere Backendprozesse versorgen die Frontendprozesse mit Daten. (evt. mit Priorisierung der einzelnen Klassen zur Effzienzverbesserung) (+ : für viele hundert Benutzer noch gute Antwortzeiten) Warum Optimierung ? Weg vom mainframe zur Unix-Umgebung Massives paralleles Processing als Ausweg Bislang offen: wahre Bedeutung von Multiprozessoren und Multiprozessing Ziel war: Anwendungsunabhängigkeit (nicht mehr Programmieren von Seiten, cache Größe, sharing memory, Code-Längen) wichtige Leistungsparameter • Throughput: heute Tausende von Datenbank Requests / Sekunde (TDRPS) frühere Meinung: nur für high-end Firmen; aber heute Ausweitung der DB Technologie auf BS Routinen (Speichertabellen und hartkodierte Werte mit abgelegt) - damit neue Herausforderung • Relationale Technologie und Implementation: bislang effizienter Zugriff für ein Attribut (einschließlich tuning) • Skalierbarkeit und modulares Wachstum: große Zugriffsrate insbesondere in im Netz (mit logischen zentralen ‘Warenhaus’) erfordert spezielle Zugänge zur Leistungserhöhung, Zugriffszeitreduktion, Erhöhung der Flexibilität und für Erweiterbarkeit Das Throughput-Problem Verarbeitung nach Warteschlangen-Theorie Service-Zeit: Beginn mit dispatch vom Programm, Ende mit Prozessorfreigabe Damit einige Parameter: • Ankunftsrate der Prozesse (wartende und ankommende) • Service-Rate (Zeit pro Service und Prozeß) • Serviceintensität (# simultane (concurrent) Operationen) • Länge der Warteschlange (insbesondere der Prozesse gleicher Priorität) • Scheduling delay • Servicekapazität 2 Basisstrategien: Multiprogramming (mehrere Prozesse auf einem Prozessor) und Multiprocessing (ein Programm auf mehreren Prozessoren) nunmehr Multiprocessing statt Multiprogramming (eigentlich nur Pseudoparalleleität) multitasking (oder synonym multithreading) =⇒ Granularität muß reduziert werden Pipelining, shared Speicherressourcen, nachrichtenbasierte Interprozeßkommunikation Wissenschaftliche Anforderungen • Referentielle Integrität, Integritätsbedingungen CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 17 • Komplexe Strukturen • Sicherheit • Komplexe Transaktionen • Intelligentes Suchen (Index aufwärts, abwärts, ...) Wichtigste Auswahlkriterien für Systeme 1. Multiuserfähigkeit 2. Datenbankinterne Datenbeschreibungs- und manipulationsprache 3. Sicherheit 4. Leistungsfähigkeit Einige Leistungen der Datenbanktechnologie: I. Technologie auf sicherer theoretischer Basis Mit der Entwicklung des relationalen Datenbankmodelles Strukturierung von Datenbanken Semantik von Datenbanken Generische Operationen Optimierungstheorie Interoperabilität, Verteilung, middleware Dynamik von Datenbankanwendungen Benutzerunterstützung Ausgereifte Datenbankmodelle Darauf aufsetzend: Theorie semantischer und objekt-orientierter Datenbanken Ausgereifte Technologie Ausgereifte, standardisierte Programmiersprachen SQL92 (SQL2), Einbettungsprinzipien in Wirtssprachen Ausgereifte Architektur von Systemen Einbettung in Betriebssysteme, graphische Systeme, ... Komponentenarchitektur, 3-Ebenen-Architektur Verteilung (two tier, three tier, trader) Benutzbarkeit für jedermann: Benutzungsoberflächen Vielfältige Einsatzgebiete durch Erweiterungen der Technologie Informationssysteme, Wissensbanken, Information-Retrieval-Systeme, Suchmaschinen, Dokumenten-Management-Systeme, Entscheidungsunterstützungsysteme, MIS, EIS, Data Warehouse, Internet-DB, Multimedia-DB, Dienste Sichere Technologie Sicher für den Anwender Verhalten der Datenbank gesichert Daten gegen Schäden der HW/SW gesichert Sicher gegen Fremdbenutzer Einhaltung der Sicherheitsforderungen Veränderungssicherheit Nachvollziehbarkeit Sicherheitsnormen auf B-, sogar A-Niveau CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 18 Sicher gegen den Anwender und seine Fehler (Konsistenzerzwingung), seine Nachlässigkeiten (Transaktionskonzept), seine Neugier (Sichten) Ausgereifte Pragmatik vorhanden: Methodiken und Vorgehensmodelle zum Entwurf und zur Implementation von Datenbankanwendungen insbesondere für relationale Anwendungen Beherrschung des Anwendungs-Engineering über die volle Lebenszeit der Anwendung mit Redesign, ReEngineerung Beherrschung der Abstraktion Somit: Regelmäßiges semiotisches Dreieck (Syntax, Semantik, Pragmatik) 1.3 Der grundlegende Zugang zur Modellierung formale Sprache erfinden verwirklichen benutzen Paradigmen \ Theorie • • Abstraktion • Entwurf • Begriffsgerüste Sinn von Informationssystemen • (handelnde) Personen • (strukturelle) Verpflichtungen innerhalb der Unternehmen • die von einer jeweils ausgeführten (sozialen) Rolle abhängen • ihr dazu notwendiges Wissen über das Unternehmen • ihre (formalen) Handlungen • die zugrundeliegenden Mitteilungen Wissen der Anwendung Drei Abstraktionsarten statische Gesichtspunkte einer Anwendung Struktur in Abhängigkeit des Typensystems meist nur Datenabstraktion • Seiendes (entity) : Ding, das wirklich exisitert • Beziehung (relationship) : Zusammenhang • Eigenschaft, Attribut : extensional (Dinge sind durch ihre Eigenschaften vollständig beschrieben und identifizierbar) Dinge stehen in Beziehung bzw. besitzen Eigenschaften • Rolle evt. auch mehrmals • Klassenbildung als Abstraktionsprinzip Gesamtheit der Dinge modellieren • Aussonderung : Separation / Spezialisierung • Verallgemeinerung : Generalisierung von Gemeinsamkeiten • Aggregation : Semantik einschränkende Bedingungen für wirklichkeitsgetreue Nachbildung der Anwendung CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 19 • eindeutige Bestimmung aller Objekte : Schlüsselbedingung • Hierarchie der Objekte Aussonderungsbedingungen (specialization, IsA): Objekte sind auch Objekte in anderen Klassen Verallgemeinerungsbedingungen (partition constraints, uniqueness constraints): Beziehungen zwischen Objekten in einer Verallgemeinerungsklasse • Bedingungen für Beziehungsklassen • funktionaler Zusammenhang (viele-eins-Bedingung) • jedes Komponentenobjekt einbezogen ? Seinsbedingung (existence constraint) • Verweisbedingung auf Objekte der Komponentenklassen • allgemeine Bedingungen - inhärente Bedingungen des Modells • Gesamtheitsregel (universe of discourse) : Gesamtheit der möglichen Seienden ist durch folgende Angaben ... vollständig beschrieben • Verneinungsregel : Ist eine Beziehung weder direkt noch indirekt dargestellt, dann gilt sie nicht. Sichten und abgeleitete Begriffe : aus den Objekten der DB erschließbar Lokalisierungs- und Implementationsabstraktion, mitunter auch Datenabstraktion • Regeln zur Generierung des nicht direkt dargestellten Wissens abgeleitete Begriffe und Typen (Vorfahren aus Eltern-Kind-Beziehung) • Regeln zur Generierung des Ausschnittes, der für handelnde Personen sichtbar sein soll oft als Implementationsabstraktion verstanden für externe Sichten (Sichtbarkeit, hiding) Modularisierung (Verkapselung) oft nur nebenrangig daneben aber auch als Lokalisierungsabstraktion (Unterscheidung zwischen Definition und Verwendung, naming, binding, scoping) dynamische Gesichtpunkte der Anwendung Operationen - Handlungen zur Darstellung des dynamischen Verhaltens • • • • Änderungsoperationen - zur Veränderung im Wissen Retrievaloperationen - zur Erschließung des Wissens ohne Veränderung der DB Sprache zur Generierung von Programmen (siehe Theorie der Programmiersprachen) Rollenveränderungen von dargestellten Objekten Semantik zur Darstellung von zugelassenen und verbotenen Handlungsfolgen Verpflichtungen innerhalb einer Rolle beschrieben durch • welches Wissen zugänglich (Sichten (konsistent zu deren Definition)) und welche Handlungsfolgen ausgeführt werden müssen, evt. unter Berücksichtung von Ursachen (aktive Elemente) • welches Wissen zugänglich (Sichten (konsistent zu deren Definition)) und welche Handlungsfolgen ausgeführt werden dürfen, evt. unter Berücksichtung von Voraussetzungen Mitteilungen an einen oder den anderen Empfänger, die sie ihrerseits verstehen und verarbeiten sollten zeit(un)abhängige Beschreibungen • zeitunabhängig wird meist die Semantik vorausgesetzt, evt. auch Operationen, fast immer die Struktur • zeitabhängig ist z.B. aufzählendes Wissen, insbesondere Inhalt der Datenbank Daraus folgt: 3 1 2 Schichten bei der Darstellung einer Datenbank 1. Datenstrukturen (des zugrundegelegten DBMS oder allgemeine) (Datenschema) CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 20 2. Struktur, Operationen, Semantik, Sichten, ... (Datenbank-Schema) 3. Datenbankinstanz, die dem DB-Schema entspricht 4. Beispieldaten Zur Erinnerung: Grundbegriffe der Logik, der Mengenlehre, der Theorie der Programmiersprachen Einige wichtige Begriffe • Syntax • Alphabet • Variable (Individuen-, Funktions-, Prädikaten-) • induktive Definition von Formeln • Interpretation • Gültigkeit • Modell • Allgemeingültigkeit, Erfüllbarkeit • Folgerung • Ableitungsregeln • die durch Ψ ausgesonderte Menge Allgemeines Vorgehen • Typen sind über ihre Typausdrücke definiert. Den (freien) Variablen werden wiederum Typen zugeordnet. • Die Zuordnungsvorschrift für Typausdrücke kann sowohl hierarchisch als auch zyklisch sein. Wählt man eine zyklische Struktur, dann sind meist nur Topoi-Semantiken geeignet. Wählt man hierarchische Strukturen, dann kann meist eine Mengensemantik noch garantiert werden. • Typen haben eine assoziierte Semantik (statische). • Typen haben Operationen zu ihrer Manipulation und Veränderung. Man kann diese Operationen generisch definieren, wenn die Typenstruktur hierarchisch aufgebaut ist. (siehe Vorlesung Theorie der Programmiersprachen: Semantik von goto) CAU Kiel, IfI, ISE β semantische Begriffe Seiendes einfach zusammenges. Beziehung Eigenschaft / Attribut SS 2008 Datenbanken I 1. Einführung Grundbegiffe aus Logik/Mengenlehre Syntax Semantik Konst.-zeichen Elem. ∈ Wertemenge Grundterm (mit Fkt.-z.) atomare Grundaussage Tupel einer Relation Rolle (bei Bezieh.) (2-stell.) atomare Grundaussage / Grundterm Stelle eines Präd.-z. Komp. einer Relation Klassenbildung Gesamtheit Aussonderung Menge v. Konst.-zeich. Formel ϕ Universum dM,ϕ , 2M Verallgemein. ∨ Vereinigung Aggregation ∧, = ∩,× (implikative) Aussage mit =-Konklusion Modellklasse Bedingung Schlüsselbeding. Aussonderungsbed. Verallgemein.-bed. 1-n-Beding. Seinsbeding. Verweisbeding. Regel Gesamtheitsregel Verneinungsregel Sichtregel Handlung Information Tupel einer (2-stell.) Rel. Funktionswert 21 Konzepte imperativer Prog.-Spr. Konstante Strukturbaum eines Terms Verbund (reecord), Aufruf Boolesch-wert. Proz. Verbund (record) Aufruf einer attribut.wertigen Fkt.-proz. Komp.-bezeichner (Verbund) formaler Parameter (F.-proz.) Deklaration Typendeklarat. Menge, Deklar. (Bool.-w.) Funkt.-proz. Deklarat. eines varianten Verbundtyps Deklarat. von Feldund Verbundtypen Deklarat. einer Prozedur mit =-Konklusion Deklaration einer Prozedur Ableit.-regel, Formeln Ableit.-regel, Formeln Formeln logische Implikation logische Implikation Relation Verkleinerung der Modellklasse Mitteilung konjunktiv hinzugefügte Aussage Aussage Verstehen Widerspruchsfreiheit Erfüllbarkeit Zustandänderung (Wertzuweisung) akt. Parameter beim Prozeduraufruf Ausführung einer Proz. 1.4 Database Systems at the First Level as Abstract State Machines In this section we describe the semantics of a first level database using abstract state machines. The specification is executable using AsmL 1.5, however, we used syntax from AsmL 2.0 at several places in order to make the specification more readable. Currently we are converting the specification to AsmL 2.0 format. 1.4.1 The Database System as an Input-Output Engine At the first level we describe databases from the outside point of view. The structure of the database is fixed, i.e. we do not consider any create/delete table operations. The semantics of those is simple enough. The common data types between inner and outer representation are view names, relation names and procedure names (for stored procedures) and attribute names (including primary and secondary keys). Therefore the interface specification is as follows: type type type type type ViewName RelationName ProcedureName AttributeName TypeName = = = = = String String String String String CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 22 For the representation of stored procedures it is essential to have complete freedom as to how the body of the procedure is defined. This is achieved by allowing the complete power of ASM for the definition of the body. To this end, only an interface is given, how the computations of a procedure should function, and the rest can be given as an ASM procedure. See also ?? below for some concrete examples of stored procedures. interface ProcedureStep stepAction(params as Seq of Data) as Set of Request stepResult(params as Seq of Data) as Data structure StoredProcedure transactional as Boolean params as Seq of String // means sequence of types contents as Seq of ProcedureStep 1.4.2 Structuring of the Database First, we define the global types necessary for databases. These types are • Database, • Request, with the kinds • Insert • Delete • Update • Call (of a stored procedure) • simple Select (provide a relation as result) • general Select (just provide any result data) and • Answer, which can be a status message or a relation in case of a simple select request. Moreover, we want to use variables at several places. Therefore we define the global database structure as follows: structure Database content as Map of RelationName to Relation procs as Map of ProcedureName to StoredProcedure constraints as Set of Constraint structure Request case Insert relName as RelationName ins as Tuple case Delete relName as RelationName del as Tuple case Update relName as RelationName upd as Tuple case Call pname as ProcedureName pparams as Seq of Data presult as Variable case SimpleSelect what as Seq of AttributeName From as RelationName Where as Constraint result as Relation CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 23 case OutputSelect result as Set of Tuple structure Answer case StatusAnswer status as String case RelationAnswer rel as Relation class Variable name as String value as Data 1.4.3 The Global States of the Database System Now we define the global state variables: an input, an output, a set of variables and the database. var var var var input as Set of Request = {} output as Seq of Answer = [] variables as Set of Variable = {} database as Database = Database({|->},{|->},{}) The action on the database depends on the input as follows (compare again with ??): DBAction() = choose inp in input do input:= input difference { inp } ProcessAction(inp) ProcessAction(inp as Request) = match inp with Insert(n,t): DBChange(n,inp) Delete(n,t): DBChange(n,inp) Update(n,t): DBChange(n,inp) Call(p,par,v): let proc = database.procs(p) if proc = undef then output:= output + [StatusAnswer("no such procedure: " + p.name) as Answer] else DBCall(proc,par,v) SimpleSelect(what,n,constr,result): //very simple version first let res = database.content(n) if res = undef then output:= output + [StatusAnswer("relation " + n.name + " not defined") as Answer] else output:= output + [RelationAnswer(res) as Answer] This behaviour is refined with the definition of DBChange for a simple change to the database and DBCall for the call of a stored procedure. A single change to the database is described using the function DBStep DBChange(n as RelationName, r as Request) = let rel = database.content(n) if rel=undef then output:= output + [StatusAnswer("no such relation") as Answer] else let newDB = DBStep(database.content, n, r) if check(newDB,database.constraints) then database.content:= newDB output:= output + [StatusAnswer("ok") as Answer] else CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 24 output:= output + [StatusAnswer("constraint violation") as Answer] DBStep(cont as Map of RelationName to Relation, n as RelationName, r as Request) as Map of RelationName to Relation = let rel = cont(n) let newrel = match r with Insert(_,t): Relation(rel.attributes, rel.members union {t}) Delete(_,t): Relation(rel.attributes, rel.members difference {t}) Update(_,t): Relation(rel.attributes, (rel.members difference sameKeys(n, rel.members, t)) union {t}) cont override { n |-> newrel } An update to a relation consists of two steps: first, all tuples which have the same key values are deleted, and second, the new tuple is inserted. The tuples with the same key values are computed using the function sameKeys below. sameKeys(n as RelationName, r as Set of Tuple, t as Tuple) as Set of Tuple = let attr = database.content(n).attributes let keys = { (d as KeyConstraint).key | d in database.constraints where d is KeyConstraint and (d as KeyConstraint).rel = n } bigUnion({ { tup | tup in r where getKey(attr,tup,k)=getKey(attr,t,k) } | k in keys }) getKey(n as Seq of AttributeName, t as Tuple, k as Set of AttributeName) as Seq of Data = let len = if length(t.contents) < length(n) then length(t.contents) else length(n) [t.contents(idx) | idx in [ 0 .. len ] where n(idx) in k] DBCall(p as StoredProcedure, par as Seq of Data, res as Variable) = let chk = ParamCheck(p,par) if chk and p.transactional then machine var localDB as Map of RelationName to Relation = database.content foreach pstep in p.contents do foreach act in pstep.stepAction(par) do match act with Insert(n,t): if localDB(n)=undef then output:= output + [StatusAnswer("no such relation") as Answer] else localDB:= DBStep(localDB, n, act) Delete(n,t): if localDB(n)=undef then output:= output + [StatusAnswer("no such relation") as Answer] else localDB:= DBStep(localDB, n, act) Update(n,t): if localDB(n)=undef then output:= output + [StatusAnswer("no such relation") as Answer] else localDB:= DBStep(localDB, n, act) _: output:= output + [StatusAnswer("invalid action in stored procedure") as Answer] step if check(localDB,database.constraints) then database.content:= localDB output:= output + [StatusAnswer("stored procedure ok") as Answer] else output:= output + [StatusAnswer("constraint violation in stored procedure") as Answer] else if chk then CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 25 foreach pstep in p.contents do foreach act in pstep.stepAction(par) do ProcessAction(act) else output:= output + [StatusAnswer("illegal parameters for stored procedure") as Answer] ParamCheck(p as StoredProcedure, par as Seq of Data) as Boolean = let len = length(p.params) let ldiff = length(par) - len ldiff >= 0 and (forall idx in [0 .. len-2] holds p.params(idx)=par(idx).typ) and (p.params(len-1)="*" or (p.params(len-1)=par(len-1).typ and length(par)=len)) This concludes the top level view of databases. We proceed with defining relations and tuples. Moreover, we define a basic set of data types allowed within the database. structure Relation attributes as Seq of AttributeName members as Set of Tuple structure Tuple contents as Seq of Data // no nested Tuples allowed structure Data typ as String case PUndef case PInteger val as Integer case PString val as String case PShort val as Short case PByte val as Byte case PChar val as Char case PBoolean val as Boolean case PDate val as Date case PTimeStamp val as Float // could add more here converter converter converter converter converter converter converter converter (x (x (x (x (x (x (x (x as as as as as as as as Integer) as Data = PInteger("Integer",x) String) as Data = PString("String",x) Short) as Data = PShort("Short",x) Byte) as Data = PByte("Byte",x) Char) as Data = PChar("Char",x) Boolean) as Data = PBoolean("Boolean",x) Date) as Data = PDate("Date",x) Float) as Data = PTimeStamp("TimeStamp",x) We also have to define what constraints are and how they are checked. We distinguish between only two kinds of constraints, namely key constraints and domain constraints. A key constraint says, that the values on the corresponding attributes are unique within the relation. A domain constraint is used for type-checking the attribute values. structure Constraint case KeyConstraint rel as RelationName key as Set of AttributeName case DomainConstraint rel as RelationName attr as AttributeName domain as TypeName check(cont as Map of RelationName to Relation, constr as Set of Constraint) CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 26 as Boolean = forall c in constr holds forall r in dom(cont) holds checkOne(c,r,cont(r)) checkOne(c as Constraint, n as RelationName, rel as Relation) as Boolean = match c with KeyConstraint(RelationName(r),k): if r <> n.name then true else let relSize=size(rel.members) let keyCount=size({ getKey(rel.attributes,t,k) | t in rel.members }) machine if relSize <> keyCount then write("Key constraint violation: "); prettyPrint(c) step relSize = keyCount DomainConstraint(RelationName(r),attr,TypeName(d)): if r <> n.name then true else forall t in rel.members holds if length(rel.attributes) <> length(t.contents) then machine write("Domain constraint violation: ") write("wrong number of elements in "); prettyPrint(t) step false else machine let elem=getKey(rel.attributes,t,{attr}) if head(elem).typ <> d then write("Domain constraint violation: ") write(" Attribute "); write(r); write("."); write(attr.name) write("="); prettyPrint(head(elem)); write(" must be "); write(d) write(" and not "); writeln(head(elem).typ) step head(elem).typ = d 1.4.4 An Application Example The next part is devoted to an example taken in the context of internet information services. We (partially) define a database of restaurants. We define first some simplifications for defining the database structure: structure DataDesc name as AttributeName typ as TypeName // would be good to have MetaType here mkDataDesc(attr as String, atype as String) as DataDesc = DataDesc(AttributeName(attr), TypeName(atype)) mkRelation(name as String, key as Seq of DataDesc, members as Seq of DataDesc) = let relName = RelationName(name) database.content:= database.content override { relName |-> Relation([k.name | k in key] + [k.name | k in members],{}) } database.constraints:= database.constraints union { KeyConstraint(relName,{k.name | k in key}) as Constraint } union { DomainConstraint(relName, k.name, k.typ) as Constraint | k in key } union CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 27 { DomainConstraint(relName, m.name, m.typ) as Constraint | m in members } Now the macro mkRelation is used to create the database structure. Please note that we left this out of our description of database semantics as it is a static structure. As you can see below, it might still cause some work for a real database. InitSampleDB() = machine variables:= { resVar } step mkRelation("Restaurant", [ mkDataDesc("no","Integer") ], [ mkDataDesc("name","String"), mkDataDesc("street","String"), mkDataDesc("place","String"), mkDataDesc("po_code","String"), mkDataDesc("telephone","String"), mkDataDesc("fax","String"), mkDataDesc("email","String"), mkDataDesc("url","String") ]) step mkRelation("Person", < omitted > ) step mkRelation("Contact", [ mkDataDesc("restaurant_id","Integer") ], [ mkDataDesc("person_id","Integer") ]) step mkRelation("Owner", < omitted > ) step mkRelation("Operation_mode", < omitted > ) step mkRelation("Mode", < omitted > ) step mkRelation("Cuisine_kind", [ mkDataDesc("cuisine_id","Integer") ], [ mkDataDesc("description","String") ]) step mkRelation("Cuisine", [ mkDataDesc("restaurant_id","Integer"), mkDataDesc("cuisine_id","Integer") ], []) step mkRelation("Offers", < omitted > ) step mkRelation("Multimedia", < omitted > ) step mkRelation("Offer_description", < omitted > ) step mkRelation("Special_offers", < omitted > ) step mkRelation("Business_hours", < omitted > ) step mkRelation("Description", < omitted > ) step mkRelation("Location", < omitted > ) step mkRelation("Service_offers", < omitted > ) step mkRelation("Service", < omitted > ) step mkRelation("Cards", [ mkDataDesc("card_id","Integer") ], [ mkDataDesc("description","String") ]) step mkRelation("Credit_cards", [ mkDataDesc("restaurant_id","Integer"), mkDataDesc("card_id","Integer") ], [ ]) step mkRelation("Ambiente_kind", [ mkDataDesc("ambiente_id","Integer") ], [ mkDataDesc("description","String") CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 28 ]) step mkRelation("Ambiente", [ mkDataDesc("restaurant_id","Integer"), mkDataDesc("ambiente_id","Integer") ], [ ]) step mkRelation("Intern", < omitted > ) step mkRelation("Acquisition_url", [ ], [ mkDataDesc("url_menu","String"), mkDataDesc("url_map","String"), mkDataDesc("url_pics","String"), mkDataDesc("url_video","String") ]) The next step is to define two sample stored procedures for the database. These are fairly general procedures for deleting the tuples in a relation and for inserting tuples into a relation thereby creating a unique index for each of the entries. Both kinds of procedures are used later on to modify the database. class SP_DeleteStep implements ProcedureStep stepAction(params as Seq of Data) as Set of Request = let n as RelationName = RelationName((params(0) as PString).val) { Delete(n,t) as Request | t in database.content(n).members where t.contents(1) = params(1) } stepResult(params as Seq of Data) as Data = 0 as Data class SP_FillStep implements ProcedureStep stepAction(params as Seq of Data) as Set of Request = let n as RelationName = RelationName((params(0) as PString).val) { Insert(n,Tuple([idx as Data, params(idx)])) as Request | idx in [1..length(params)-1] } stepResult(params as Seq of Data) as Data = length(params) as Data InitProcedures() = database.procs(ProcedureName("sp_delete")):= StoredProcedure(true, ["String", "String"], // these are the parameter types [ new SP_DeleteStep() as ProcedureStep ]) database.procs(ProcedureName("sp_fill")):= StoredProcedure(true, ["String", "*"], // these are the parameter types, ’*’ means any type [ new SP_FillStep() as ProcedureStep ]) Now we define some sample requests. We obtain the following AsmL specification: InitInsertRequests() = input:= { Call(ProcedureName("sp_fill"), ["Service_offers" as Data, < omitted > ], resVar) as Request, Call(ProcedureName("sp_fill"), ["Operation_mode" as Data, < omitted > ], resVar) as Request, Call(ProcedureName("sp_fill"), ["Cuisine_kind" as Data, "american", "arabian", "argentinean", "australian", "balkan", "bavarian", < many more omitted > ], resVar) as Request, Call(ProcedureName("sp_fill"), ["Ambiente_kind" as Data, "asian", "historic building", "dignified", "bucolic", "luxurious", "modern", "nostalgic", "oriental", "rustic" CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung 29 ], resVar) as Request, Call(ProcedureName("sp_fill"), ["Cards" as Data, "American Express", "DinersCub", "Euro Card", "Euro-cheque", "EC-card", "Visage", "Mastercard", "Tele-Cash", "Restaurant-cheque" ], resVar) as Request, Insert(RelationName("Acquisition_url"), Tuple([ "1" as Data, "2", "3", "4" ])) as Request } InitUpdateRequests() = input:= { Update(RelationName("Cards"), Tuple([ 2 as Data, "Diners Club" ])) as Request, Update(RelationName("Cards"), Tuple([ 6 as Data, "Visa" ])) as Request, // it is not clear whether the following line should produce a key constraint violation Insert(RelationName("Cards"), Tuple([ 7 as Data, "Mastercard" ])) as Request, Insert(RelationName("Acquisition_url"), Tuple([ "a" as Data, "b", "c", "d" ])) as Request, Update(RelationName("Acquisition_url"), Tuple( [ "http://www.informatik.tu-cottbus.de/˜cbnet/cb_db/gast/speisekarten/" as Data, "http://delaware.informatik.tu-cottbus.de/Stadtkarte/image.pl?place=", "http://www.informatik.tu-cottbus.de/˜cbnet/cb_db/gast/bilder/", "http://www.informatik.tu-cottbus.de/˜cbnet/cb_db/gast/video/" ])) as Request } InitCallRequests() = input:= { Call(ProcedureName("sp_delete"), ["Ambiente" as Data,"dummy"], resVar) as Request, Call(ProcedureName("sp_delete"), ["Ambiente_kind" as Data,"modern"], resVar) as Request } InitRetrieveRequests() = input:= { SimpleSelect([],RelationName("Cards"),undef,undef) as Request, SimpleSelect([],RelationName("xxx"),undef,undef) as Request } Now we put everything together to get an executable AsmL specification. The idea is always to initialize a sequence of requests and execute them afterwards using until fixpoint do DBAction(). Please note, that the requests are executed non deterministically and not in the order they are given. run() = machine InitSampleDB() InitProcedures() InitInsertRequests() step until fixpoint do DBAction() step writeln("The result is: ") prettyPrint(output) prettyPrint([StatusAnswer("ready") as Answer]) output:= [] InitUpdateRequests() step until fixpoint do DBAction() step prettyPrint(output) prettyPrint([StatusAnswer("ready") as Answer]) output:= [] InitCallRequests() step until fixpoint do DBAction() step prettyPrint(output) prettyPrint([StatusAnswer("ready") as Answer]) output:= [] InitRetrieveRequests() CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung step until fixpoint do DBAction() step prettyPrint(output) prettyPrint([StatusAnswer("ready") as Answer]) output:= [] writeln(); writeln("The database is: ") prettyPrint(database) 1.4.5 Executing the Abstract Database Machine We can now test the database engine by running the specification. The result is as follows: The result is: Status: ok Status: stored procedure ok Status: stored procedure ok Status: stored procedure ok Status: stored procedure ok Status: stored procedure ok Status: ready Key constraint violation: Key(Acquisition_url)= {} Status: ok Status: ok Status: ok Status: constraint violation Status: ok Status: ready Status: stored procedure ok Status: stored procedure ok Status: ready Relation: card_id description #3 "Euro Card" #4 "Euro-Cheque" #5 "EC-Card" #6 "Visa" #7 "Mastercard" #8 "Tele-Cash" #9 "Restaurant-Cheque" #1 "American Express" #2 "Diners Club" Status: relation xxx not defined Status: ready After executing all the requests, the database has the values given below: The database is: Relation Description: <empty> Relation Mode: <empty> Relation Operation_mode: < omitted > Relation Acquisition_url: url_menu url_map url_pics url_video "http://www.informatik.tu-cottbus.de/˜cbnet/cb_db/gast/speisekarten/" "http://delaware.informatik.tu-cottbus.de/Stadtkarte/image.pl?place=" "http://www.informatik.tu-cottbus.de/˜cbnet/cb_db/gast/bilder/" "http://www.informatik.tu-cottbus.de/˜cbnet/cb_db/gast/video/" Relation Restaurant: <empty> Relation Owner: <empty> Relation Intern: <empty> Relation Cards: card_id description #3 "Euro Card" 30 CAU Kiel, IfI, ISE β SS 2008 Datenbanken I 1. Einführung #4 "Euro-Cheque" #5 "EC-Card" #6 "Visa" #7 "Mastercard" #8 "Tele-Cash" #9 "Restaurant-Cheque" #1 "American Express" #2 "Diners Club" Relation Credit_cards: <empty> Relation Cuisine: <empty> Relation Cuisine_kind: cuisine_id description #1 "american" #2 "arabian" #3 "argentinean" #4 "australian" #5 "balkan" #6 "bavarian" < some more omitted > Relation Location: <empty> Relation Multimedia: <empty> Relation Business_hours: <empty> Relation Person: <empty> Relation Service_offers: < omitted > Relation Service: <empty> Relation Offers: <empty> Relation Offer_description: <empty> Relation Ambiente: <empty> Relation Ambiente_kind: ambiente_id description #8 "oriental" #9 "rustic" #1 "asian" #2 "historic building" #3 "dignified" #4 "bucolic" #5 "luxurious" #7 "nostalgic" Relation Special_offers: <empty> Relation Contact: <empty> < now showing the constraints that are in the database > Domain(Acquisition_url.url_map)= String Domain(Acquisition_url.url_pics)= String Domain(Acquisition_url.url_speisekarte)= String Domain(Acquisition_url.url_video)= String < many more domain constraints omitted > Key(Acquisition_url)= {} Key(Cards)= {card_id} < more key constraints omitted > Press any key to continue 31