Von der Tabelle zur Datenbank RLFB/ E-Session vom 09.07.2013 SchiLf vom 10.07.2013 (CC) Martin Römpp Staatliche Realschule Bessenbach, 2013 Wikimedia/ RRZEicons Ein roter Faden zum Einstieg in das Erstellen relationaler Datenbanken Von der Tabelle zur Datenbank Dieses Skript soll einen roten Faden für die Einführung in das Thema „Datenbanken“ liefern und zeigt anhand einer beispielhaften Aufgabenstellung, welche Schritte dabei unternommen werden sollten. Dabei orientiere ich mich inhaltlich am Lehrplan für das Fach Informationstechnologie für Realschulen in Bayern, Modul D1: „Relationale Datenstrukturen“ [3]. Alle der aufgeführten Themen werden in diesem Skript nur oberflächlich angesprochen und müssen für ein tiefer gehendes Verständnis z. B. in weiteren Unterrichtseinheiten entsprechend vertieft und eingeübt werden. Dieses Skript steht allen Interessierten frei zur Verfügung – entsprechend den Lizenzbedingungen des CC BY 3.0 (Namensnennung; http://creativecommons.org/licenses/by/3.0/). Sollten Sie Fehler im Skript gefunden haben, oder Anregungen bzw. Ergänzungen vorschlagen wollen, freue ich mich, wenn Sie mir eine Nachricht zukommen lassen: [email protected] 2 Von der Tabelle zur Datenbank Inhaltsverzeichnis Arbeiten mit der Tabelle ............................................................................................. 4 Neuen Kunden bzw. neues Produkt hinzufügen..........................................................................................4 Kunden bzw. Produkt löschen..........................................................................................................................5 Kunden-/ Produktdaten ändern......................................................................................................................5 Normalisierung........................................................................................................... 6 Modellierung der Datenstruktur.......................................................................................................................6 Planung der Tabellen.........................................................................................................................................7 Erstellen von Tabellen im DBMS ................................................................................. 7 Eingabe der Daten in die Tabelle...................................................................................................................10 Beziehung der Daten zueinander..................................................................................................................11 Kardinalität....................................................................................................................................................12 Kleine Abfragen: Überprüfung der gemachten Arbeiten ........................................... 14 Ausblick.................................................................................................................... 15 Literaturempfehlungen ............................................................................................. 16 Linkliste.................................................................................................................... 16 3 Von der Tabelle zur Datenbank Ausgangspunkt der Arbeit sind Daten, die in Tabellenform zusammengestellt wurden. Arbeitsmaterial: Datei „IT D1 Normalisierung Vorlage.xlsx“ (Microsoft Excel) (Die darin enthaltenen Adressdaten wurden von einem Dummydaten-Zufallsgenerator (http://www.fakenamegenerator.com) erstellt. Es handelt sich also nicht um echte Adressen.) Diese Datei kann – wie dieses Dokument auch – im Moodle-Kurs [1] heruntergeladen, oder gemäß folgender Abbildung schnell nachgestellt werden. Der Einfachheit halber haben wir die Tabelle auf 11 Einträge reduziert. In einem realistischen Szenario müssen wir von mehreren hundert oder gar mehreren tausend Einträgen ausgehen. Arbeiten mit der Tabelle Nun sollen einige regelmäßig anfallende Arbeiten mit den Daten vorgenommen werden. Neuen Kunden bzw. neues Produkt hinzufügen Wir wollen in der Tabelle das neue Produkt „Ahorn“ (Artikelnr. 12345, Nettopreis 34,44 €) aufnehmen. Ebenso wie das Hinzufügen eines neuen Kunden (s. Abbildung) führt dies zu unvollständigen Einträgen in der Tabelle. Dem neuen Produkt fehlen die sonst in der Tabelle zugeordneten Kunden- bzw. Bestelldaten. Auch dem neuen Kunden fehlen Daten – für die Kundennummer muss zunächst bestimmt werden, welches die letzte vergebene Kundennummer war. Diesem neu angelegten Kunden wurden noch keine Produkt- und Bestelldaten zugeordnet. 4 Von der Tabelle zur Datenbank Wir sprechen von der „Einfüge-Anomalie“, wenn beim Hinzufügen eines neuen Datensatzes („Zeile“ im Tabellenkalkulationsprogramm) nicht alle Felder („Spalten“ im Tabellenkalkulationsprogramm) ausgefüllt werden können. Kunden bzw. Produkt löschen Der Wegzug eines Kunden oder der Wegfall eines Produkts machen es notwendig, einen Kunden bzw. ein Produkt aus der Tabelle zu entfernen. Für unser Beispiel soll die Kundin „Loewe, Maria“ gelöscht werden. Wie die Abbildung zeigt, würden nicht nur die Kundendaten, sondern auch die damit verbundenen Produkt- und Bestellungsdaten gelöscht werden. In diesem Fall ist die betreffende Kundin die einzige, die das Produkt „Buche, 3“ bestellt hat. Damit würde gleichzeitig mit den Daten der Kundin unbeabsichtigt ein Produkt gelöscht werden. Die selbe Gefahr droht, wenn Produkt- oder Bestellungsdaten entfernt werden sollen. Die „Lösch-Anomalie“ beschreibt eine Situation, bei der durch das Löschen eines Datensatzes mehr Informationen als beabsichtigt aus der Datenhaltung entfernt werden. Kunden-/ Produktdaten ändern Herr „Zimmermann, Benjamin“ hat seinen Namen geändert. Dieser muss nun in der Tabelle händisch gesucht werden und an allen Fundorten aktualisiert werden. Bevor wir die Änderung durchführen, bemerken wir aber, dass wir zwei unterschiedliche Postleitzahlen für die gleichen Kundendaten eingetragen haben (Zeilen 2 und 12). Dies ist dem mehrfachen Vorhandensein derselben Daten (redundante Daten) geschuldet. Wenn wir nach dem Nachnamen „Zimmermann“ suchen, blieben uns möglicherweise fehlerhafte Einträge mit dem Namen „Zimmerman“ verborgen. Wenn nicht alle Vorkommen der Daten, die geändert werden sollen, geändert werden, führt dies zu inkonstistenten Daten. Dieser Effekt wird als „Änderungs-Anomalie“ bezeichnet. 5 Von der Tabelle zur Datenbank Normalisierung Als Lösung dieser drei Probleme wird die Tabelle in mehrere Tabellen aufgeteilt und damit das mehrfache Vorkommen von Daten (redundante Daten) vermieden. Das schrittweise Aufteilen in mehrere Tabellen wird als Normalisierung bezeichnet. Zunächst gilt es, die vorhandenen Daten zu analysieren. In der Regel lassen sich schnell zusammenhängende Daten identifizieren, die dann in eine der zu erstellenden Tabellen ausgelagert werden können. In unserem Fall teilen wir die Daten in auf die Tabellen „Kundendaten“, „Produktdaten“ und „Bestellungsdaten“ auf. Anmerkung: Diese Aufteilung kann zur Veranschaulichung zunächst im Tabellenkalkulationsprogramm erfolgen. In diesem Fall ist für jede der Tabellen ein eigenes Tabellenregister zu erstellen. Modellierung der Datenstruktur In der hier abgebildeten (noch unvollständigen) Datenmodellierung (nach dem EntityRelationship-Model, „ERM“ nach Chen) werden die drei Tabellen (ERM: Rechtecke) Kunden, Produkte und Bestellungen sowie deren Beziehungen zueinander (ERM: Rauten) sichtbar. Für die Tabellen Kunden und Produkte wurden bereits einige Attribute (ERM: Ellipsen) hinzugefügt. 6 Von der Tabelle zur Datenbank Die Modellierung steht bei der Konzeption einer Datenbank am Anfang und nimmt einen umfangreichen zeitlichen Rahmen ein. Planung der Tabellen Bei der Planung der Tabellen sollten alle Attribute des ER-Modells (Felder) bestimmt werden können. Ebenso ist es unerlässlich zu bestimmen, welche Inhalte in den jeweiligen Feldern eingetragen werden dürfen bzw. nicht eingetragen werden dürfen). Dazu wird ein passender Felddatentyp gewählt, der bestimmt, ob in einem Feld nur Zahlen, Text (beinhaltet Zahlen), Binärdaten (z. B. Bilddaten) oder spezielle Daten wie Datum, Uhrzeit, Währung vorkommen dürfen. Ebenso ist es wichtig, einen Primärschlüssel für jede der Tabellen festzulegen. Dieser ermöglicht es, jeden Datensatz einer Tabelle eindeutig zu identifizieren. Meist handelt es sich dabei um eine ID (z. B. Kunden-ID oder Artikelnummer), die vom Datenbankmanagement-System (DBMS) automatisch fortlaufend geführt wird („Auto-Wert“). Erstellen von Tabellen im DBMS Microsoft Access ist eines von vielen Datenbankmanagement-Programmen auf dem Markt. Alternativen wären z. B. OpenOffice.org Base bzw. LibreOffice Base, welche beide kostenlos im Internet verfügbar sind. Ein Datenbankmanagementsystem (DBMS) führt – vereinfacht gesagt – notwendige Verwaltungstätigkeiten für die Arbeit mit der Datenbank (DB) aus. Beide zusammen bilden das Datenbanksystem (DBS). 7 Von der Tabelle zur Datenbank Wir werden nun die Datenbank mit dem DBMS Microsoft Access erstellen. Nach dem Start von Microsoft Access 2010 erwartet uns die obige Ansicht, in der wir aufgefordert werden, einen Namen und einen Speicherort für unsere neue Datenbank anzugeben (s. Ellipse). Geben Sie als Namen nun „Holzhandel_DB.accdb“ ein und wählen Sie ggf. noch einen anderen als den angegebenen Speicherort. Klicken Sie die Schaltfläche „ERSTELLEN“ (unten rechts im Bild). Zunächst müssen nun Tabellen erstellt werden, in denen dann Daten gespeichert werden können. Die erste Tabelle wurde bereits vorab erstellt. 8 Von der Tabelle zur Datenbank Wir gehen in den Entwurfsmodus (s. Ellipse) und nehmen dort das Layout der Tabellen vor: Als ersten Schritt werden wir nach dem Namen gefragt, unter dem die Tabelle in der Datenbank gespeichert wird. Ich empfehle, Datenbankobjekte generell mit einem die Identifikation erleichternden Präfix zu versehen. In unserem Fall „tbl_“ für engl. table = Tabelle. Also: „tbl_kunde“ (ohne die Anführungszeichen) Anmerkung: Es ist generell emfpehlenswert, auf deutsche Umlaute und Sonderzeichen (jenseits von „-“ und „_“) in Datei-, Feld- und Datenbankobjektsnamen zu verzichten. Erstellen Sie nun, wie in der obigen Abbildung zu sehen, die Felder mit den entsprechenden Feldnamen und den angezeigten Felddatentypen. Die angegebene Beschreibung ist optional, hilft jedoch enorm, wenn später andere an der Tabelle Änderungen vornehmen sollten. Hier sollten Informationen über die Einheiten („Benennungen“) der Daten eingetragen werden. Sofern noch nicht geschehen, sollte das Feld „kunde_id“ als Primärschlüssel gewählt werden. Dazu einfach in den Eintrag für das Feld „kunde_id“ klicken und auf die Schaltfläche „PRIMÄRSCHLÜSSEL“ oben links klicken. 9 Von der Tabelle zur Datenbank Ein Klick auf die Schaltfläche „ANSICHT“ wechselt wieder zur Tabellenansicht (nach dem erneuten Speichern der Tabelle). Sie sollte nun so oder ähnlich aussehen: Eingabe der Daten in die Tabelle Nun können Sie die Tabelle „tbl_kunde“ mit den Daten der ursprünglichen Tabelle (wie im Tabellenkalkulationsprogramm) füllen. Mit Druck auf die <Tab>-Taste kann für die Eingabe von Feld zu Feld gesprungen werden. Sollen – während der Eingabe eines Datensatzes („Zeile“) - Eingaben oder Änderungen eines Feldinhaltes rückgängig gemacht werden, genügt ein Druck auf die <ESC>-Taste. Wird die <ESC>-Taste zwei Mal gedrückt, werden alle Änderungen am aktuellen Datensatz verworfen. Erstellen Sie anschließend die weiteren Tabellen „tbl_produkt“ und „tbl_bestellung“ (auf „ERSTELLEN“ klicken, „TABELLE“ auswählen) und füllen Sie diese ebenso mit Daten aus der Tabellenkalkulation. Beachten Sie dabei, dass beide Tabellen über je eine eigene ID verfügen sollen, sowie dass in der Tabelle „tbl_bestellung“ zwei Felder für die Verweise auf Kunden- bzw. Produkt-ID eingerichtet werden (Vorschlag: „ref_kunde_id“ und „ref_produkt_id“, beide vom Felddatentyp „Zahl“). Beachten Sie, dass diese Felder mit den Referenzen auf die Kunden- und auf die Produkt-ID (diese werden als Fremdschlüssel bezeichnet) entsprechend den Zuordnungen der Ursprungstabelle vorgenommen werden sollten. In der Tabelle „tbl_bestellung“ muss also über die entsprechend eingetragene „ref_kunde_id“ ersichtlich sein, welcher Kunde die Bestellung getätigt hat. Ebenso gibt der im Feld „ref_produkt_id“ eingetragene Wert Auskunft über das vom Kunden bestellte Produkt. 10 Von der Tabelle zur Datenbank Beziehung der Daten zueinander Machen wir uns nun einen Moment Gedanken über die Beziehungen der Tabellen zueinander. Anders formuliert: Wie stehen die Daten in den drei Tabellen zueinander in Beziehung? Gehen wir zunächst von der Tabelle „tbl_kunde“ aus. • Ein Kunde führt eine Bestellung durch. • Dafür steht in der Tabelle „tbl_bestellung“ für jede aufgeführte Bestellung die jeweils eindeutige Kunden-ID (in dieser Tabelle als Fremdschlüssel) des bestellenden Kunden. • Da wir aber auch Kunden führen, die noch keine Bestellung durchgeführt haben, kann die Kunden_ID eines Kunden gar nicht (keine Bestellung), einmal (eine Bestellung) oder sogar mehrmals (mehrere Bestellungen) in der Tabelle „tbl_bestellung“ vorkommen. • • • • Da jede Bestellung von genau einem Kunden durchgeführt wurde, steht jeder Datensatz in der Tabelle „tbl_bestellung“ mit genau einem Datensatz der Tabelle „tbl_kunde“ in Beziehung. In unserer vereinfachten Datenbank kann jeder Kunde in einer Bestellung nur genau ein Produkt (in variabler Stückzahl) bestellen. Also steht jeder Datensatz der Tabelle „tbl_bestellung“ mit genau einem Datensatz der Tabelle „tbl_produkt“ in Beziehung. In der Tabelle „tbl_produkt“ sind die verfügbaren Produkte eingetragen. Jedes der aufgeführten Produkte kann von beliebig vielen (oder keinen) Kunden bestellt worden sein. Also steht jeder Datensatz der Tabelle „tbl_produkt“ mit keinem, einem oder mehreren Datensätzen der Tabelle „tbl_bestellung“ in Verbindung. Jeder Datensatz in jeder der Tabellen ist über deren Primärschlüssel eindeutig identifizierbar. So wie wir also aus der bereits erstellten Tabelle „tbl_bestellung“ erkennen können, stehen die Datensätze in den Tabellen über deren Primärschlüssel zueinander in Beziehung. Wir haben uns Gedanken darüber gemacht, mit wie vielen Datensätzen anderer Tabellen ein Datensatz einer konkreten Tabelle in Beziehung steht. Vereinfacht gesagt, unterscheiden wir die Möglichkeiten für 0, 1 und unendlich (∞ ) viele miteinander in Beziehung stehenden Datensätze. 11 Von der Tabelle zur Datenbank Kardinalität Aufgrund der Gegenüberstellung der Beziehung zwischen zwei Tabellen lässt sich der Beziehungstyp (die Kardinalität) der Tabellen formulieren. Für unsere Arbeit genügt es, folgende drei Fälle zu unterscheiden: • 1:1-Beziehung Ein Datensatz einer Tabelle ist mit genau einem Datensatz einer anderen Tabelle verbunden – und andersherum genauso. Wir sprechen von der „1:1-Beziehung“ zwischen zwei Tabellen. Diese wird dadurch erstellt, dass in der „Detailtabelle“ in den Feldeigenschaften des Fremdschlüssel-Feldes festgelegt wird, dass alle Feldinhalte nur ein Mal vorkommen dürfen (keine Duplikate). In Microsoft Access: „Indiziert (keine Duplikate)“. • 1:n-Beziehung Ein Datensatz einer Tabelle ist mit beliebig vielen Datensätzen einer anderen Tabelle in Beziehung. Allerdings steht jeder der Datensätze der anderen Tabelle genau ein Datensatz der ersten Tabelle gegenüber. Dies wird als „1:n-Beziehung“ bezeichnet. • n:m-Beziehung Steht sowohl ein Datensatz einer Tabelle mit mehreren Datensätzen der anderen Tabelle in Beziehung, als auch jeder Datensatz der anderen Tabelle wiederum mit mehreren Datensätzen der ersten Tabelle in Beziehung, handelt es sich um eine „n:m-Beziehung“. Diese werden in relationalen Datenbanken in Form von einer weiteren Tabelle mit zwei 1:n-Beziehungen zu den eigentlich in n:m-Beziehung stehenden Tabellen umgesetzt. In unserem Beispiel modelliert die Tabelle „tbl_bestellung“ also eigentlich einen n:mBeziehung zwischen Kunden und Produkten. Beachte: Wir haben dabei die Möglichkeit außer Acht gelassen, dass ein Datensatz auch keinen verknüpften Datensatz in einer anderen Tabelle haben kann. Dies kann über das Zulassen von leeren Feldern beim Tabellenlayout (in den Feldeigenschaften im unteren Bereich der Tabellenlayout-Ansicht: „Eingabe erforderlich“) gesteuert werden. Nun können wir die Beziehungen der Tabellen zueinander im Datenbankprogramm erstellen. Dies verhindert eine Eingabe von Daten, die gegen das beabsichtigte Datenbankkonzept verstoßen würden. 12 Von der Tabelle zur Datenbank Also klicken wir im Menü auf „DATENBANKTOOLS“ und dort auf das Symbol „BEZIEHUNGEN“. Nun fügen wir nacheinander alle der erstellten Tabellen hinzu und klicken auf „SCHLIESSEN“. Wie bereits festgestellt, stehen die Tabellen über die Primärschlüsselfelder (bzw. Fremdschlüsselfelder) in Beziehung zueinander. Durch einfaches Ziehen der Primärschlüsselfelder auf die entsprechenden Fremdschlüsselfelder wird eine Beziehung in der Datenbank erstellt. Dabei kann festgelegt werden, dass die referentielle Integrität der beteiligten Tabellen jederzeit gewahrt bleiben muss. Unter referentieller Integrität versteht man, dass Datensätze einer Tabelle über ihren Fremdschlüssel nur auf tatsächlich existierende Datensätze der anderen Tabelle verweisen dürfen. Es dürften damit also in der Tabelle „tbl_bestellung“ nur Datensätze vorkommen, die mit dem Fremdschlüssel-Feld „ref_kunde_id“ auf einen in der Tabelle „tbl_kunde“ existierenden Datensatz verweisen. Gleiches sollte für die Beziehung zwischen den Tabellen „tbl_bestellung“ und „tbl_produkt“ vorgenommen werden. Ohne die meist sinnvolle Verwendung der Option „referentielle Integrität“ könnten Datensätze in der Tabelle „tbl_bestellung“ auf nicht vorhandene Kunden bzw. auf nicht vorhandene Produkte verweisen. Sollen Datensätze einer Tabelle gelöscht werden, auf die sich Datensätze einer anderen Tabelle beziehen, wird dieses Löschen nach den Regeln der referentiellen Integrität unterbunden. Ebenso wäre es möglich, die referentielle Integrität zu wahren, indem nicht nur die zu löschenden Datensätze einer Tabelle, sondern die mit ihr verbundenen Datensätze der anderen Tabelle zu löschen. Diese Löschweitergabe muss jedoch mit Bedacht eingesetzt werden. 13 Von der Tabelle zur Datenbank Kleine Abfragen: Überprüfung der gemachten Arbeiten Mit einem neuen Typ von Datenbankobjekten (wir kennen bisher die Tabellen), der Abfrage, können wir Informationen aus der Datenbank flexibel anzeigen lassen. Dazu wählen in Access das Menü „Erstellen“ und klicken dann auf „Abfrageentwurf“. Zunächst müssen wir im sich öffnenden Dialogfenster alle Tabellen auswählen, aus denen wir Daten darstellen wollen. Auf „Schließen“ klicken, wenn alle benötigten Tabellen eingefügt wurden. Tabellen, die nicht benötigt werden, können anschließend – wie auch beim Beziehungslayout – angeklickt und dann mit Druck auf die <ENTF>-Taste aus der Abfrage entfernt werden. Nun müssen lediglich die benötigten Felder der eingeblendeten Tabellen per Doppelklick dem Abfrageentwurf hinzugefügt werden. Die Reihenfolge der Felder lässt sich per Maus später wieder verändern. Wählen Sie nun z. B. aus der Tabelle „tbl_kunde“ die Felder, die Namen, Vornamen und Adresse enthalten. Ein Klick auf die Schaltfläche „Ansicht“ wechselt zwischen der Tabellen- und der Entwurfsansicht der Abfrage. Wieder zurück in der Entwurfsansicht können Sie nun die Felder, die die Menge, die Artikelbeschreibung und den Nettopreis enthalten, hinzufügen. Sind diese Felder in einer Tabelle, die Sie im Moment noch nicht im Abfrageentwurf eingebaut haben, können Sie die Tabelle mit einem Klick auf die Schaltfläche „Tabelle anzeigen“ hinzufügen. Auf diese Weise können Sie eine Abfrage erstellen, die die Daten wie in unserer Ausgangstabelle anzeigen lässt. Jedoch mit dem Unterschied, dass die Daten in unterschiedlichen Tabellen gespeichert sind. Spätestens beim Verlassen der Abfrage sollte diese (als Datenbankobjekt in der Datenbank) gespeichert werden, z. B. unter dem Namen „qry_Bestellungen-Kunden“ (engl. Query = (Ab-) Frage). 14 Von der Tabelle zur Datenbank Ausblick Im IT-Modul „D2: Arbeiten in Datenbanksystemen“ [3] steht die Arbeit mit Abfragen im Vordergrund. Diese können so erweitert werden, dass z. B. notwendige Einheiten (s. o.) mit angezeigt werden und weitere Informationen aus den in der Tabelle gespeicherten Daten berechnet werden können (z. B. MwSt. und Bruttobetrag aus Nettobeträgen). Ebenso wird die Arbeit mit der Datenbank durch die Erstellung weiterer Datenbankobjekte (Formulare für die Ein-/ Ausgabe von Daten, Berichte zur Erstellung druckbarer Ausgaben) erweitert und für den Endbenutzer vereinfacht. Abfragen, wie auch Tabellen, dienen als Datenquellen für die Ansteuerung von Serienbriefen oder Etiketten, die durch Textverarbeitungsprogramme vorbereitet werden können. Im professionellen Bereich spielen neben den hier erwähnten relationalen DBMS vor allem Datenbank-Server eine Rolle. Diese sind Dienste, die auf einem zentralen Server laufen und berechtigten Computern den Zugriff auf Teile des Datenbestandes ermöglichen. Beispiele für solche Datenbank-Serversoftware sind u. a. Oracle DB, MySQL, PostgreSQL. Viele solche Systeme können mit der standardisierten Abfrage- und Verwaltungssprache „SQL“ (Structured Query Language) erstellt, gesteuert und bedient werden. 15 Von der Tabelle zur Datenbank Literaturempfehlungen John Kaufeld: „Access 97 für Dummies“, mitp, Bonn 1999, ISBN 3-8266-2746-6 Allen G. Taylor: „Datenbanken für Dummies“, mitp, Bonn 2001, ISBN 3-8266-2938-8 Gerhard Brosius: „Access 2000 professionell – Datenbankmanagement mit Office 2000“, AddisonWesley, München 1999, ISBN 3-8273-1541-7 Andreas Meier, „Relationale Datenbanken“, Springer, Heidelberg 2001, ISBN 3-540-41468-1 Linkliste [1] Moodle-Kurs zur E-Session/ SchiLf http://www.brn-moodle.de > Schulbereich > Unterfranken > Regionale Lehrerfortbildung http://www.brn-moodle.de/course/view.php?id=4541 [2] Donkarls Access-Seiten: http://www.donkarl.com/ [3] Lehrplan für das Fach Informationstechnologie (Realschule, Bayern) http://www.isb.bayern.de > Realschule > Lehrpläne > Informationstechnologie http://www.isb.bayern.de/download/8868/lehrplan_informationstechnologie_082008.pdf [4] LibreOffice (eine kostenlose open-source Office-Suite) https://www.libreoffice.org [5] OpenOffice (eine kostenlose open-source Office-Suite) http://www.openoffice.org [6] LibreOffice-Handbücher http://de.libreoffice.org/hilfe-kontakt/handbuecher/ 16