4. Datenbankdefinitionssprachen SQL-DDL ODL (Object Definition Language) für objektorientierte Datenbanksysteme nach dem ODMG-Standard Objektrelationale Konzepte DDL-Erweiterungen von SQL:1999 Oracle9i XML: DTD und XML Schema VL Objektrelationale Datenbanken 4 1 4.1. Relationales Modell: SQL-DDL SQL-DDL umfaßt alle Klauseln von SQL, die mit Definition von Typen Wertebereichen Relationenschemata Integritätsbedingungen zu tun haben VL Objektrelationale Datenbanken 4 2 Anforderungen an eine relationale DDL nach Codd 1982 Sprachmittel zur Definition von 1. Attributen 2. Wertebereichen 3. Relationenschemata 4. Primärschlüsseln 5. Fremdschlüsseln Praxis SQL-89: Relationenschemata mit Attributen und Wertebereichen ab SQL-92 vollständig VL Objektrelationale Datenbanken 4 3
SQL als Definitionssprache Externe Ebene create view, drop view Konzeptuelle Ebene create table, alter table, drop table Konzeptuelle Ebene (SQL-92) create domain, alter domain, drop domain Interne Ebene create index, alter index, drop index VL Objektrelationale Datenbanken 4 4 Die Anweisung create table create table basisrelationenname ( spaltenname_1 wertebereich_1 [not null], spaltenname_k wertebereich_k [not null]) VL Objektrelationale Datenbanken 4 5 Erlaubte Wertebereiche in create table integer (oder auch integer4, int), smallint (oder auch integer2) float(p) (oder auch kurz float) decimal(p,q) und numeric(p,q) mit jeweils q Nachkommastellen character(n) (oder kurz char(n), bei n = 1 auch char) für Strings fester Länge n character varying(n) (oder kurz varchar(n)) für Strings variabler Länge bis zur Maximallänge n bit(n) oder bit varying(n) analog für Bitfolgen date, time bzw. timestamp für Datums-, Zeit- und kombinierte Datums-Zeit-Angaben VL Objektrelationale Datenbanken 4 6
Beispiel Tabellendefinition mit SQL-92 create table Buecher ( ISBN char(10), Titel varchar(200), Verlagsname varchar(30), primary key (ISBN), foreign key (Verlagsname) references Verlage (Verlagsname) ) VL Objektrelationale Datenbanken 4 7 Erweiterungen in SQL-92 Neben Primär- und Fremdschlüssel in SQL-92: default-klausel: Defaultwerte für Attribute create domain-anweisung benutzerdefinierte Wertebereiche check-klausel weitere lokale Integritätsbedingungen innerhalb der zu definierenden Wertebereiche, Attribute und Relationenschemata VL Objektrelationale Datenbanken 4 8 Definition eines Wertebereichs create domain Gebiete varchar(20) default Informatik create table Vorlesungen ( V_Bezeichnung varchar(80) not null, SWS smallint, Semester smallint, Studiengang Gebiete ) create table Mitarbeiter ( PANr integer not null, AngNr char(10) not null, Fachbereich Gebiete, Gehalt decimal(10,2), Raum integer, Einstellung date ) VL Objektrelationale Datenbanken 4 9
Integritätsbedingungen mit check create domain Gebiete varchar(20) default Informatik check ( value in ( Informatik, Mathematik, Elektrotechnik, Linguistik ) ) VL Objektrelationale Datenbanken 4 10 Integritätsbedingungen mit check /2 create table Vorlesungen ( V_Bezeichnung varchar(80) not null, primary key, SWS smallint check(sws 0), Semester smallint check( Semester between 1 and 9), Studiengang Gebiete ) VL Objektrelationale Datenbanken 4 11 Integritätsbedingungen mit check /3 create table Buch_Versionen ( ISBN char(10), Auflage smallint check(auflage > 0), Jahr integer check (Jahr between 1800 and 2020), Seiten integer check(seiten > 0), Preis decimal(8,2) check(preis 250), primary key (ISBN, Auflage), foreign key (ISBN) references Bcher (ISBN), check ((select sum(preis) from Buch_Versionen)< (select sum(budget) from Lehrsthle))) VL Objektrelationale Datenbanken 4 12
4.2. Objektorientiertes Modell: ODL Datendefinitionssprache der ODMG für Objektdatenbanken programmiersprachenneutral (Erweiterung der OMG-IDL) Beschreibung der Schnittstellen (Objekttypen) Attribute, Beziehungen, Methodensignaturen Implementierung in konkreter Programmiersprache Mapping für C++, Java, Smalltalk Präprozessor, Schema-Compiler VL Objektrelationale Datenbanken 4 13 ODL: Konzepte Schnittstelle: Spezifikation des abstrakten Verhaltens eines Typs Klasse: Spezifikation des abstrakten Verhaltens und Zustands eines Typs Attribut: benannte Eigenschaften von Literal- oder Objektdatentypen Beziehungen: Verweise (Referenzen) auf andere Objekte (einstellig/mehrstellig) Operationen: Methoden mit Parametern, Rückgabewert, Ausnahmen VL Objektrelationale Datenbanken 4 14 ODL: Beispiel class Student : Person ( extent Studenten, key matrnr) attribute char matrnr[6]; attribute string studienfach; attribute set<struct<float note, string fach>> zeugnis; relationship Person mutter inverse Person::kind; relationship Person vater inverse Person::kind; } float durchschnittsnote () raises (keine_note); void exmatrikulation (in string art) raises (buecher_ausgeliehen); VL Objektrelationale Datenbanken 4 15
Erläuterung ODL-Beispiel Objekttyp Personen beschreibt Typhierarchie: Angabe der Obertypen hinter dem Typnamen (hier: Obertyp Person) Extension, in der die aktuell erzeugten Objekte vom Typ Student gesammelt werden sollen (hier: Extension mit dem Namen Studenten) Schlüssel des Objekttyps, eine Auswahl der Attribute, die zur eindeutigen Identifizierung der Objekte unabhängig von der Objektidentität verwendet werden können (hier: nur das Attribut matrnr) Attribute mit Datentypen und Namen VL Objektrelationale Datenbanken 4 16 Erläuterung ODL-Beispiel /2 Beziehungen zu anderen Klassen mit dem Wortsymbol relationship auch inverse Beziehungen ermöglichen Wahl zwischen 1:1-, 1:n, und n:m- Kardinalitäten hier: zwei 1:n-Beziehungen Vater und Mutter zwischen Studenten und Personen, da nur die Rückrichtung einen Set-Typ enthält: set<person> kind Methoden mit ihrer Schnittstelle und einer spezifizierten Ausnahmebehandlung, die im Fehlerfall ausgelöst wird (etwa bei Verletzung von Integritätsbedingungen) VL Objektrelationale Datenbanken 4 17 ODL: Vererbung isa-beziehung (Generalisierung/Spezialisierung): Vererbung von Verhalten interface Object { }; interface Dokument : Object { }; extends-beziehung: Vererbung von Verhalten und Zustand (nur Einfachvererbung) class Buch : Dokument { }; class Monographie extends Buch { }; VL Objektrelationale Datenbanken 4 18
ODL: Beziehungen Umsetzung von m:n-beziehungen besucht(student[0,*], Vorlesung[0,*]) class Vorlesung { relationship set<student> wird_besucht_von inverse Student::besucht; } class Student { relationship set<vorlesung> besucht inverse Vorlesung::wird_besucht_von; } VL Objektrelationale Datenbanken 4 19 ODL: Beziehungen /2 Umsetzung von Beziehungen mit Attributen wird_geprüft(student[0,*], Vorlesung[0,*]; Note) class Pruefung { attribute int note; relationship Vorlesung fach inverse Vorlesung::pruefung; relationship Student pruefling inverse Student::pruefung; } class Student { relationship set<pruefung> pruefung inverse Pruefung::pruefling; } VL Objektrelationale Datenbanken 4 20 Java-ODL Nutzung von Java-Klassendefinitionen als DDL keine neue Sprache notwendig aber nur eingeschränkte Definitionsmöglichkeiten teilweise Ergänzung mittels Informationen aus Konfigurationsdateien Persistenzfähigkeit von Java-Klassen durch Präprozessor: Verarbeitung einer Java-Klassendefinition, Extraktion der notwendigen Schemainformationen, Hinzufügen von DB-spezifischem Code Postprozessor: Verarbeitung von kompilierten Bytecode, Code-Modifikation entsprechend Persistenzanforderungen VL Objektrelationale Datenbanken 4 21
Java-ODL: Beispiel public class Author { private String firstname, lastname; public Author (String first, String last) { firstname = first; lastname = last; } public String getlastname () { return lastname; } } public String getfirstname () { return firstname; } VL Objektrelationale Datenbanken 4 22 Java-ODL: Beispiel /2 public class Book { private String isbn, title; private Category classifiedin; private ListOfObject writtenby; } public Buch (String isbn) { this.isbn = isbn; writtenby = new ListOfObject (); } VL Objektrelationale Datenbanken 4 23 4.3. SQL:1999 SQL:1999 aktuelle Version des SQL-Standards der ISO u.a. Unterstützung objektrelationaler Konzepte Verbindung von Konzepten objektorientierter Datenbankmodelle mit SQL nutzerdefinierte Datentypen, Vererbung/Spezialisierung, Methoden bisher nur teilweise umgesetzt: IBM DB2, Oracle9i, PostgreSQL, (jeweils mit proprietären Varianten) VL Objektrelationale Datenbanken 4 24
SQL:1999: Neue Datentypen BLOB, CLOB: Datentypen für große Binär-/Zeichenkettenobjekte (binary/character large objects) Boolean: boolesche Werte TRUE, FALSE, UNKNOWN Array: Kollektionstyp für mehrwertige Attribute REF-Typen: zur eindeutigen Identifikation von Tupeln (OID) sowie zur Navigation über Pfadausdrücke ROW-Typen: Typkonstruktor für strukturierte Attribute nutzerdefinierte Datentypen: Konstruktion neuer Typen VL Objektrelationale Datenbanken 4 25 BLOB und CLOB Speicherung großer Zeichenketten/Binärfolgen Bilder, Audio-/Videodaten, XML-Dokumente, Angabe der max. Größe erforderlich Grenzen sind systemspezifisch Beispiel create table Professoren ( Foto blob(100k)); erfordern spezielle Behandlung beim Zugriff Einschränkungen: kein Primär-/Fremdschlüssel, keine Gruppierung/Sortierung VL Objektrelationale Datenbanken 4 26 Kollektionsdatentypen Datentypen zur Speicherung mehrerer Werte für ein Attribut array-typkonstruktor Elementdatentyp max. Kardinalität k Notation datentyp array[k] keine Schachtelung möglich! unterstützte Operationen: Indexzugriff (1 k), Länge VL Objektrelationale Datenbanken 4 27
Kollektionsdatentypen: Beispiel create table Bcher ( titel varchar(100), isbn varchar(10), preis decimal(5,2), abstract clob(10k), autoren varchar(20) array[5] ); VL Objektrelationale Datenbanken 4 28 Anonyme ROW-Typen Typkonstruktor für strukturierte Attribute anonym kein expliziter Typname Notation row (fname 1, ftyp 1,, fname n, ftyp n ) Beispiel: create table Kunden ( name varchar(50), adresse row (strasse varchar(30), plz char(5), ort varchar(30)) ); VL Objektrelationale Datenbanken 4 29 Nutzerdefinierte Datentypen (UDT) Definition abstrakter Datentypen Unterscheidung in Distinct-Typen: Definition eines Datentyps direkt als Umbenennung eines Basisdatentyps Strukturierte Typen: Typkonstruktor für benannte strukturierte Datentypen VL Objektrelationale Datenbanken 4 30
Distinct-Typen Umbennung existierender Typen zur Einführung von Typ-Inkompatibilitäten nur für Attribute, Parameter, Variablen Beispiel: create type meter as integer final; create type quadratmeter as integer final; kein Vergleich/Zuweisung von Attributen verschiedener Distinct-Typen create table Grundstck ( laenge meter, breite meter, flaeche quadratmeter); breite und flaeche sind inkompatibel VL Objektrelationale Datenbanken 4 31 Strukturierte Typen Typkonstruktor zur Definition abstrakter Datentyp verwendbar für Attribute, Parameter, Variablen, Tabellen Beispiele: create type Adresse as ( strasse varchar(30), plz char(5), ort varchar(30) ) not final create type Kunde as ( knr int, name varchar(30), lieferadresse Adresse ) not final VL Objektrelationale Datenbanken 4 32 Subtyping Definition von Untertypen als Erweiterung existierender Datentypen (UDTs) Notation: untertyp under supertyp keine Mehrfachvererbung zulässig bei Typdefinition not final: Subtyping zulässig final: keine Bildung von Untertypen Beispiel: create type Person as ( ) not final create type Kunde under Person as ( ) not final VL Objektrelationale Datenbanken 4 33
Strukturierte Typen: Methoden SQL-Funktionen/Prozeduren, die UDT zugeordnet sind Besonderheiten: impliziter SELF-Parameter (vergleichbar this in C++, Java) getrennte Spezifikation von Signatur und Implementierung automatisch generierte set/get-methoden für alle Attribute eines Typs VL Objektrelationale Datenbanken 4 34 Methoden: Beispiel create type Kunde as ( ) not final method gesamt_bestellsumme() returns decimal(9,2)) create method gesamt_bestellsumme() for Kunde begin end VL Objektrelationale Datenbanken 4 35 Strukturierte Typen für Tabellen Definition von Tabellen auf Basis strukturierter Typen Objektrelation Attribute werden Spalten zusätzliche Spalte für OID (benötigt für REF-Typen) Beispiel: create table Kunden of Kunde ( ref is oid user generated) Kunde ist Tabellentyp Adresse ist Spaltentyp VL Objektrelationale Datenbanken 4 36
Objektidentifikatoren Bildung von Objektidentifikatoren für Tupel in Objektrelationen (unveränderliche IDs) ref is user generated nutzerdefinierte/-vergebene OID ref is system generated systemgenerierte OID ref from (Attributliste) OID wird abgeleitet von anderen Attributen (z.b. Primärschlüssel) VL Objektrelationale Datenbanken 4 37 REF-Typ Typ für Referenzen auf Instanzen eines strukturierten Datentyps (Tupel einer Objektrelation) Notation: ref(strukturierter-typ) [ scope gltigkeitsbereich ] Gültigkeitsbereich: vorgegebene Tabelle alle Tabellen VL Objektrelationale Datenbanken 4 38 REF-Typ: Beispiel create type Person as ( personalnr integer, name varchar(30), vorgesetzter ref(person)) create table Angestellte of Person ( ) create table Abteilungen ( name varchar(10), leiter ref(person) scope(angestellte), mitarbeiter ref(person) scope(angestellte) array[10] ) VL Objektrelationale Datenbanken 4 39
Typisierte Sichten Sicht auf strukturierte Typen Unterschiede zu Tupelsichten Zeilen über OID-Spalte referenzierbar Methodenaufrufe möglich typisierte Sicht als Subsicht einer anderen typisierten Sicht definierbar typisierte Sicht ohne Supersicht: Wurzelsicht Definition: create view sichtname of typname [( oid-generierung, spalten-option )] as sicht-anfrage VL Objektrelationale Datenbanken 4 40 Typisierte Sichten: Definition OID-Generierung: ref is oid Spaltenoption: spalte with options scope tabelle Einschränkungen für Sichtanfrage: Typverträglichkeit mit Sichttyp bei benutzerdefinierter OID-Generierung: Aufruf des Referenzkonstruktors sichttyp-name(ref-wert) als erster Parameter der Projektionsliste from-klausel mit genau einer Tabelle/Sicht; bei typisierter Tabelle/Sicht nur mit flacher Extension (only) keine Verbund- oder Gruppierungsoperationen VL Objektrelationale Datenbanken 4 41 Typisierte Sichten: Beispiel create type Person as ( personalnr integer, name varchar(30), gehalt decimal(8,2), vorgesetzter ref(person)) not final ref using integer; create view ReicheMitarbeiter of Person ( ref is oid user generated, vorgesetzter with options scope ReicheMitarbeiter ) as select ReicheMitarbeiter(personalnr), personalnr, name, gehalt, ReicheMitarbeiter(vorgesetzter->personalnr) from only (Angestellte) where gehalt > 5000; VL Objektrelationale Datenbanken 4 42
Subsichten Sicht mit genau einer direkten Supersicht erbt OID-Spalte und Spaltenoptionen Tabelle der Sichtanfrage muss Subtabelle der Supersicht sein Extension der Subsicht ist Teilmenge der Extension der Supersicht Definition create view sichtname of typname under supersichtname [( spalten-optionen )] as sicht-anfrage VL Objektrelationale Datenbanken 4 43 4.4. Objektrelationale Typen in Oracle9i Unterstützung objektrelationaler Konzepte in Oracle seit Version 8 Abweichungen vom SQL-Standard proprietäre Erweiterungen Methodenimplementierung in PL/SQL Konzepte: UDTs, REF, Kollektionen, Methoden, Subtyping VL Objektrelationale Datenbanken 4 44 Oracle: Typdefinition Definition von Datentypen für Attribute, Variablen und Tabellen (row objects) Notation: create type name as object ( ) VL Objektrelationale Datenbanken 4 45
Oracle: Objekttabellen Tabellen mit Objekten (Instanzen eines UDT) als Tupel Beispiel: create table Kunden of Kunde; Interpretation Tabelle mit einer Spalte von Objekten Tabelle mit (mehreren) Spalten, die Attributen des UDT entsprechen VL Objektrelationale Datenbanken 4 46 Oracle: Objekttabellen (II) Objektidentifikatoren object identifier is primary key: Nutzung des Primärschlüssels as OID object identifier is system generated: systemgenerierte OID VL Objektrelationale Datenbanken 4 47 Oracle: Kollektionen Repräsentation von mehrwertigen Attributen und 1:n-Beziehungen Typkonstruktoren varray: geordnete Menge von Elementen nested table: ungeordnete Menge ohne Größenbeschränkung VL Objektrelationale Datenbanken 4 48
Oracle: VARRAY geordnete Menge von Elementen über Index adressierbar max. Größe bei Definition spezifizieren Speicherung als Binärobjekt (BLOB) Beispiel: create type AutorenListe as varray(10) of varchar(50); create table Buecher ( autoren AutorenListe ); VL Objektrelationale Datenbanken 4 49 Oracle: Nested Tables ungeordnete Menge von Elementen ohne Größenbeschränkung Speicherung der Objekte in separater Tabelle intern: NESTED_TABLE_ID für Verweis von Elterntabelle auf nested table Beispiel: create type Person as object ( ); create type Angestellte as table of Person; create table Abteilungen ( name varchar(10), mitarbeiter Angestellte ) nested table mitarbeiter store as abt_mitarb_tbl; VL Objektrelationale Datenbanken 4 50 Oracle: REF-Typen Implementierung logischer Zeiger über OIDs Ersatz für Fremdschlüssel vereinfachte Navigation (Pfadausdrücke) Typkonstruktor address_ref ref address_type Angabe des Gültigkeitsbereichs scope is address_table VL Objektrelationale Datenbanken 4 51
Oracle: Methoden Funktionen/Prozeduren, die zu einem Objekttyp zugeordnet sind Implementierung in PL/SQL oder als externe Methoden (C, Java) self als impliziter Parameter impliziter Konstruktor zur Erzeugung von Objekten Beispiel: create type Kunde as object ( member function gesamt_bestellsumme() return number(9,2)) ); VL Objektrelationale Datenbanken 4 52 Oracle: Map- und Order-Methoden Spezifikation von Vergleichs- und Ordnungsfunktionen für Objekttypen Nutzung im Rahmen von Anfragen (Gruppierung, Sortierung) MAP-Funktionen: Vergleich durch Abbildung auf Basisdatentypen (date, varchar, number, ) create type Rechteck as object ( laenge integer, breite integer, map member function flaeche return integer ); VL Objektrelationale Datenbanken 4 53 Oracle: Map- und Order-Methoden /2 ORDER-Funktionen: direkte Vergleiche von Objekten create type Kunde as object ( order member function vergleiche (k Kunde) return integer ); VL Objektrelationale Datenbanken 4 54
Oracle: Subtyping Definition von Objekttypen durch Ableitung von vorhandenen Objekttypen Hinzufügen von Attributen und Methoden Überschreiben von Methoden final/not final Beispiel: create type Student under Person ( ); Typersetzbarkeit: Tabelle eines gegebenen Objekttyps kann auch Instanzen eines Subtyps aufnehmen VL Objektrelationale Datenbanken 4 55 4.5. XML Schema: Überblick Datendefinition für XML (valide Dokumente): bisher nur DTD Grammatik zur Festlegung der zulässigen Elemente und deren Schachtelung schwache Typisierung, begrenzte Ausdrucksmöglichkeiten dokument-orientiert Alternative: XML Schema Definition einer Klasse von XML-Dokumenten (Dokumentinstanzen) Schemadefinitionssprache nicht auf Dokumente beschränkt (vgl. XML-DBS) weitergehende Modellierungsmöglichkeiten daten-orientiert VL Objektrelationale Datenbanken 4 56 XML Schema: Konzepte Namensraum (Präfix): xsd Schemaelement: bestehend aus Subelementen Elementen: element komplexen Typdefinitionen: complextype Komposition aus anderen Elementen und Attributen einfachen Typdefinitionen: simpletype Basistypen Einschränkung von Basistypen Kommentaren VL Objektrelationale Datenbanken 4 57
Beispieldokument <?xml version="1.0"?> <bestellung datum="2002-11-18" > <lieferadresse land="d" > <name>institut fuer Informatik</name> <ort>halle/s.</ort> <strasse>von-seckendorff-platz 1</strasse> <plz>06120</plz> </lieferadresse> <positionen> <position prodnr="mon-123-a" > <prodname>17-zoll-tft Singsang</prodName> <menge>1</menge> <preis>599</preis> </position> </positionen> </bestellung> VL Objektrelationale Datenbanken 4 58 Schemadefinition <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name=bestellung type="bestelltyp"/> <xsd:complextype name="bestelltyp"> <xsd:sequence> <xsd:element name="lieferadresse" type="adresstyp" /> <xsd:element name="positionen" type="positionentyp" /> </xsd:sequence> <xsd:attribute name="datum" type="xsd:date" /> </xsd:complextype> </xsd:schema> VL Objektrelationale Datenbanken 4 59 Deklaration von Elementen Definition von Elementen und Attributen, die im Dokument auftreten können typisierte Elemente und Attribute Notation: <xsd:element name="element-name" type="typ-name" /> weitere Attribute für xsd:element minoccurs/maxoccurs: Beschränkung der min. bzw. max. Häufigkeit des Auftretens des Elementes use: required, optional default: Default-Wert VL Objektrelationale Datenbanken 4 60
Einfache Typen Builtin-Typen: string, integer, double, date, anyuri, abgeleitete Typen durch Restriktion der Builtin-Typen erlauben keine Attribute Bereichseinschränkung Muster Aufzählung von Werten (enumeration) Listen (list), Vereinigung verschiedener Wertebereiche (union) VL Objektrelationale Datenbanken 4 61 Einfache Typen: Bereichseinschränkung Einschränkung des Wertebereichs (1 100) <xsd:simpletype name="mengentyp"> <xsd:restriction base="xsd:integer"> <xsd:mininclusive value="1" /> <xsd:maxinclusive value="100" /> </xsd:restriction> </xsd:simpletype> VL Objektrelationale Datenbanken 4 62 Einfache Typen: Muster Einschränkung des Wertebereichs durch Angabe eines Musters (regulärer Ausdruck) <xsd:simpletype name="prodnrtyp"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[a-z]{3}-\d{3}-[a-z]{1}" /> </xsd:restriction> </xsd:simpletype> VL Objektrelationale Datenbanken 4 63
Komplexe Typen Typkonstruktor für Elemente mit Attributen und Subelementen Bildung komplexer Typen auf Basis einfacher Typen Mixed Content (Sequenz von Subelementen) Auswahl, Gruppierung VL Objektrelationale Datenbanken 4 64 Komplexe Typen: Beispiel Typdefinition <xsd:complextype name="intpreistyp"> <xsd:simplecontent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="waehrung" type="xsd:string"/> </xsd:extension> </xsd:simplecontent> </xsd:complextype> Anwendung (Dokumentinstanz) <preis waehrung="euro">899</preis> VL Objektrelationale Datenbanken 4 65 Komplexe Typen: Beispiel /2 <xsd:complextype name="positionentyp"> <xsd:sequence> <xsd:element name="position" minoccurs="1" maxoccurs="unbounded"> <xsd:complextype> <xsd:sequence> <xsd:element name="prodname" type="xsd:string"/> <xsd:element name="menge" type="mengentyp"/> <xsd:element name="preis" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="prodnr" type="prodnrtyp" use="required"/> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> VL Objektrelationale Datenbanken 4 66