Betriebswirtschaftslehre
Was steckt eigentlich hinter einem Online-Shop? Zum einen eine ansprechende Website und zum anderen ein Lager mit Produkten. Letztere lassen sich allerdings nur dann in großem Stil verkaufen, wenn der Shop auch über eine relationale Datenbank verfügt. Sie ist ein wichtiges Kernstück eines solchen Shops. Denn sie gewährleistet letztendlich, dass der Kunde genau das Produkt erhält, das er auch online bestell hat. Ein Wirtschaftsinformatiker zeigt am Beispiel eines Online-Shops auf, wie eine solche Datenbank funktioniert und was sie zu leisten im Stande ist.
Von Professor Dr. Nikolai Preiß, Berufsakademie Stuttgart
In vielen Lebensbereichen ist die elektronische Datenverarbeitung ein unverzichtbarer Bestandteil unseres Alltags geworden. Egal ob die Ergebnislisten der olympischen Wettkämpfe zusammengestellt werden oder ob es um die Bestellungen in einem Online-Shop geht, überall sind Computerprogramme im Einsatz, die zuverlässig, schnell und korrekt die erforderlichen Informationen verarbeiten und bereitstellen.
In den meisten Fällen arbeiten solche Computerprogramme mit so genannten relationalen Datenbanken, in denen die Informationen in Form von strukturierten Datensätzen sehr effizient verwaltet werden können. Dabei beschreibt ein strukturierter Datensatz jeweils ein bestimmtes Informationsobjekt, so kann beispielsweise ein Artikel-Datensatz durch die ArtikelNr, den ArtikelName und den ArtikelPreis beschrieben werden.
Die Speicherung, Verarbeitung und Ausgabe dieser strukturierten Datensätze erfolgt in einer für den Menschen sehr anschaulichen und eingängigen Weise - nämlich in Form von Tabellen. Dabei bilden zum Beispiel ArtikelNr, ArtikelName und ArtikelPreis die Spaltenüberschriften der Tabelle Artikel, während die einzelnen Artikel-Datensätze als Zeilen geführt werden (siehe Abb.1).

Da die Tabellen in der Praxis sehr umfangreich werden können (mehrere Millionen Datensätze), sind für deren Verarbeitung spezielle Dienstprogramme erforderlich, die man relationale Datenbanksysteme nennt. Relational deshalb, weil Tabellen in der Fachsprache als Relationen bezeichnet werden.
Bekannte Vertreter relationaler Datenbanksysteme sind Oracle, DB2, SQL-Server und auch MySQL, ein weit verbreitetes frei verfügbares Open-Source-Produkt, das der Leser in der hier beschriebenen Form für seine eigenen Zwecke einsetzen kann, etwa für die Verwaltung von Vereinsmitgliedern.
Für das Arbeiten mit relationalen Datenbanksystemen sind insbesondere zwei zentrale Fragestellungen zu klären:
Es ist festzulegen, welche Tabellen mit welchen Strukturen für den jeweils vorliegenden Einsatzbereich benötigt werden, zum Beispiel für die Abwicklung der Bestellungen im Online-Shop. Man nennt diesen Arbeitsschritt Datenstrukturierung.
Man benötigt eine so genannte Datenbanksprache, mit der man dem Datenbanksystem mitteilen kann, welche Tabellen man für seinen Einsatzbereich benötigt und welche Daten dort eingefügt, geändert, ausgelesen und wieder gelöscht werden sollen.
Ein denkbar schlechter Ansatz für unseren Online-Shop wäre, die einzelnen Bestelldatensätze mit BestellNr, BestellDatum, ArtikelNr, ArtikelName, ArtikelPreis, Menge, KundenNr, KundenName und KundenAnschrift in einer einzigen Tabelle zu verwalten. In einer solchen Tabelle wird es nämlich sehr viele Mehrfachnennungen geben, da ein bestimmter Kunde mehrfach gespeichert wird, wenn er mehrere Bestellungen aufgibt. Ebenso wird ein bestimmter Artikel mehrfach gespeichert, wenn er von mehreren Kunden bestellt wird.
Das große Problem bei Mehrfachnennungen besteht darin, dass die einzelnen Nennungen immer die gleichen Werte aufweisen müssen. Ist dies nicht der Fall, dann wird die Datenbank unstimmig. Folglich muss für einen bestimmten Kunden dessen KundenAnschrift bei allen betreffenden Datensätzen genau gleich lauten. Was einfach klingt, ist eine große Herausforderung, insbesondere bei einer großen Anzahl von Datensätzen.
Glücklicherweise gibt es für das besagte Problem eine einfache und wirkungsvolle Lösung. Die Mehrfachnennungen können nämlich dadurch vermieden werden, dass man die Bestelldaten nicht in einer einzigen Tabelle, sondern in drei verschiedenen Tabellen Bestellung, Artikel und Kunde verwaltet (s. Abb. 2). Die Frage ist nur, wie man auf eine solche optimale Datenbankstruktur kommt.

Schritt 1: Zur Strukturierung einer relationalen Datenbank werden zunächst alle für das zukünftige System erforderlichen Datenfelder gesammelt, für unseren Online-Shop also Bestelldatum, ArtikelNr, Kundenanschrift, etc.
Schritt 2: Danach werden die ermittelten Datenfelder entsprechend ihrer Zusammengehörigkeit in verschiedenen Tabellen gruppiert. Zusammengehörig sind beispielsweise ArtikelNr, ArtikelName und ArtikelPreis. Diese Datenfelder bilden eine Einheit, einen so genannten Informationsobjekttyp (IOT - im vorliegenden Fall einen Artikel). Eines der Datenfelder (oder eventuell eine Kombination) wird noch als so genannter Primärschlüssel ausgewählt, mit dem jeder Datensatz innerhalb der Tabelle eindeutig identifiziert werden kann (Primärschlüssel werden oft durch unterstreichen gekennzeichnet). Für den Artikel wäre dies die ArtikelNr. Neben dem Artikel gibt es im Online-Shop noch einen zweiten Informationsobjekttyp, nämlich Kunde, der durch die Datenfelder KundenNr (Primärschlüssel), KundenName und KundenAnschrift beschrieben wird.
Schritt 3: Schließlich sind die Beziehungen zwischen den Informationsobjekttypen aufzunehmen. Im Online-Shop gibt es beispielsweise eine Bestellung-Beziehung zwischen Artikel und Kunde: ein Artikel wird von einem Kunden bestellt, oder umgekehrt formuliert, ein Kunde bestellt einen Artikel.
Was ist eigentlich ein Primärschlüssel?
In einer Tabelle muss auf jeden Datensatz eindeutig zugegriffen werden können. Daher benötigt jede Tabelle eine Spalte (oder eine Spaltenkombination), in der jeder vorhandene Wert nur einmal auftritt. Die betreffende Spalte(nkombination) ist beim Anlegen einer Tabelle explizit zu kennzeichnen und wird als Primärschlüssel bezeichnet.
In einfachen Fällen kann man eine Beziehung dadurch ausdrücken, dass man den Primärschlüssel derjenigen Tabelle, zu der man eine Beziehung hat, als zusätzliches Datenfeld (als so genannten Fremdschlüssel) in die eigene Tabelle aufnimmt. Das geht aber nur dann, wenn jeder Datensatz der Ausgangstabelle mit höchstens einem Datensatz der Zieltabelle in Beziehung steht.
Leider ist dies aber für die Bestellung-Beziehung nicht der Fall. Ein bestimmter Artikel kann von mehreren Kunden bestellt werden und auch ein bestimmter Kunde kann mehrere Artikel bestellen. Solche „viele-zu-viele"-Beziehungen müssen durch eine eigene Tabelle ausgedrückt werden. Eine eigene Beziehungstabelle muss es übrigens auch geben, wenn die Beziehung eigene Datenfelder aufweist, wie zum Beispiel die Bestellung-Beziehung das Bestelldatum und die Bestellmenge.
Die Bestellung-Beziehung führt also auf jeden Fall zu einer eigenen Tabelle, die mit den zusätzlichen Fremdschlüsseln ArtikelNr und KundenNr Bezug nimmt auf die IOT-Tabellen Artikel und Kunde. In dieser Form ist die Datenbank nun optimal strukturiert, das heißt es gibt keine Mehrfachspeicherungen und alle Datenfelder stehen genau in der richtigen Tabelle.
Für die bisher beschriebene Strukturierung der Datenbank waren vor allem Fachkenntnisse über den betreffenden Einsatzbereich erforderlich. Jetzt müssen die entstandenen konzeptionellen Tabellen noch mit dem relationalen Datenbanksystem EDV-technisch umgesetzt werden. Für diesen Zweck steht die Datenbanksprache SQL (Structured Query Language) zur Verfügung, mit der man sowohl die Datenbankstrukturen anlegen als auch die zugehörigen Datensätze manipulieren (einfügen, ändern, löschen) und abfragen kann.
Das Anlegen einer Tabelle erfolgt in SQL mit einer CREATE TABLE-Anweisung, wobei zunächst diejenigen Tabellen definiert werden, auf die kein Bezug aus anderen Tabellen genommen wird. Für unseren Online-Shop sind also zunächst die Tabellen Artikel und Kunde anzulegen, bevor die Tabelle Bestellung wie folgt definiert wird:

Die CREATE TABLE-Anweisung gibt der Tabelle zunächst einen Namen und listet dann deren Datenfelder auf, wobei jeweils der zugehörige Wertebereich angegeben wird. Im vorliegenden Fall steht INTEGER für eine ganze Zahl, DATE für Datum und DECIMAL (3,0) für eine dreistellige Dezimalzahl ohne Nachkommastellen. PRIMARY KEY kennzeichnet den Primärschlüssel, während die FOREIGN KEY-Angabe für das betreffende Fremdschlüssel-Datenfeld (beispielsweise ArtikelNr der Tabelle Bestellung) eine Referenz setzt auf den jeweils spezifizierten Primärschlüssel (auf ArtikelNr aus der Tabelle Artikel). NOT NULL sorgt dafür, dass beim jeweiligen Datenfeld immer ein Wert angegeben werden muss (für einen Primärschlüssel gilt dies implizit). Schließlich können mit der CHECK-Angabe die Wertebereiche der Datenfelder noch weiter eingeschränkt werden.
Eine der Hauptaufgaben beim Arbeiten mit relationalen Datenbanken stellt die gezielte Suche nach speziellen Datenbankinhalten dar. Eine solche Datenabfrage kann sich entweder auf eine einzelne Tabelle beziehen oder aber auch die Verknüpfung mehrerer Tabellen erforderlich machen. Daher gibt es unterschiedliche Datenbankoperationen, nämlich einerseits die Projektion (Auswahl bestimmter Datenfelder (Spalten)) und die Selektion (Auswahl bestimmter Datensätze (Zeilen)), die beide auf eine einzelne Tabelle angewendet werden, und andererseits den Verbund (engl. Join), der zwei Tabellen zu einer neuen Tabelle verbindet.
Was verbirgt sich hinter dem Kürzel SQL?
SQL ist die Standard-Sprache für das Einfügen, Ändern, Löschen und Abfragen von Datensätzen in relationalen Datenbanken. SQL steht für Structured Query Language (strukturierte Abfragesprache) und hat sich in den letzten 30 Jahren von einer bloßen Abfragesprache zu einer umfassenden Datenbanksprache entwickelt. SQL kann deshalb heute sowohl für ein dialogorientiertes Arbeiten mit dem Datenbanksystem als auch als Programmiersprache eingesetzt werden.
Um die gesuchten Daten aus der Datenbank zu ermitteln, müssen diese drei elementaren Datenbankoperationen jeweils geeignet kombiniert auf die betreffenden Tabellen angewendet werden. Für diesen Zweck gibt es in SQL die folgende SELECT-Anweisung:
In der Online-Shop-Datenbank lautet also die Frage nach den Namen der Artikel, die über 50 Euro kosten, wie folgt:
Sollen hingegen die Artikel, die der Kunde "Bond" bestellt hat, mit Namen und Preis ausgegeben werden, lautet die SQL-Abfrage wie folgt:
Mit den bisher vorgestellten SQL-Anweisungen können die Strukturen der Tabellen angelegt und die Inhalte der Tabellen abgefragt werden. Für eine umfassende Datenbankverarbeitung fehlen jetzt noch die SQL-Anweisungen für das Einfügen, Ändern und Löschen von Datensätzen.
Für das Einfügen von Datensätzen gibt es in SQL die INSERT-Anweisung. Um die zwei neuen Artikel "Notebook" (mit Nr 4714 und einem Preis von 499 Euro) und "Fernseher" (mit Nr 4715 und einem Preis von 699 Euro) in die Online-Shop-Datenbank aufzunehmen, muss die folgende SQL-Anweisung formuliert werden:
Für das Ändern von Datensätzen gibt es die UPDATE-Anweisung. Um bei der Bestellung 999 die Bestellmenge auf 3 und das Datum auf "30.7.2008" zu ändern, ist die folgende SQL-Anweisung erforderlich:
Für das Löschen von Datensätzen gibt es die DELETE-Anweisung. Um diejenigen Artikel aus dem Sortiment zu nehmen, die noch nicht bestellt worden sind, ist die folgende SQL-Anweisung zu formulieren:

Neben den hier vorgestellten Basiskonzepten relationaler Datenbanken gibt es noch viele weitere interessante Aspekte im Hinblick auf das Arbeiten mit tabellarisch organisierten Daten. In der Praxis gestalten sich nämlich viele Einsatzbereiche nicht so einfach wie die hier dargestellten Beispiele und erfordern daher noch einige erweiterte Lösungskonzepte, wie die zahlreichen Anwendungsfälle in [Preiß2007] zeigen.
Zudem gibt es für relationale Datenbanken nicht nur die Standard-Einsatzbereiche mit den hier gezeigten einfach strukturierten Datensätzen. Dies ist zwar die häufigste Form des Einsatzes, relationale Datenbanksysteme verfügen aber noch über einige weitere Fähigkeiten, sie können nämlich bspw. auch komplex strukturierte Datensätze mit Vererbung, XML-Dokumente oder auch aggregierte Daten für ein Data Warehouse verwalten.
Was ist ein Data Warehouse?
Ein Data Warehouse ist eine spezielle Datenbank, die zusätzlich zu den normalen Datenbanken des operativen Betriebs aufgebaut wird und insbesondere bei Datenanalysen zur Entscheidungsunterstützung zum Einsatz kommt. Um ein Data Warehouse zu füllen, werden die für die Entscheidungen relevanten Daten aus den operativen Datenbanken herausgezogen, inhaltlich bereinigt, strukturell angeglichen und nach mehreren so genannten Dimensionen (beispielsweise nach Zeit, Region, Produkt etc.) geordnet im Data Warehouse abgelegt. Anschließend stehen die Daten für alle Arten von Abfragen zur Verfügung, sogar für solche Abfragen, die bisher nicht bekannte Zusammenhänge aufdecken können.
Nicht zuletzt bieten relationale Datenbanksysteme auch äußerst interessante Mechanismen bei der Abwicklung von Datenbank-Zugriffen. Hier muss einerseits ein schnelles Zugriffsverhalten auch dann gewährleistet werden, wenn die Tabellen mehrere Millionen Datensätze beinhalten. Andererseits muss in vielen Fällen der gleichzeitige Zugriff einer großen Anzahl paralleler Datenbank-Benutzer koordiniert werden.
Im vorliegenden Artikel wurden diese Aspekte aus Platzgründen allerdings nicht behandelt. Es sei deshalb abschließend noch angemerkt, dass der interessierte Leser die nicht diskutierten weiterführenden Themen zu relationalen Datenbanken in der einschlägigen Datenbank-Literatur nachlesen kann (siehe zum Beispiel [Elmasri2006]).
Dr. Nikolai Preiß ist Professor für Wirtschaftsinformatik an der Berufsakademie Stuttgart. Die Schwerpunkte seiner Lehrtätigkeit bilden die Themen Projektmanagement und insbesondere Datenbanken.
[Elmasri2006] Elmasri, R. / Navathe, S.B.: Fundamentals of Database Systems;
5. Auflage, Addison-Wesley, Boston
[Preiß2007] Preiß, N.: Entwurf und Verarbeitung relationaler Datenbanken;
Oldenbourg, München