zurück zur Homepage


Informatik 9.Klasse

Funktionale Modellierung - Datenmodellierung und Datenbanksysteme

Funktionale Modellierung (Klasse 9)

(Der folgende Text orientiert sich stark an der Handreichung für den Informatikunterricht an Gymnasien. )

Ein funktionales Modell spezifiziert, was geschieht. Das "wie" und "wann" spielt bei der funktionalen Modellierung keine Rolle. Grundgedanke ist die Zerlegung eines großen kaum überschaubaren Prozesses in kleine Teilprozesse. Dabei werden die einzelnen Teilprozesse als Funktionen betrachtet, die aus einer bestimmten Zahl von Eingangswerten nach einer eindeutigen Verarbeitungsvorschrift einen Ausgabewert ermitteln. Dargestellt werden die Zusammenhänge in Datenflussdiagrammen.

Es ist wichtig sich klarzumachen, dass der eingeschränkte Funktionsbegriff aus der Mathematik nur bedingt für Probleme aus der Informatik tauglich ist. Eingeführt werden Funktionen in der Mathematik als eindeutige Zuordnungen einer reellen Zahl zu einer anderen Zahl. Dabei stützt sich der Mathematikunterricht auf den Graphen einer Funktion und entwickelt Kriterien anhand derer man die Eindeutigkeit der Zuordnung erkennen kann.

In der Informatik werden dagegen oft Funktionen benötigt, die nicht nur einen Parameter, sondern mehrere Parameter haben, die von beliebigen Datentypen (wie z.B. Texte, Felder, Listen, ... ) sein können. Eine Vorstellung der Zuordnung als Graph ist hier nicht möglich. Die Ausgabewerte einer Funktion können ebenfalls von vielen verschiedenen Datentypen sein. Damit ist der Funktionsbegriff in der Informatik wesentlich komplexer als in der Mathematik.

Eine Funktion (festgelegt durch einen eindeutigen Bezeichner) transformiert Datenwerte. Sie beschreibt eine klar umrissene Aufgabe innerhalb eines größeren Zusammenhangs. Sie ermittelt aus Eingangsdaten nach einer festgelegten Vorschrift (Verarbeitungsvorschrift) Ausgangsdaten. Im Rahmen des Informatikunterrichts an der Schule (9.Klasse Gymnasium) werden bei der funktionalen Modellierung nur Funktionen mit einem Ausgabewert betrachtet (siehe obiges Bild).

Eine Tabellenkalkulation ist eine Art funktionales Modell (Zitat aus Rumbaugh u.a., Objektorientiertes Modellieren und Entwerfen, Carl Hanser Verlag 1993).

(Kleiner Einwurf: Tabellenkalkulationsprogramm ist nicht gleich Excel! Excel ist nur ein Beispiel für ein Tabellenkalkulationsprogramm. Ich bevorzuge kostenlose Software)

Tabellenkalkulation beschäftigt sich - wie der Name schon ahnen lässt - mit Berechnungen über einer Tabelle (oder mehrerer Tabellen). Beim Öffnen eines Tabellenkalkulationsprogramms erhält man erst einmal ein leeres Arbeitsblatt/Rechenblatt, das ein wenig an einen überdimensionalen Stundenplan oder an ein riesiges Schachbrett erinnert (ich gehe davon aus, dass der Leser schon einige grundlegende Kenntnisse über das Aufrufen und den Umgang mit Anwendungsprogrammen hat).  Die Zeilen sind  meist mit fortlaufenden Zahlen beschriftet, die Spalten mit Buchstaben (diese Einstellungen kann man natürlich auch ändern). Dadurch können die einzelnen Felder, die bei Tabellenkalkulationsprogrammen normalerweise Zellen genannt werden, eindeutig lokalisiert werden. So bezeichnet z.B. B5 die Zelle in der Spalte B und der Zeile 5.

Jede Zelle gehört zu genau einer Zeile und zu genau einer Spalte. Umgekehrt enthält eine Zeile wie auch eine Spalte mehrere Zellen. In einer Zelle eines Arbeitsblatts können vom Benutzer eingegebene Zeichen (Texte/Zeichenketten, Zahlen, ...)  oder Ergebnisse (als Berechnungen aus Formeln) als Information stehen. Bei der Eingabe von Zeichen in eine Zelle versucht das Tabellenkalkulationsprogramm den Datentyp zu erkennen und führt in manchen Situationen eine Umwandlung durch. Bearbeitet wird der Zellwert normalerweise im Bearbeitungsfeld, oft auch unmittelbar in der Zelle. Der Datentyp eines Zelleneintrags bestimmt, welche Operationen (Rechenverfahren) zur Verfügung stehen und (bei Ergebnissen) welche Werte der Zelleneintrag annehmen kann. Übliche Datentypen sind z.B. Zahl, Text, Zeitangabe und Wahrheitswert.

Die Formatierung einer Zelle legt fest, in welcher Form der Inhalt der Zelle dargestellt wird. Dabei bezieht sich das Attribut  Format auf das Gesamtformat einer Zelle. Einzelne Zeichen in einer Zelle können in ihrem Format ebenfalls verändert werden (z.B. ändern der Schriftgrösse, Schriftfarbe u.ä. bei Zeichen).

Der Inhalt einer Zelle kann auch durch eine Verarbeitungsvorschrift festgelegt werden. Diese kann als formale Eingangsparameter (also als Platzhalter für die nötigen Eingangsdaten) die Adressen anderer Zellen enthalten. Die Verarbeitungsvorschrift wird im Attribut Formel abgelegt.  Wenn einzelne Zellen kopiert werden, dann wird auch die zugrundeliegende Formatierung, die Formel, der Datentyp ... kopiert und die Adressen (Zellbezüge) anderer Zellen angepasst, wenn es sich um relative Adressen handelt. In den meisten Tabellenkalkulationsprogrammen unterscheiden sich absolute Adressen von relativen Adressen durch das Voranstellen eines Dollarzeichens, d.h. der absolute Zellbezug $A$3 bezeichnet immer die Zelle A3, während ein Zellbezug wie A3 in einer Formel beim Kopieren angepasst wird

Jede Funktion hat einen Bezeichner. Die Platzhalter für die nötigen Eingangsdaten einer Funktion heissen formale Eingangsparameter. Sie werden nach dem Funktionsbezeichner innerhalb einer Klammer aufgelistet.


<......>

Datenmodellierung und Datenbanksysteme (Klasse 9)

Thema:

Während bei der funktionalen Modellierung die Verarbeitung einzelner Daten im Vordergrund stand, geht es in diesem Teilbereich um die Strukturierung grosser Datenmengen.

Um eine saubere Umsetzung von einer realen Problemstellung zu einer diese Problemstellung umsetzende Datenbank zu kommen, werden verschiedene Modellierungsschritte verwendet:

Modellierungsschritte

Das Problem wird erfasst (am besten mit einem Pflichtenheft, in dem man festlegt, welche Fragestellungen man beantwortet haben will), objektorientiert analysiert und ein passendes Klassendiagramm (objektorientiertes Datenmodell, semantisches Modell) erstellt, in dem die beteiligten Klassen und die Beziehungen der Klassen untereinander festgehalten werden. Anschließend wird dieses Klassendiagramm in ein Tabellenschema (logisches Schema, Datenbankschema) übertragen. Der Klassenname wird zu dem Tabellenname, die Attribute der Klasse werden als Spaltenbezeichner aufgenommen. Primärschlüssel werden definiert, die für die Identifizierung der Datensätze in der Tabelle dienen. Falls sich keine Spalte oder Spaltenkombination als Primärschlüssel eignet, wird eine zusätzliche Spalte als künstlicher Schlüssel definiert. Beziehungen der Klassen untereinander werden je nach Kardinalität durch Fremdschlüssel oder zusätzliche Tabellen dargestellt.
Im Tabellenschema werden die Datentypen der beteiligten Spalten festgelegt. Der letzte Schritt ist die Umsetzung des Tabellenschemas in Tabellen eines Datenbank Management Systems (Implementierung). Zur Erstellung der Datenbank werden vorhandene Menüs verwendet. Eine Abfrage an ein DBMS wird mit Hilfe der Sprache SQL (structured query language) vorgenommen. Die Schüler lernen anhand von geeigneten Beispielen den Grundaufbau von SQL-Abfragen kennnen. Diese Seite bietet eine nette Zusammenfassung von Abfragen (diese Seite stammt von einem anderen Autor, für deren Inhalt übernehme ich keine Verantwortung). Eine Abfrage liefert als Ergebnis immer eine Ergebnistabelle.

Erstes Beispiel mit nur einer Klasse:

Eine kleine Schulbibliothek möchte ihre Bücher in Zukunft digital verwalten.
Dazu betrachtet man jedes Buch als Objekt einer Klasse BUCH mit verschiedenen Eigenschaften (Attributen): jedes Buch hat einen Titel, Autoren, ein Erscheinungsjahr und eine ISBN-Nummer. Ausserdem ist jedes Buch bei einem bestimmten Verlag erschienen und ist in mehreren Exemplaren vorhanden.

In der objektorientierten Modellierung erstellt man ein zu dieser Aufgabenstellung passendes Klassendiagramm. Um dieses Klassendiagramm in ein relationales Tabellenschema zu übertragen, ist allerdings ein weiteres Attribut BuchNr nötig, das die einzelnen Datensätze eindeutig identifiziert (Schlüsselattribut, künstlicher Schlüssel). Das Schlüsselattribut wird im Klassendiagramm unterstrichen. Dieses Klassendiagramm ist in der unteren Tabelle dargestellt.

BUCH
BuchNr
Titel
Autor
Erscheinungsjahr
ISBN-Nummer
Verlag
Exemplaranzahl

Bei einem konkreten Objekt dieser Klasse werden die Attributwerte in der Punktschreibweise angegeben: so könnte z.B. das Buch Informatik I aus dem Oldenbourg Verlag das Objekt buch1 mit den Attributwerten
buch1.BuchNr =1,
buch1.Titel = "Informatik I",
buch1.Autor="Brichzin, Freiberger, Reinold, Wiedemann",
buch1.Erscheinungsjahr = 2007,
buch1.ISBN-Nummer = "978-3-486-00156-3",
buch1.Verlag = "Oldenbourg-Verlag",
buch1.Exemplaranzahl = 100
ein konkretes Objekt dieser Klasse sein. Da das Attribut BuchNr das Schlüsselattribut ist, darf kein weiteres Objekt dieser Klasse den Attributwert 1 haben.

Damit ist der erste Schritt der Modellierung geschafft.

Um nun zu diesem Klassendiagramm ein relationales Tabellenschema zu erstellen, müssen für die einzelnen Attribute passende Datentypen (Wertebereiche) für die Daten festgelegt werden. Die Attribute werden als Spalten in das Tabellenschema übernommen, die Tabelle bekommt den Namen buch, um das Klassendiagramm BUCH optisch von der zugehörigen Tabelle buch zu trennen. In unserem Fall wird das Tabellenschema wie folgt festgelegt:

buch(BuchNr: INT; Titel: VARCHAR(100); Autor: VARCHAR(100); Erscheinungsjahr: DATE; ISBN-Nummer: CHAR(17); Verlag: VARCHAR(100); Exemplaranzahl: INT)

Die mit Daten gefüllte Tabelle buch könnte in unserem Beispiel wie folgt aussehen:

Tabelle buch:
BuchNrTitelAutorErscheinungsjahrISBN-NummerVerlag Exemplaranzahl
1Informatik IBrichzin, Freiberger, Reinold, Wiedemann2007978-3-486-00156-3Oldenbourg-Verlag 100
2Informatik IBrichzin, Freiberger, Reinold, Wiedemann2007978-3-486-00156-3Oldenbourg-Verlag 100
3Informatik IBrichzin, Freiberger, Reinold, Wiedemann2007978-3-486-00156-3Oldenbourg-Verlag 100
4Informatik IBrichzin, Freiberger, Reinold, Wiedemann2007978-3-486-00156-3Oldenburg-Verlag 100
...Informatik IBrichzin, Freiberger, Reinold, Wiedemann2007978-3-486-00156-3Oldenbourg-Verlag 100
100Informatik IBrichzin, Freiberger, Reinold, Wiedemann2007978-3-486-00156-3Oldenbourg-Verlag 100
101InformatikButtke, Engelmann2007978-3-8355-6000-0Duden Paetec Schulbuchverlag 50
.................. ...

Jedes eingetragene Exemplar ist über die eindeutige Buchnummer identifizierbar. In dieser Tabelle sieht man nun auch schon die Schwächen der Modellierung mit einer Klasse: viele Attributwerte sind mehrfach vorhanden. Schon beim Eingeben der Daten kann es hier passieren, dass einzelne Schreibfehler dazu führen, dass z.B. eine Abfrage nach Bücher aus dem Oldenbourg-Verlag das Buch mit der Buchnummer 4 nicht als Ergebnis liefert. Bei diesem Buch wurde der Name des Verlags falschgeschrieben.

Für die Datenbank ist damit dieses Buch in einem anderen Verlag erschienen. Bessere Modellierungen zeigen die folgenden Beispiele.

Letzter Schritt der Modellierung: Dieser Schritt unterscheidet sich von den anderen Schritte dadurch dass eine konkrete Implementierung natürlich immer abhängig von dem verwendeten Werkzeug ist. Man könnte die Datenbank selber programmieren (in irgendeiner Programmiersprache) oder ein Datenbank Management System wie mysql oder MS Access verwenden. Wir verwenden im Unterricht mysql.

Zweites Beispiel:

Wie im ersten Beispiel schon erwähnt ist eine Modellierung der Schulbibliothek mit nur einer Klasse ungünstig, da Mehrfacheintragungen (redundante Daten) den Datenbestand unnötig vergrößern und außerdem zu einem inkonsistenten Datenbestand führen können.

Hier bietet sich eine Modellierung mit mehreren Klassen an. Wir definieren die Klassen BUCH und EXEMPLAR getrennt und streichen aus der Klasse BUCH das Attribut Exemplaranzahl. Ein Objekt der Klasse BUCH ist in mehreren Objekten der Klasse EXEMPLAR vorhanden, während ein Objekt der Klasse EXEMPLAR zu genau einem Objekt der Klasse BUCH gehört. Wir haben hier also eine 1:n-Beziehung zwischen den beiden Klassen. Eine solche Modellierung erlaubt es uns, in der Klasse BUCH die ISBN-Nummer als natürlichen Schlüssel zu wählen und das Attribut BuchNr zu streichen. Die Klasse EXEMPLAR braucht dagegen einen künstlichen Schlüssel ExemplarNr. Ein Attribut Zustand, das den Zustand des jeweiligen Exemplars beschreibt, ist für unsere Datenbank in jedem Fall sinnvoll. Um die 1:n-Beziehung zwischen BUCH und EXEMPLAR modellieren zu können, braucht das zur Klasse EXEMPLAR gehöende Tabellenschema als weiteres Attribut die ISBN-Nummer des zugehörigen Buches (Fremdschlüssel).

Das folgende Klassendiagramm beschreibt diese Abhängigkeiten. Die Pfeile zeigen die Leserichtung für die darüber notierte Beziehung an.

BUCH
Titel
Autor
Erscheinungsjahr
ISBN-Nummer
Verlag


gehört zu genau einem
<----------------------
ist vorrätig in n
----------------------->

EXEMPLAR
ExemplarNr
Zustand

Die Exemplaranzahl kann über die Anzahl der vorhandenen Exemplare ermittelt werden.

zugehöriges Tabellenschema:

buch(Titel: VARCHAR(100); Autor: VARCHAR(100); Erscheinungsjahr: DATE; ISBN-Nummer: CHAR(17); Verlag: VARCHAR(100))
exemplar(ExemplarNr: INT; ISBN-Nummer: CHAR(17); Zustand: VARCHAR(10))

Die mit Daten gefüllten Tabellen buch und exemplar könnten in unserem Beispiel wie folgt aussehen:

Tabelle buch:
TitelAutorErscheinungsjahrISBN-NummerVerlag
Informatik IBrichzin, Freiberger, Reinold, Wiedemann2007978-3-486-00156-3Oldenbourg-Verlag
InformatikButtke, Engelmann2007978-3-8355-6000-0Duden Paetec Schulbuchverlag
Informatik IIBrichzin, Freiberger, Reinold, Wiedemann2008978-3-486-00158-7Oldenbourg-Verlag
......... ...

Tabelle exemplar:
ExemplarNrISBN-NummerZustand
1978-3-486-00156-3gut
2978-3-486-00156-3sehr gut
3978-3-486-00156-3befriedigend
.........
100978-3-486-00156-3gut
1978-3-8355-6000-0sehr gut
.........

Um nun für ein konkretes Exemplar den zugehörigen Titel zu ermitteln, muss unter der angegebenen ISBN-Nummer in der Tabelle buch nachgeschlagen werden.

Bei der Realisierung in mysql ist darauf zu achten, die SQL-Abfragen mit Bedacht zu formulieren. Eine Abfrage über die beiden Tabellen nach dem Titel und der ISBN-Nummer ohne diese Beziehung zu beachten, wird ein fehlerhaftes Ergebnis liefern.

SELECT Titel, exemplar.ISBN-Nummer FROM exemplar, buch

wird als Ergebnistabelle alle möglichen Kombinationen liefern, also folgendes:

TitelISBN-Nummer
Informatik I978-3-486-00156-3
Informatik I 978-3-8355-6000-0
Informatik I978-3-486-00158-7
Informatik978-3-486-00156-3
Informatik 978-3-8355-6000-0
Informatik978-3-486-00158-7
Informatik II978-3-486-00156-3
Informatik II 978-3-8355-6000-0
Informatik II978-3-486-00158-7
......

In der Ergebnistabelle sind etliche unsinnige Kombinationen enthalten, da das Kreuzprodukt (kartesische Produkt) über diese beiden Tabellen gebildet wird. Durch eine zusätzliche Bedingung, die für eine korrekte Zuordnung sorgt, wird dies verhindert:

SELECT Titel, exemplar.ISBN-Nummer FROM exemplar, buch WHERE exemplar.ISBN-Nummer = buch.ISBN-Nummer

Die Bedingung exemplar.ISBN-Nummer = buch.ISBN-Nummer stellt sicher, dass die ISBN-Nummer übereinstimmen.

Mit Hilfe dieser Abfrage bekommen wir nun die gewünschte Ergebnistabelle:

TitelISBN-Nummer
Informatik I978-3-486-00156-3
Informatik978-3-8355-6000-0
Informatik II978-3-486-00158-7
......

Auch bei dieser Modellierung können wir feststellen, dass redundante Daten in den Tabellen enthalten sind. Wenn eine Schulbibliothek ihre Schulbücher hauptsächlich vom Oldenbourg Verlag bezieht, dann wird dieser Verlag mehrfach in der Tabelle buch vorkommen. Ungünstig ist ebenfalls, dass die Anschrift des Verlags nicht im Datenmodell enthalten ist. Dem könnte zwar durch ein zusätzliches Attribut in der Klasse BUCH abgeholfen werden, würde aber die Anzahl der redundanten Daten vermehren. Es wäre also sinnvoll, eine eigene Klasse VERLAG zu entwerfen und die Beziehungen zwischen den Klassen VERLAG und BUCH zu modellieren. Dies machen wir in unserem dritten Beispiel.

Drittes Beispiel:

Nach dem Vorbild von Beispiel 2 modellieren wir die drei Klassen VERLAG, BUCH, EXEMPLAR und erhalten folgendes Klassendiagramm:

BUCH
Titel
Autor
Erscheinungsjahr
ISBN-Nummer


gehört zu genau einem
<----------------------
ist vorrätig in n
----------------------->

EXEMPLAR
ExemplarNr
Zustand
|er- /\ gibt
|scheint|n
|in|heraus
|einem|
\/|
VERLAG
VerlagsNr
Name
Adresse
Telefonnummer

Die Umsetzung in ein Tabellenschema sollte nach Beispiel 2 nur noch eine Fingerübung sein. Zwischen den Klassen BUCH und VERLAG haben wir eine 1:n-Beziehung, da ein konkretes Buch in genau einem Verlag erscheint, aber ein konkreter Verlag viele Bücher herausgibt. Zu beachten ist, dass das Tabellenschema für die Klasse BUCH die 1:n-Beziehung durch Hinzunahme des Fremdschlüssels abbilden muss. Das zugehörige Tabellenschema fasst also die drei Tabellen buch, exemplar und verlag, von denen buch 5 Spalten, exemplar 3 Spalten und Verlag 4 Spalten besitzt.

Unangenehm fallen bei dieser Modellierung folgende Effekte auf: nach einem einzelnen Autor zu suchen, ist nicht möglich, da in der Datenbank ganze Autorenlisten eingetragen sind. Auch hier werden wir eine zusätzliche Klasse AUTOR modellieren, um die Datenbank brauchbarer zu machen.

Viertes und letztes Beispiel

Wir haben die Schulbibliothek mit Hilfe der drei Klassen BUCH, EXEMPLAR und VERLAG modelliert und wollen nun ermöglichen, Bücher einzelner Autoren zu suchen. Dazu erstellen wir eine Klasse AUTOR und betrachten die Beziehungen zwischen den Klassen AUTOR und BUCH: ein Autor kann mehrere Bücher verfassen (evtl auch als Mitautor) und ein Buch wird von eventuell mehreren Autoren verfasst. Damit haben wir zwischen diesen beiden Klassen eine n:m-Beziehung, die wir im Tabellenschema passend modellieren müssen. Das folgende Bild zeigt das Klassendiagramm der beteiligten Klassen (auf die Angabe der Attribute habe ich diesesmal verzichtet, damit das Bild übersichtlicher wird). .

Als Attribute wird die Klasse AUTOR mindestens den Vornamen und den Namen des Autors enthalten und als künstlichen Schlüssel das Attribut Autornummer. Die Tabellenschemata der Klassen BUCH, EXEMPLAR und VERLAG können unverändert übernommen werden. Das Tabellenschema der Klasse AUTOR wird wie folgt aussehen:
autor(Autornummer: int; Vorname: VARCHAR(100); Nachname: VARCHAR(100))

Die n:m-Beziehung kann nicht durch Aufnahme eines Fremdschlüssels in die Attributliste einer der beiden oder beider Klassen verwirklicht werden, sondern muss durch eine Beziehungstabelle realisiert werden. Diese Beziehungstabelle enthält als Spalten die Schlüssel der beteiligten Klassen. Der Schlüssel der Beziehungstabelle ist die Kombination der enthaltenen beiden Spalten. In unserem Beispiel sieht die Beziehungstabelle also folgendermaßen aus:

buch_zu_autor(ISBN-Nummer: CHAR(17); Autornummer: int)

Wenn wir uns nun das Klassendiagramm unserer Bibliothek anschauen und darüber nachdenken, dann sollte uns auffallen, dass eine weitere wichtige Klasse fehlt: eine Klasse, die uns erlaubt, die Entleiher der Bücher zu speichern. Diese Klasse steht natürlich in einer 1:n-Beziehung zur Klasse EXEMPLAR. Unser Tabellenschema wird also um eine weitere Tabelle entleiher erweitert und die Tabelle exemplar erhält als weiteren Fremdschlüssel das Schlüsselattribut der Klasse ENTLEIHER.


Letzte Änderung: 15.06.2009, Autor: A. Wedel
Falls Sie Fehler in meinen Ausführungen finden, melden Sie diese bitte an mich. Diese Seite befindet sich zur Zeit in Arbeit.