Polymorphe Konsistenzbedingungen (1) Bedingung 1: Schlüsselbedingung. Mit der auf Skalierbarkeit zugeschnittenen Konstruktion der Extension geht ein key-Konstruktor einher, mit dem sich innerhalb einer Extension eine Schlüsseleigenschaft für strukturierte Objekte durchsetzen läßt. key ::= Extent (2sel2Literaltyp) Objekttyp Ziel: Bessere Handhabbarkeit der Eindeutigkeit von Tupeln in Extension dadurch dass zur Feststellung der Eindeutigkeit die Kenntnis der Werte unter ausgewählten Attributen genügt.
Polymorphe Konsistenzbedingungen (2) Schlüsselbedingungen können durch Angabe einer key-Spezifikation formuliert werden: class Ticket (key ticketNr) { attribute string ticketNr, Kunde inhaber; } Beachte: Objekt-Identifikator ist separat von ticketNr-Wert (letzterer kann sich ändern, ersterer nicht).
Polymorphe Konsistenzbedingungen (3) Bedingung 2: Erlaubt referenzielle Konsistenz zwischen zwei Objekttypen, indem man ein ref-Attribut als relationship spezifiziert. relationship ::= Objekttyp Objekttyp Zweiseitige referentielle Konsistenz zwischen zwei Objekttypen erhält man, indem man in beiden Typen dem relationship-Konstrukt eine inverse-Angabe hinzu fügt, die das relationship-Konstrukt in der jeweils anderen Klasse benennt. Nur zweistellige Beziehungen können spezifiziert werden.
Polymorphe Konsistenzbedingungen (4) Semantik ist die der Mengeninklusion. Beispiel: 1:n-Beziehung zwischen Klassen Tickets einerseits sowie Kunde und Buchung andererseits: class Ticket { attribute string ticketNr; relationship Kunde inhaber inverse Kunde::tickets; relationship Set<Buchung> buchungen inverse Buchung::ticket; void buche (in Flug flug, in date datum, in string platzCode); void storniere (in string flugNr, in date datum);};} }