(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
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.
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:
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.
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:
Die mit Daten gefüllte Tabelle buch könnte in unserem Beispiel wie folgt aussehen:
Tabelle buch:BuchNr | Titel | Autor | Erscheinungsjahr | ISBN-Nummer | Verlag | Exemplaranzahl |
---|---|---|---|---|---|---|
1 | Informatik I | Brichzin, Freiberger, Reinold, Wiedemann | 2007 | 978-3-486-00156-3 | Oldenbourg-Verlag | 100 |
2 | Informatik I | Brichzin, Freiberger, Reinold, Wiedemann | 2007 | 978-3-486-00156-3 | Oldenbourg-Verlag | 100 |
3 | Informatik I | Brichzin, Freiberger, Reinold, Wiedemann | 2007 | 978-3-486-00156-3 | Oldenbourg-Verlag | 100 |
4 | Informatik I | Brichzin, Freiberger, Reinold, Wiedemann | 2007 | 978-3-486-00156-3 | Oldenburg-Verlag | 100 |
... | Informatik I | Brichzin, Freiberger, Reinold, Wiedemann | 2007 | 978-3-486-00156-3 | Oldenbourg-Verlag | 100 |
100 | Informatik I | Brichzin, Freiberger, Reinold, Wiedemann | 2007 | 978-3-486-00156-3 | Oldenbourg-Verlag | 100 |
101 | Informatik | Buttke, Engelmann | 2007 | 978-3-8355-6000-0 | Duden 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.
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.
|
gehört zu genau einem <---------------------- ist vorrätig in n -----------------------> |
|
Die Exemplaranzahl kann über die Anzahl der vorhandenen Exemplare ermittelt werden.
zugehöriges Tabellenschema:
Die mit Daten gefüllten Tabellen buch und exemplar könnten in unserem Beispiel wie folgt aussehen:
Tabelle buch:Titel | Autor | Erscheinungsjahr | ISBN-Nummer | Verlag |
---|---|---|---|---|
Informatik I | Brichzin, Freiberger, Reinold, Wiedemann | 2007 | 978-3-486-00156-3 | Oldenbourg-Verlag |
Informatik | Buttke, Engelmann | 2007 | 978-3-8355-6000-0 | Duden Paetec Schulbuchverlag |
Informatik II | Brichzin, Freiberger, Reinold, Wiedemann | 2008 | 978-3-486-00158-7 | Oldenbourg-Verlag |
... | ... | ... | ... |
ExemplarNr | ISBN-Nummer | Zustand |
---|---|---|
1 | 978-3-486-00156-3 | gut |
2 | 978-3-486-00156-3 | sehr gut |
3 | 978-3-486-00156-3 | befriedigend |
... | ... | ... |
100 | 978-3-486-00156-3 | gut |
1 | 978-3-8355-6000-0 | sehr 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, buchwird als Ergebnistabelle alle möglichen Kombinationen liefern, also folgendes:
Titel | ISBN-Nummer |
---|---|
Informatik I | 978-3-486-00156-3 |
Informatik I | 978-3-8355-6000-0 |
Informatik I | 978-3-486-00158-7 |
Informatik | 978-3-486-00156-3 |
Informatik | 978-3-8355-6000-0 |
Informatik | 978-3-486-00158-7 |
Informatik II | 978-3-486-00156-3 |
Informatik II | 978-3-8355-6000-0 |
Informatik II | 978-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:
Titel | ISBN-Nummer |
---|---|
Informatik I | 978-3-486-00156-3 |
Informatik | 978-3-8355-6000-0 |
Informatik II | 978-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.
Nach dem Vorbild von Beispiel 2 modellieren wir die drei Klassen VERLAG, BUCH, EXEMPLAR und erhalten folgendes Klassendiagramm:
|
gehört zu genau einem <---------------------- ist vorrätig in n -----------------------> |
| ||||||||||||||||||||
|
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.
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.