Caché

You’ll make breakthroughs
in
data management 
and rapid development

Datenmodellierung – relationaler oder Objektzugriff

Zu den ersten Schritten im Designprozess für eine neue Applikation zählt für den Entwickler die Frage der geeigneten Datenmodellierung. In der Regel ist dies eine Entscheidung zwischen dem traditionellen Modell relationaler Tabellen und dem moderneren Ansatz der Modellierung als Objekte. Vor dem Hintergrund komplexer Datenoperationen halten viele Entwickler die Modellierung mit Objekten für den effizienteren Ansatz.

Bei der Portierung einer bestehenden Anwendung nach Caché geht es im ersten Schritt natürlich darum, das vorhandene Datenmodell zu migrieren. Hierfür stehen einfache Verfahren zur Verfügung, mit denen verschiedenste relationale oder objektorientierte Darstellungen und Daten importiert werden können. Als Ergebnis erhält man eine Datendefinition, die den Standards von Caché entspricht, und Daten, auf die dann sofort gleichzeitig als Objekte, relationale Tabellen und multidimensionale Arrays zugegriffen werden kann.

Caché unterstützt sowohl SQL- als auch Objektzugriffe und es gibt gute Anwendungsfälle für beide. Um zu verstehen, wann sich welcher Zugriff anbietet und warum sich Entwickler heutzutage vorzugsweise für die Objektmodellierung entscheiden, ist es sinnvoll, sich kurz mit der Entstehungsgeschichte beider Methoden auseinanderzusetzen.

Caché supports both SQL and object data access

Die relationale Technologie

In den Anfangstagen der EDV war die Datenverarbeitung Aufgabe riesiger Mainframes und der Zugriff auf Daten war üblicherweise professionellen Informatikern vorbehalten. Die Datenbanken waren häufig individuelle Eigenentwicklungen und mit den Daten effektiv umzugehen verlangte profunde Kenntnisse der gesamten Datenbankstruktur. Anwender mit Bedarf an speziellen Auswertungen waren auf die Unterstützung einer überlasteten DV-Abteilung angewiesen und erhielten ihre Reports deshalb selten rechtzeitig, um Entscheidungen darauf zu stützen.

Relationale Technologie entstand ursprünglich schon in den 1970er Jahren auf Mainframes, blieb aber weitgehend im Forschungsstadium, bis sie in den 1980ern auf den Minicomputern auftauchte. Mit dem Siegeszug des PC begann dann ein mehr benutzerzentriertes Zeitalter in der EDV mit benutzerfreundlicheren Auswertungswerkzeugen auf der Basis von SQL – der Abfragesprache, die mit der relationalen Technologie Einzug gehalten hatte. Von nun an konnten Benutzer ihre eigenen Listen und Ad-hoc-Abfragen aus der Datenbank erzeugen und relationale Datenbanken erlebten einen regelrechten Boom.

SQL erlaubt die Verwendung einer konsistenten Sprache, um Abfragen auf ein großes Spektrum an Daten auszuführen. Dabei betrachtet SQL alle Daten in einem sehr einfachen, standardisierten Format: als zweidimensionale Tabelle mit Zeilen und Spalten. Dieses simple Datenmodell befriedigte die Bedürfnisse der Anwender nach einfachen Auswertungen sehr elegant, hatte aber auch einen stolzen Preis. Denn es liegt in der Natur der Sache, dass sich komplexe Datenstrukturen der realen Welt nicht ganz so einfach in Zeilen und Spalten abbilden lassen. So sind Daten häufig auf viele Tabellen verteilt, die erst wieder aufwendig verbunden werden müssen, um selbst einfachste Aufgaben zu lösen. Genau hierin liegen die beiden Hauptprobleme:

a) Das Schreiben von Abfragen (Queries) wird zu einer schwierigen und fehlerträchtigen Aufgabe, da häufig viele Tabellen miteinander verbunden werden müssen (oftmals durch komplexe „Outer Joins“).

b) Relationale Datenbanken mit komplexen Daten stellen enorme Ansprüche an die Verarbeitungskapazität.

SQL ist heute der Standard für Datenbank-Interoperabilität und Auswertungswerkzeuge. Gerade weil die Ursprünge von SQL in der relationalen Datenbanktechnologie liegen, ist es wichtig zu verstehen, dass es nicht zwangsläufig auf sie beschränkt ist. So unterstützt Caché Standard-SQL sowohl bei Queries als auch bei Updates, während es zugleich auf einer wesentlich leistungsfähigeren multidimensionalen Datenbanktechnologie gründet, und implementiert zudem SQL-Erweiterungen zur Unterstützung von Objekten.

Objekttechnologie und Objektdatenbanken

Objektprogrammierung und Objektdatenbanken sind das praktische Ergebnis wissenschaftlicher Arbeit über die Abläufe menschlichen Denkens. Untersuchungen haben gezeigt, dass unser Gehirn in der Lage ist, äußerst komplexe und unterschiedliche Daten zu speichern und diese dennoch mit gängigen Methoden zu verarbeiten. Um diese Prozesse zu simulieren, mussten Programme dazu gebracht werden, mit extremer Komplexität umzugehen und diese Komplexität gleichzeitig zu verbergen – so entstand einfachere, allgemeinere und verständlichere Logik mit anpassbarer, wiederverwendbarer Funktionalität. Leicht einzusehen, dass diese Charakteristika auch auf heutige Top-Applikationen zutreffen, und eine Technologie, die Entwickler in einer natürlicheren Weise arbeiten lässt, einer, die eher dem menschlichen Denken entspricht, ein großer Vorteil ist.

Objekt- vs. relationaler Zugriff

InnovationArtIn der Objekttechnologie ist die ganze Komplexität der Daten im Objekt eingebunden und der Zugriff auf die Daten erfolgt über ein einfaches, einheitliches Interface. Relationale Technologie verfügt zwar ebenfalls über ein einfaches, einheitliches Interface, bietet aber keinerlei Unterstützung für die Komplexität der Daten der realen Welt. Die Daten sind über unzählige simple Tabellen verteilt und es liegt stets in der Verantwortung des Anwenders oder Programmierers, mit dieser Komplexität umzugehen.

Weil Objekte komplexe Daten einfach abbilden können, ist Objektprogrammierung die beste Wahl, um komplexe Applikationen zu entwickeln. Aus den gleichen Gründen ist der Objektzugriff auf die Datenbank am besten geeignet, um Daten hinzuzufügen oder zu aktualisieren (also für die Transaktionsverarbeitung).

Caché ergänzt den Objektzugriff um ein objektorientiertes SQL. SQL ist eine mächtige Datenbankabfragesprache und wird von den meisten Auswertungswerkzeugen verwendet. Aus unserer Sicht ist es auch genau das, wofür sich SQL am besten eignet – für Abfragen und Auswertungen – und nicht so sehr für die Transaktionsverarbeitung (hier ist es schwerfällig und meistens ineffizient). Die Objekterweiterungen in Caché SQL eliminieren die umständliche Join-Syntax weitgehend und erleichtern so die Verwendung von SQL ganz erheblich.

Das Caché Objektdatenmodell und Objektprogramming – ein Überblick

Das Objektmodell von Caché basiert auf dem Standard der ODMG (Object Database Management Group) und unterstützt zahlreiche fortschrittliche Konzepte bis hin zur Mehrfachvererbung.

Die Objekttechnologie ist der Versuch, den menschlichen Umgang mit Informationen nachzubilden. Anders als bei relationalen Tabellen bilden bei Objekten Daten und Code eine Einheit. So kann beispielsweise ein Objekt namens „Rechnung“ über Daten wie eine Rechnungsnummer und den Betrag und zugleich über eine Methode wie Print zum Drucken der Rechnung verfügen. Ein Objekt lässt sich als ein Paket verstehen, das aus sämtlichen Datenwerten (den Eigenschaften) und einer Kopie des gesamten dazugehörigen Codes (den Methoden) des Objektes besteht. Die Methoden eines Objekts kommunizieren mit anderen Objekten, indem sie Nachrichten versenden. Um den Platzbedarf zu minimieren, nutzen Objekte der gleichen Klasse gewöhnlich einen gemeinsamen Code (es wäre ja auch unsinnig, für jedes Rechnungsobjekt tatsächlich eine Kopie der identischen Methode anzulegen). In Caché ist es zudem so, dass Methodenaufrufe intern wenn möglich als Funktionsaufrufe ausgeführt werden, um so den Overhead eines Nachrichtenaustauschs zu vermeiden. Diese Implementierungstechniken bleiben jedoch vor dem Programmierer stets verborgen; es ist also völlig korrekt, sich Methodenaufrufe grundsätzlich als das Senden einer Nachricht vorzustellen.

In einer Klasse definiert der Entwickler die Struktur und den Code von Objekten. Klassen enthalten die allgemeine Beschreibung der Datenart (ihren „Typ“) und seiner Speicherung sowie den gesamten Code, nicht aber die Daten selbst. Ein Objekt ist ein konkretes Exemplar („eine Instanz“) einer Klasse. So ist beispielsweise die „Rechnung Nr. 123456“ ein Objekt der Klasse „Rechnung“.

Die Objekttechnologie fördert zudem eine natürliche Sicht auf Daten, indem sie Eigenschaften nicht auf einfache, computerzentrierte Datentypen beschränkt. Objekte können beispielsweise andere Objekte oder Referenzen auf weitere Objekte enthalten, was einer funktionellen, sinnvollen Datenmodellierung sehr entgegenkommt. Als einfaches Beispiel dafür soll ein Objekt „Kunde“ dienen:


Name: 
Die Datenspeicherung erfolgt über den einfachen Datentyp “Name”.
Kundennummer:
Hier könnte beispielsweise ein einfacher Datentyp wie ein Integer oder auch ein komplexerer, vom Entwickler definierter Datentyp wie z.Bsp. eine neunstellige Ziffernfolge nach dem Muster NNN-NN-NNNN verwendet werden.
Addresse:
Dies ist ein  Beispiel dafür, wie Objekte eingebettet werden können. Hier ist die Adresse ein eingebettetes Objekt mit den Eigenschaften “Straße” und “Ort”.
3_DATA-ACCESS-B-New_sm
Rechnungen:
Ein Kunde hat eine Anzahl von Rechnungen, die selbst wieder als eigenständige, komplexe Objekte unter ihrer jeweiligen Datenbank-ID gespeichert werden. In diesem Beispiel besteht eine 1:N-Relation zwischen “Kunde” und “Rechnung” (ein Kunde hat viele Rechnungen), die über eine Eltern-Kind-Beziehung abgebildet wird (“Rechnungen” können nicht ohne “Kunden” existieren, aber “Kunden” ohne “Rechnungen”). Eine Collection eingebetteter Objekte wäre ebenso möglich.
Verkäufer:
Diese Eigenschaft ist eine N:1-Beziehung zwischen den Objekten “Kunde” und “Verkäufer” (viele Kunden werden von einem Verkäufter betreut). Im Unterschied zu einem eingebetteten Objekt hat das verknüpfte Objekt seine eigene ID in der Datenbank, unter der es separat gespeichert wird. Diese ID ermöglicht den direkten Zugriff auf ein Objekt “Verkäufer”, ohne den Umweg über ein Objekt “Kunde”. Caché nutzt für den Zugriff auf eingebettete oder verknüpfte Objekte die gleiche Syntax (eine Punkt-Syntax wie Kunde.Adresse.Straße oder Kunde.Verkäufter.Name).

Schlüsselbegriffe der Objektprogrammierung

Vererbung ist die Möglichkeit, eine Klasse von Objekten von einer anderen abzuleiten. Die abgeleitete neue Klasse (eine Unterklasse) verfügt über alle Eigenschaften und Methoden ihrer Ursprungsklasse, kann darüber hinaus aber auch zusätzliche eigene Eigenschaften und Methoden enthalten. Objekte einer Unterklasse haben eine „ist ein(e)“-Beziehung zu ihrer Oberklasse. Weil z. B. ein Hund ein Säugetier ist, ist es sinnvoll, die Klasse „Hund“ als Unterklasse der Klasse „Säugetier“ zu definieren, so dass sie alle Eigenschaften und Methoden von dieser erbt. Ein Beispiel für eine zusätzliche Eigenschaft in der Unterklasse wäre hier etwa die Hundemarkennummer. In einer Unterklasse können außerdem ererbte Definitionen überschrieben werden – so kann sich beispielsweise die Methode „Drucken“ einer Unterklasse von „Rechnungen“ von der Methode „Drucken“ der Oberklasse „Rechnungen“ unterscheiden. Vererbung sorgt für die Wiederverwendung von Code und macht es leichter, durchgängige Verbesserungen einzuführen.

Mehrfachvererbung bedeutet, dass eine Unterklasse von mehr als nur einer Oberklasse abgeleitet sein kann. Ein Hund „ist ein“ Säugetier und „ist ein“ Haustier. Unsere Klasse „Hund“ kann demnach die Attribute der beiden Oberklassen „Säugetier“ und „Haustier“ erben.

Unter Kapselung versteht man, dass Applikationen Objekte als eine Art „Black Box“ betrachten können. Öffentliche Eigenschaften und Methoden einer Klasse sind allgemein zugänglich, private Eigenschaften und Methoden stehen dagegen nur innerhalb der eigenen Objektklasse zur Verfügung. Eine Anwendung muss daher nicht wissen, wie ein Objekt intern funktioniert – es genügt, die öffentlichen Eigenschaften und Methoden zu verwenden. Durch die Kapselung können Programmierer die internen Abläufe in Objekten verbessern, ohne dass der Rest der Anwendung davon betroffen ist.

Als Polymorphismus bezeichnet man die Tatsache, dass Methoden unterschiedlicher Klassen sich ein gemeinsames Interface teilen können, auch wenn die zugrunde liegende Implementierung ganz unterschiedlich ist. Betrachten wir beispielsweise eine Applikation, die verschiedene Objektklassen wie „Brief“, „Adressaufkleber“ und „Namensschild“ nutzt. Alle drei Klassen beinhalten vielleicht eine Methode „Drucken“. Die Applikation selbst benötigt nun keine speziellen Informationen, mit welchem Objekt sie es zu tun hat – sie kann einfach die Methode „Drucken“ des gerade aktuellen Objekts aufrufend.

Vorteile mit Caché

Caché ist vollständig objektorientiert und bietet Entwicklern von hochperformanten, transaktionsverarbeitenden Applikationen den vollen Funktionsumfang der Objekttechnologie.

Intuitive Datenmodellierung: Dank der Objekttechnologie können Entwickler mit Informationen – auch der komplexesten Art – in einfacher und realitätsnaher Weise umgehen und so den Prozess der Anwendungsentwicklung beschleunigen.

Schnelle Anwendungsentwicklung: Objektorientierte Konzepte wie Kapselung, Vererbung und Polymorphismus ermöglichen es, Klassen wiederzuverwenden, ihren Verwendnungszweck neu zu definieren und in verschiedenen Anwendungen einzusetzen, so dass die Entwickler ihre Arbeit über viele Projekte effizient nutzen können.

Was spricht für Objekte zur Datenmodellierung?

Geht es um neue Datenbankapplikationen, entscheiden sich Entwickler aus zwei Gründen für Objekttechnologie. Mit ihr lassen sich komplexe Anwendungen schneller entwickeln und in der Folge leichter pflegen. Denn Objekttechnologie bietet viele Vorteile:

  • Objekte unterstützen komplexere Datenstrukturen, die zur Abbildung von Daten der realen Welt besser geeignet sind.
  • Die Programmierung fällt leichter, weil der Entwicklungsprozess und die Datenmanipulation einfacher zu verfolgen sind.
  • Standardklassen lassen sich problemlos durch individuelle Klassenversionen ersetzen. Dies erleichtert die Entwicklung individueller Applikationen.
  • Die Kapselung erlaubt es Programmierern, die internen Abläufe einzelner Objekte zu optimieren, ohne dass sich dies auf den Rest der Anwendung auswirkt.
  • Objekte fördern auf einfache Weise die Integration unterschiedlicher Technologien und Applikationen.
  • Objekttechnologie harmoniert bestens mit GUI-Oberflächen.
  • Zahlreiche neue Entwicklungswerkzeuge setzen Objekttechnologie voraus.
  • Objekte gewährleisten eine saubere Trennung zwischen der Benutzeroberfläche und der eigentlichen Applikation. So lässt sich selbst bei der Einführung einer neuen Front-End-Technologie (selbst einer heute noch nicht absehbaren Technologie) der größte Teil des Codes weiterverwenden.

Speicherung von Objekten…

Obwohl immer mehr Applikationen mit objektorientierten Programmiersprachen entwickelt werden, wird immer noch viel zu häufig der Versuch unternommen, Objektdaten in flache, relationale Tabellen zu zwängen. Dabei gehen die wichtigsten Vorteile der Objekttechnologie verloren.

Caché ist mit seinem multidimensionalen Datenmodell in besonderer Weise zur Speicherung komplexer Objektdaten geeignet. Das Resultat: schnellerer Datenzugriff und schnellere Programmierung.

…plus relationaler Zugriff

Natürlich nutzen viele Werkzeuge (z. B. Listengeneratoren) für den Datenzugriff SQL und keine Objekttechnologie.

Ein Alleinstellungsmerkmal von Caché ist, dass für jede im System definierte Objektklasse automatisch auch die volle Unterstützung für den SQL-Zugriff besteht. SQL-Werkzeuge können deshalb ohne zusätzlichen Aufwand sofort mit Caché-Daten arbeiten und profitieren zusätzlich von der außergewöhnlichen Performance des multidimensionalen Datenservers von Caché.

Der umgekehrte Weg ist ebenfalls möglich: Nach dem Import der DDL-Definitionen einer relationalen Datenbank generiert Caché automatisch eine passende Klassenhierarchie, so dass auch hier Objekt und SQL-Zugriff gleichermaßen möglich werden. Die Unified Data Architecture von Caché hält beide Repräsentationen synchron – es gibt nur eine einzige Datenbeschreibung, um die sich der Entwickler kümmern muss.

Not Only SQL

Caché bietet darüber hinaus auch den direkten Zugriff auf seine multidimensionale Datenstruktur. Das macht Caché in den Fällen, wo es von Vorteil ist, quasi zu einer NoSQL- oder “Not only SQL”-Datenbank.