Simon, Alexander: Entwicklung eines Abfragesystemes für

Werbung
Entwicklung eines Abfragesystemes
für verfahrenstechnische Messdaten
Magisterarbeit
von
Alexander Simon, Bakk.techn.
9630284, Telematik
Institut für Informationssysteme und Computer Medien (IICM)
in Kooperation mit
Institut für Grundlagen der Verfahrenstechnik und Anlagentechnik
der Technischen Universität Graz
Graz, September.2005
Begutachter: Ao.Univ.-Prof. Dipl.-Ing.Dr.techn. Nikolai Scerbakov
Betreuer: Dipl.-Ing. Alexander Slanina
INHALTSVERZEICHNIS
1
Inhaltsverzeichnis
1 Einleitung
3
2 Zielsetzung
4
3 Übersicht von existierenden Systemen und Lösungen
3.1 DDBST - Dortmund Data Bank Software and Separation Technology
GmbH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 DETHERM-Datenbank . . . . . . . . . . . . . . . . . . . . . . . .
5
4 Architektur und Technologie
4.1 Auswahl einer geeigneten Programmierumgebung . . .
4.2 Auswahl einer geeigneten Datenbank . . . . . . . . . .
4.3 Verwendete Software . . . . . . . . . . . . . . . . . .
4.3.1 Apache-HTTP-Server . . . . . . . . . . . . . .
4.3.2 PHP . . . . . . . . . . . . . . . . . . . . . . . .
4.3.3 MySQL . . . . . . . . . . . . . . . . . . . . . .
4.3.4 Eclipse . . . . . . . . . . . . . . . . . . . . . .
4.3.5 MySQL Querybrowser . . . . . . . . . . . . . .
4.3.6 Concurrent Versions System - CVS . . . . . . .
4.3.7 Versionen der verwendeten Programme und Tools
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
7
7
8
8
8
9
10
10
13
15
15
5 Struktur der Datenbank
16
6 Use Cases
6.1 Definition von Use Cases . . . . . . . . . . . . .
6.2 Use Cases im Abfragesystem . . . . . . . . . . .
6.2.1 UC1: Einfache Suche . . . . . . . . . . . .
6.2.2 UC2: Ausbessern fehlerhafter Datensätze .
6.2.3 UC3: Visualisierung gefundener Datensätze
6.2.4 UC4: Löschen von Messdaten . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
18
18
18
18
20
21
7 User Roles
7.1 Definition von User Roles . . . . . . . . . .
7.2 User Roles im Abfragesystem . . . . . . . .
7.2.1 UR1: Normale Benutzer . . . . . . .
7.2.2 UR2: Autor mit beschränkten Rechten
7.2.3 UR3: Administrator . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
. 22
. 22
. 22
. 22
. 22
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8 Implementation
23
8.1 Online-Abfragesystem Implementation . . . . . . . . . . . . . . . . 23
8.1.1 Hauptmenü . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
INHALTSVERZEICHNIS
8.1.2
8.1.3
8.1.4
8.1.5
8.1.6
8.2
8.3
8.4
8.5
Suche nach Substanzen . . . . . . . . . . . . . . . . . . . . .
Suche nach Journaleinträge . . . . . . . . . . . . . . . . . . .
Suche nach Literatureinträge . . . . . . . . . . . . . . . . . .
Einfache Messdaten Suche(„simple data property search“) . .
Erweiterte Messdaten Suche, Expertensuche („advanced data
property search“) . . . . . . . . . . . . . . . . . . . . . . . .
Datenimport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2.1 Format der CSV-Daten . . . . . . . . . . . . . . . . . . . . .
8.2.2 Ausschnitt aus HTML-Code für „upload“ Funktionalität . . .
Löschen von Messdaten. . . . . . . . . . . . . . . . . . . . . . . .
Modifikation von Tabellen . . . . . . . . . . . . . . . . . . . . . .
Überblick über GET and POST Requests . . . . . . . . . . . . . . .
2
25
29
33
37
41
45
45
46
48
48
50
9 Ergebnisse und Ausblick
51
A Anhang
A.1 Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2 CVS - Concurrent Versions System . . . . . . . . . . . . . . . . . .
A.2.1 Konfiguration für Debian-Distribution . . . . . . . . . . . . .
A.2.2 Häufigsten Befehle bei der Arbeit mit dem Concurrent Versions
System . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3 Benutzte Sql Anweisungen . . . . . . . . . . . . . . . . . . . . . .
A.3.1 Übersicht wichtiger Hyperlinks für die Benutzung von MySql
A.3.2 Nutzung der „update“ Anweisung . . . . . . . . . . . . . . .
A.3.3 Nutzung der „alter table“ Funktionalität . . . . . . . . . . . .
A.3.4 „like“ Funktionalität . . . . . . . . . . . . . . . . . . . . . .
A.3.5 „order by“ Funktionalität . . . . . . . . . . . . . . . . . . . .
A.3.6 „join“ Funktionalität . . . . . . . . . . . . . . . . . . . . . .
A.3.7 „delete“ Funktionalität . . . . . . . . . . . . . . . . . . . . .
A.4 Nutzung des „mysqldump“ Backuptools . . . . . . . . . . . . . . .
52
52
52
52
53
54
54
54
55
55
56
56
56
56
B MySQL Code
58
B.1 MySQL „update“ Code Auszüge . . . . . . . . . . . . . . . . . . . 58
B.2 MySQL ‘"join“ Code Auszüge . . . . . . . . . . . . . . . . . . . . 60
B.3 MySQL „order by“ Code Auszüge . . . . . . . . . . . . . . . . . . 64
1 EINLEITUNG
3
1 Einleitung
Am Institut für Grundlagen der Verfahrenstechnik und Anlagentechnik der TU
Graz wurde seit 1992 in Zusammenarbeit mit Prof. Matous von der Technischen
Hochschule Prag und Prof. Gmehling von der Universität Oldenburg eine Datensammlung für Gasdichten und Virialkoeffizienten erstellt, um daraus für den
Verfahrenstechniker interessante Stoffdaten zu gewinnen[1, 2, 3]
Die Messergebnisse von Gasdichten sind für den Verfahrenstechniker besonders
bei der Auslegung von chemischen Anlagen relevant, da sie einen großen Einfluss
auf die Dimensionierung der Apparate haben.
Die Integration der Messdaten in einer Datenbank ermöglicht einen strukturierten
Zugriff auf Stoffdaten, welche in weiteren Arbeiten am Institut zur Berechnung
von Zustandsgleichungen und deren Mischungsregeln herangezogen werden.
Vorarbeit für ein gut funktionierendes System wurde geleistet von Dipl.Ing. B.
Edegger in der Diplomarbeit „Automatische Umrechnung von Messdaten in ihre
SI-Einheiten, Evaluierung und Speicherung in einer Online-Datenbank“[1].
Um den Zugriff auf die Daten zu erleichtern, wird nun das existierende System
um ein Abfragesystem erweitert. Dieses ermöglicht dann die zielgerichtete Suche
nach Daten, welche dann in weiteren Schritten verarbeitet werden sollen.
2 ZIELSETZUNG
4
2 Zielsetzung
Ziel dieser Arbeit ist es, am Institut für Grundlagen der Verfahrenstechnik und Anlagentechnik der TU-Graz, ein Online-Abfragesystem
für die Messdatensammlung von Gasdichten und Virialkoeffizienten
zu erstellen.
Die Arbeit gliedert sich in folgende Teilbereiche:
• Das Kapitel „Übersicht von existierenden Systemen und Lösungen“ beschäftigt sich mit dem am Institut für Grundlagen der Verfahrenstechnik und Anlagentechnik benutzten System. Es wird begründet, warum es notwendig
war, auf ein neues System zu wechseln und welche Vorteile es bringt.
• Das Kapitel „Architekturen und Technologien“ beschreibt den eingesetzten
Webserver, die benutzte Skriptsprache und das dahinterliegende Datenbank
Management System. Zusätzlich werden technische Hilfsmittel beschrieben,
die für das zu entwickelnde System eingesetzt wurden.
• Das Kapitel „Use Case“ zeigt vorhandene Prozesse für ein Abfragesystem.
Beschrieben werden alle Suchvarianten, die in einem Abfragesystem vorkommen können.
• Das Kapitel „User Roles“ beschreibt existierende Rollen für ein Abfragesystem.
• Das Kapitel „Implementation“ beschäftigt mit Modifikationen und Erweiterungen des bestehenden Systems. Der Hauptteil diese Kapitels macht die
Suche aus, die Ziel dieser Arbeit war. Detaillierter betrachtet wird hier die
Suche nach Messdaten, Substanzen, Literatur und Journalen, Aufbau der
Suchmasken und Darstellung der gefundenen Ergebnisse. Erwähnt wird in
diesem Kapitel auch das Löschen von Datensätzen, der Import von Messdaten und die Modifikationen an der Tabelle „Substance“.
• Das Kapitel „Ergebnisse und Ausblick“ beschreibt das Resultat der Arbeit
und liefert Informationen, wo noch Energie eingesetzt werden muss um ein
zuverlässiges sicheres System zu erhalten.
3 ÜBERSICHT VON EXISTIERENDEN SYSTEMEN UND LÖSUNGEN
5
3 Übersicht von existierenden Systemen und Lösungen
Am Markt befinden sich nur sehr vereinzelt Informationssysteme, welche sich mit
der Speicherung und Weiterverarbeitung von Messdaten beschäftigen. Allen Systemen ist aber gemein, dass sie von professionellen Firmen programmiert wurden.
Sie sind deshalb sehr ausgereift, aber leider auch sehr kostenintensiv. Zwei dieser
Systeme sollen hier nun kurz vorgestellt werden.
3.1 DDBST - Dortmund Data Bank Software and Separation Technology GmbH
Seit 1973 beschäftigt sich das Institut für Reaktionstechnik der Universität Oldenburg mit der Sammlung aller Art von Stoffdaten. Sie wurde immer mehr erweitert,
sodass es sich als notwendig erwies, 1989 die Firma DDBST(Abb. 1) zu gründen,
welche den damaligen Datenbestand kommerziell weiterbetreute, um eine immerwährende Aktualisierung zu gewährleisten.
Abbildung 1: DDBST Datenbank System.
Die Daten der Grazer Datenbank werden der DDBST zur Verfügung gestellt. Leider ist durch die Kommerzialisierung des Systemes der Preis eines solchen Pro-
3 ÜBERSICHT VON EXISTIERENDEN SYSTEMEN UND LÖSUNGEN
6
grammes auch sehr hoch, für den klassischen Verfahrenstechniker aber trotzdem
unverzichtbar.
3.2 DETHERM-Datenbank
Die DETHERM-Datenbank (Abb. 2) der DECHEMA (Gesellschaft für Chemische
Technik und Biotechnologie e.V.) stelle ebenfalls ein ähnliches System dar. Es beinhaltet die meisten Daten der Datenbank der DDBST und noch einige mehr. In der
neuesten Version bietet sie sogar einen online-Zugang über den Web-Browser. Leider sind auch hier die Kosten sehr hoch (12 Euro für eine Zeile einer Datentabelle).
Die Grazer Stoffdaten-Datenbank versteht sich daher eher als System, welches
oben genannten zuarbeitet. Es bietet nun eine Möglichkeit on-line Daten in die
Datenbank einzutragen, diese zu überprüfen, zu speichern und auszuwerten. Bisher
fehlte aber die Möglichkeit, in den bestehenden Beständen, gezielt Daten zu suchen.
Abbildung 2: DETHERM Datenbank System.
4 ARCHITEKTUR UND TECHNOLOGIE
7
4 Architektur und Technologie
Bevor man zu entwickeln beginnt, müssen wichtige Punkte geklärt werden, warum
für die Realisierung dieses Systems die Skriptsprache Hypertext Preprocessor
(PHP) in Verbindung mit der Datenbank MySQL und dem HTTP-Server Apache gewählt wurde und welche Vorteile sich daraus ergeben.
Fragen, die es zu beantworten gibt:
• Welche Programmierumgebung ist für die Implementation am besten geeignet?
• Wie sollten die Daten abgespeichert werden?
4.1 Auswahl einer geeigneten Programmierumgebung
Die Architektur „Webanwendung“, welche für die Implementierung des Abfragesystems gewählt wurde, setzt zwingend einen HTTP-Server voraus. Für die Programmierung von Anwendungen unterstützt dieser idealerweise eine Anzahl von
Skriptsprachen, welche wiederum der Lage sind, mit den verschiedensten Systeme
zu kommunizieren.
Der Http-Server Apache[4] bietet die Möglichkeit, mittels serverseitiger Skriptsprachen Webseiten dynamisch zu erstellen. Häufig verwendete Skriptsprachen
sind PHP oder Perl. Diese sind kein Bestandteil des Webservers, sondern müssen
ebenfalls entweder als Module eingebunden werden oder über die CGI-Schnittstelle
angesprochen werden.
Bis vor kurzem lautete die Antwort auf diese Anforderungen noch ’Perl & Apache’. Perl (Practical Extraction and Report Language), eine universell einsetzbare
Skriptsprache mit weitreichender Unterstützung der verschiedensten Systeme sowie der Apache-HTTP-Server waren lange Zeit das ideale Gespann zur Realisation
von Webanwendungen.
Doch PHP hat viele Vorteile (Überblick von PHP). Es ist relativ leicht zu erlernen
und nach kurzer Einarbeitung effizient anwendbar, bietet aber auch einen riesigen
Funktionsumfang für den professionellen Programmierer, vorallem in Hinblick auf
Verwendung mit Datenbanken.
4 ARCHITEKTUR UND TECHNOLOGIE
8
4.2 Auswahl einer geeigneten Datenbank
Für die Abspeicherung der Daten ist es notwendig, ein geeignetes Datenbank Management System (DBMS) zu finden. Für die Implementation ist der relationale
Ansatz am besten geeignet. Darüber hinaus sind die performantesten Systeme
zur Zeit noch immer relationale Datenbank Management Systeme, wobei sich
MySQL[5] als besonders geeignet erweist. Es unterstützt Transaktionen, ist frei
verfügbar, wird über die Datenbanksprache SQL (Structured Query Language)
angesprochen und besitzt eine gute Einbindung in PHP.
4.3 Verwendete Software
Es wird nun ein wenig auf die am meist benutzten Programme und Tools eingegangen. Für PHP wurde das Integrated Developement Environment (IDE) Eclipse
benutzt, für MySQL empfehlenswert ist der Mysql-Query-Browser. Weiters wurde für die Konfiguration der Datenbank das mächtige PHP-Tool „phpmyadmin“
benutzt, welches nur einen WebBrowser benötigt.
4.3.1 Apache-HTTP-Server
Einer der am meist verbreitesten Server ist der Apache HTTP Server. Gezählt wurden weltweit etwa 50 Millionen Server. Der frei verfügbare, sehr leistungsfähige
Server ist in einer Linux und in einer Windows-Version verfügbar, welche beide
immer weiter entwickelt werden. Aufgebaut ist in modularer Form, dies bietet
großen Vorteil in der Neuentwicklung zusätzlicher Funktionalitäten.
Weltweit vertreten ist er mit etwa 70% von den eingesetzten Http-Server. Aktuelle
Informationen kann man auf Netcraft [6] finden.
Die tragende Organisation ist die im Juni 1999 gegründete und aus der Apache
Group hervorgegangene Apache Software Foundation (ASF), die die Entwicklung
rund um den Web-Server und viele andere Vorhaben betreut. Das traditionelle, verteilte Entwicklungsmodell von Open Source findet sich nur entfernt wieder, denn
ein Merkmal dieses Projekts ist die zentrale Kontrolle des Quellcodes, die erlaubt,
schnell Änderungen vorzunehmen.
Obwohl die ASF eine non-profit-Organisation ist, weist sie Charakteristika eines
Unternehmens auf. Beispielsweise gibt es einen Aufsichtsrat, der von Mitgliedern
der ASF gewählt wird, Verantwortung trägt und Entscheidungen fällt.
4 ARCHITEKTUR UND TECHNOLOGIE
9
Weitere Informationen zum Apache-HTTP-Server kann man auf der [4, Apache]
Seite finden.
4.3.2 PHP
PHP Hypertext Preprocessor[7] ist eine weit verbreitete, universell nutzbare Skriptsprache. Speziell optimiert wurde sie jedoch für den Einsatz als server-seitig interpretierte, in HTMLCode eingebettete Sprache zur dynamischen Erzeugung von
Web-Inhalten. Das bedeutet, dass spezifische PHP-Anweisungen (PHP-Tags) in
HTML eingebunden werden, die, wenn die entsprechende HTML-Seite angefordert wird, vom Web-Server beziehungsweise vom PHP-Modul im Web-Server
gelesen und ausgeführt werden.
Die Syntax entspricht weitestgehend der der Programmiersprache C. PHP hat aber
auch aus vielen anderen Programmiersprachen (zum Beispiel Perl) Syntaxelemente entlehnt.
PHP wurde 1995 von Rasmus Lerdorf entwickelt und war in erster Linie eine
Sammlung von Perl-Skripten, welches dann von ihm in C umgesetzt wurde. Die
ersten Versionen von PHP/FI (FI stand für Form Interpreter) waren zu schwach für
Internetanwendungen, wodurch es neu geschrieben wurde. PHP entwickelte sich
dann schnell zu einer vollwertigen Programmiersprache für das Web mit Datenbankschnittstelle und Unterstützung diverser Internet-Protokolle (NNTP, POP3,
IMAP usw.). Von Beginn an als Open-Source-Projekt konzipiert ist PHP für viele
Unix-Systeme, Microsoft Windows, Mac und RISC-OS erhältlich.
PHP unterstützt auch die meisten der heute gebräuchlichen Webserver. Dies umfasst Hyperwave, Apache, Microsoft Internet Information Server, Netscape Server,
Caudium, Xitami, OmniHTTPd und viele andere. Für den Großteil der Server bietet PHP ein eigenes Modul, für die anderen, welche den CGI Standard unterstützen,
kann PHP als CGI Prozessor arbeiten. Vielleicht die größte und bemerkenswerteste
Stärke von PHP ist seine Unterstützung für eine breite Masse von Datenbanken.
Dazu zählen unter anderem dBase, IBM DB2, Microsoft SQL Server, MySQL,
Oracle und PostgreSQL, um nur einige zu nennen.
PHP verfügt auch über äußerst hilfreiche Textverarbeitungsfunktionen, von den
regulären Ausdrücken (POSIX erweitert oder Perl) bis zum Parsen von Extensible
Markup Language (XML) Dokumenten, wobei es sich an die Standards Simple
API for XML (SAX) und Document Object Model (DOM) hält.
4 ARCHITEKTUR UND TECHNOLOGIE
10
4.3.3 MySQL
MySQL[5] ist ein relationales Datenbank Management System (RDBMS). Als
Open Source SQLDatenbank steht MySQL unter der GPL (GNU General Public
License). MySQL wird von der Firma „MySQL AB“[36] zur Verfügung gestellt.
MySQL AB ist ein kommerzielles Unternehmen, dessen Geschäft darin besteht,
Serviceleistungen rund um die MySQL-Datenbank zur Verfügung zu stellen.
Als relationale Datenbank speichert MySQL Daten in separaten Tabellen, anstatt
sie alle in einem einzigen großen Speicherraum unterzubringen. Hierdurch werden
hohe Geschwindigkeit und Flexibilität erreicht. Die Tabellen werden durch definierte Beziehungen verbunden (Relationen), wodurch es möglich ist, Daten aus
verschiedenen Tabellen auf Nachfrage zu kombinieren. Der SQL-Teil von MySQL steht für „Structured Query Language“ (strukturierte Abfragesprache) - die
verbreiteste standardisierte Sprache für Datenbankzugriffe.
MySQL wurde ursprünglich entwickelt, um sehr große Datenbanken handhaben zu
können, und zwar deutlich schneller als existierende Lösungen. Es wurde mehrere
Jahre in höchst anspruchsvollen Produktionsumgebungen eingesetzt. Heutzutage bietet MySQL eine umfangreiche Reihe nützlicher Funktionen. Connectivity,
Geschwindigkeit und Sicherheit machen MySQL äußerst geeignet, um auf Datenbanken über das Internet zuzugreifen. MySQL ist ein Client-Server-System,
das aus einem multi-thread SQL-Server besteht, der unterschiedliche Backends,
verschiedene Client-Programme und -Bibliotheken, Verwaltungswerkzeuge und
eine Vielzahl an Programmschnittstellen (zum Beispiel für Java, Perl, C, C++,
Eiffel und PHP) unterstützt. An Betriebssystemen werden Linux, Microsoft Windows, Mac OS XServer und FreeBSD unterstützt, um nur einige zu nennen. Auch
Transaktionen sind mit MySQL einfach möglich. Diese stellen sicher, dass Datenbankänderungen vollständig oder gar nicht ausgeführt werden.
4.3.4 Eclipse
Eclipse[9] ist eine auf Java basierte Open Source Entwicklungsumgebung, die sich
besonders durch ihre starke Integrationsfähigkeit auszeichnet (Abb. 3)).
Eclipse unterstützt Syntax Highlighting für viele Programmiersprachen, darunter
Java, Perl, C/C++ und PHP. Weiters hat sie eingebaute Funktionen zum Suchen
und Ersetzen und unterstützt reguläre Ausdrücke. Es können auch so genannte
Projekte angelegt werden, die aus mehreren Dateien bestehen. Das Öffnen eines
Projektes bewirkt das Öffnen aller zugehörigen Dateien, was eine große Arbeits-
4 ARCHITEKTUR UND TECHNOLOGIE
11
erleichterung darstellt.
Die Eclipse Plattform selbst stellt lediglich ein einfaches und schlankes Framework
für Basisfunktionalitäten und Anwendernavigation bereit. Die gesamte Funktionalität wird über Plugins in das Integrated Developement Environment (IDE) integriert. Einige Plugins für Standardfunktionalitäten werden gleich mitgeliefert:
• JDT (Java Development Tools): Das JDT-PlugIn erweitert die Eclipse Plattform um Funktionalitäten die benötigt werden, um Java Programme zu erstellen, editieren, compilieren und debuggen.
• PDE (Plugin Development Environment): Das PDE wird benötigt um Eclipse
Plugins zu entwickeln. Eclipse basiert zwar auf der Programmiersprache Java
und ist auch in Java programmiert, das heißt aber nicht, dass sie auf Java
beschränkt ist. Beispielsweise existieren entsprechende Plugins, die es dem
Benutzer ermöglichen, auch PHP, C++ oder Perl-Programme zu erstellen.
• Concurrent Versions System (CVS)
• Unified Modeling Language (UML)
• Webentwicklung (HTML, XML)
• Application Server Integration (Jboss)
Neben den Plugins existiert eine weitere Möglichkeit den Funktionsumfang der
Eclipse Plattform zu erweitern, nämlich die Einbindung von so genannten externen Tools. Eclipse bietet die Möglichkeit externe Programme aus der IDE heraus
zu starten, deren Ausgabe mitzuverfolgen und zu steuern. Diese Möglichkeit unterstreicht die starke Integrationsfähigkeit dieser IDE und macht die Plattform zu
einer wirklich integrierten Entwicklungsumgebung.
4 ARCHITEKTUR UND TECHNOLOGIE
Abbildung 3: Eclipse mit Codeausschnitt.
12
4 ARCHITEKTUR UND TECHNOLOGIE
13
4.3.5 MySQL Querybrowser
Der MySQL Query Browser[8] ist ein einfach zu bedienendes Visualisierungswerkzeug zur Erstellung, Ausführung und Optimierung von SQL-Abfragen für
die MySQL-Datenbank (Abb. 4)). Er bietet eine vollständige Auswahl an Dragand-Drop-Werkzeugen, um die Abfragen visualisiert zu erstellen, zu analysieren
und zu verwalten. Zusätzlich werde folgende Funktionalitäten und Werkzeuge angeboten:
• Die Symbolleiste, um Abfragen einfach zu erstellen und auszuführen und in
der Abfragenhistorie zu navigieren.
• Den Skripteditor, der die Möglichkeit bietet, SQL-Befehle manuell zu erstellen und zu editieren.
• Das Ergebnisfenster, so daß man auch ganz einfach mit Mehrfachabfragen
arbeiten und diese vergleichen kann.
• Den Objektbrowser, der die Möglichkeit anbietet, Datenbanken, Lesezeichen
und Historie mit einer webbrowserähnlichen Oberfläche zu verwalten.
• Den Datenbankexplorer, mit dem man Tabellen und Felder zur Abfrage auswählen sowie Tabellen erstellen und löschen kann.
• Den Tabelleneditor, der das einfache Erstellen, Verändern und Löschen von
Tabellen erlaubt
• Die Direkthilfe, die sofortigen Zugriff auf ausgewählte Objekte, Parameter
und Funktionen gibt.
4 ARCHITEKTUR UND TECHNOLOGIE
Abbildung 4: MySQL Query Browser mit beispielhafter Abfrage.
14
4 ARCHITEKTUR UND TECHNOLOGIE
15
4.3.6 Concurrent Versions System - CVS
Concurrent Versions System [11] ist wie der Name sagt ein Hilfsmittel für die
Versionskontrolle. In diesem Falle wird der Sourcecode verwaltet. Dieses Tool ist
hilfreich, wenn mehrere Programmierer am gleichen Projekt arbeiten. Man kann
immer am neuesten Stand bleiben, durch Aufruf von „cvs update“. Arbeitet man
auf unterschiedlichen Rechner, so gibt es Vorteile durch das Concurrent Versions
System. Man kann von jeden Rechner aus mit den aktuellsten Stand arbeiten. Die
Daten selbst liegen auf einem Rechner, der als Server fungiert. Auf diesen werden
die Daten gespeichert, inklusive Versionsinformationen und Änderungen.
4.3.7 Versionen der verwendeten Programme und Tools
• Apache/2.0.54 (Debian GNU/Linux)
• PHP/4.3.10-15 Server at localhost Port 80
• MySQL Ver 12.22 Distrib 4.0.23, for pc-linux-gnu (i386)
• Eclipse 3.0.1
• Phpeclipse-plugin 1.1.3 [10]
• Concurrent Versions System (CVS) 1.12.9 (client/server)
• MySQL QueryBrowser 1.1.5
Nachdem nun nun die Vorteile des benutzten Systemes gezeigt wurden, wird nun
etwas auf die Struktur der vorhandenen Datenbank eingegangen.
5 STRUKTUR DER DATENBANK
16
5 Struktur der Datenbank
Die Datenbank für das Speichern der Messdaten und zusätzlichen Informationen
hat momentan 13 verschiedene Tabellen. Diese teilen sich in zwei Hauptgruppen
auf, wobei die eine Hälfte der Beschreibung der Messdatenquelle dient, die andere
Hälfte der Speicherung der Messwerte. Zur ersten Hälfte gehören die Tabellen
„substance“, „literature“, „journal“ und „data_property“ (Abb. 5).
Die Tabelle „substance“ speichert alle vorkommenden Substanzen, mit denen Messungen durchgeführt wurden. Die Substanz wird durch eine eindeutige Substanznummer gekennzeichnet. Die Literaturstelle, in der die Messdaten veröffentlicht
werden, sind in der Tabelle „literature“ abgelegt. Auch hier werden die Literaturstellen durch eindeutige Literaturnummern identifiziert. Zusätzlich wird auch das
jeweilige Journal festgelegt, diese kann man in der Tabelle „journal“ finden.
In der Tabelle „data_property“ wird eine genaue Beschreibung der gemessenen
Werte, sowie der Messanordnung gespeichert. Weiters enthält jeder Messdatensatz eine eindeutige Messdatensatznummer.
Die Messwerte werden in neun Tabellen gespeichert, wobei je drei Tabellen einem
Messdatentyp zugehörig sind. Diese drei Tabellen enthalten Informationen über
die Originalmesswerte, SI-Messwerte und Einheiten der Messwerte. Die Messdatentypen sind „Gasdichtemessdaten“, „Virialkoeffizienten“, „Kreuzvirialkoeffizienten“. Diese Art der Strukturierung, welche eigentlich der dritten Normalform
widerspricht war deshalb notwendig, um einen einfachen Datenaustausch mit am
System beteiligten Institutionen zu ermöglichen. Dies beizubehalten war auch eine
Vorgabe an diese Arbeit.
5 STRUKTUR DER DATENBANK
Abbildung 5: Entity Relationship Diagramm der Datenbank
17
6 USE CASES
18
6 Use Cases
6.1 Definition von Use Cases
Use Cases sind Anwendungsfälle, die man sich als eine Sammlung von Szenarenien über den Systemeinsatz vorstellen kann. Jedes Szenario beschreibt eine Sequenz
von Schritten. Jede dieser Sequenzen wird von einem Menschen, einem anderen
System, einem Teil der Hardware oder durch Zeitablauf in Gang gesetzt. Entitäten,
die solche Sequenzen anstoßen, nennt man Akteure. Das Ergebnis dieser Sequenz
muß etwas sein, was entweder dem Akteur, der sie initiierte oder einem anderen
Akteur nutzt.
Ein Use Case ist eine typische Handlung, die ein Benutzer mit dem System ausführt, z.B. Aktienkauf. Use Cases werden durch ein Unified Modeling Language
(UML) Diagramm dargestellt, welche eine bestimmten Anwendungsfall abbildet.
Im Diagramm werden Use Cases durch Ellipsen dargestellt. Verbindungen zu den
entsprechenden Use-Cases werden durch Linien dargestellt. Damit wird angezeigt,
welche Aktoren an dem entsprechenden Use Case beteiligt sind.
6.2 Use Cases im Abfragesystem
Für die Umsetzung eines Abfragesystems existieren mehrere Fallbeispiele.
6.2.1 UC1: Einfache Suche
Die Suche selbst ist ein Use Case. Unterscheiden kann man hierbei mehrere Szenarien. Je nach Szenario existiert eine geeignete Suchmaske. Vorhanden sind Suchmasken für unterschiedliche Tabellen, in denen man suchen kann:
• Suche nach Substanzen(Abb. 6, Maske 14).
• Suche nach Literatur(Abb. 7, Maske 20).
• Suche nach Journalen(Abb. 8, Maske 17).
• Suche nach Messdaten(Abb. 9, Masken 23, 25).
6.2.2 UC2: Ausbessern fehlerhafter Datensätze
Aufgrund möglicher fehlerhafter Eingabe von Datensätzen will man die Möglichkeit wahren, eingegebene Daten ausbessern zu können. Nach dem Korrigieren
6 USE CASES
19
Abbildung 6: Use Case Diagramm Substanzsuche
Abbildung 7: Use Case Diagramm Literatursuche
Abbildung 8: Use Case Diagramm Journalsuche
Abbildung 9: Use Case Diagramm Messdatensuche
6 USE CASES
20
müssen die Daten wieder in der Datenbank abgelegt werden. Dazu benötigt man
Abfragesystem, welchen in bestimmten Tabellen sucht. Die gefundenen Ergebnisse sollen anzeigt und von Benutzern mit Rechten zum Modifizieren der Daten
bearbeitet werden können(Diagramm 10).
Abbildung 10: Use Case Diagramm Datenkorrektur
6.2.3 UC3: Visualisierung gefundener Datensätze
Für Präsentationen besteht der Bedarf, bestimmte Datenbereiche mit speziellen
Eigenschaften darzustellen. Um Eigenschaften oder Verlauf von Werten leichter
zu verstehen , greift man auf die Technik der Visualisierung zurück. Um spezielle
Messbereiche grafisch darzustellen, benötigt man ein Abfragesystem, mit welcher
man eine detaillierte Suche starten kann(Diagramm 11).
Abbildung 11: Use Case Diagramm Visualisierung
6 USE CASES
21
6.2.4 UC4: Löschen von Messdaten
Dieser Use Case beschreibt die Suche nach Messdaten, welche aus der Datenbank
entfernt werden sollen(Diagramm 12).
Abbildung 12: Use Case Diagramm Messdatenlöschung
7 USER ROLES
22
7 User Roles
7.1 Definition von User Roles
Die Rolle eines Benutzers bestimmt einen Arbeitsbereich für eine bestimmte Benutzergruppe, definiert Rechte und Anwendungen. Diese Rollenverteilung ist notwendig, um die Datenbank gegen unerwünschte Änderungen oder Einträge zu
schützen.
7.2 User Roles im Abfragesystem
Für die Umsetzung eines Abfragesystems existieren mehrere Rollen.
7.2.1 UR1: Normale Benutzer
Dieser hat Zugriff auf das System, kann im System suchen und lesen, hat aber
keine Rechte zum Ändern der Daten.
7.2.2 UR2: Autor mit beschränkten Rechten
Dieser Benutzertyp hat nur die Aufgabe, Daten ins System einzuspielen. Autoren
besitzen alle Rechte, die auch normale Benutzer haben.
7.2.3 UR3: Administrator
Dieser hat die gleichen Rechte wie der Autor, nur kann er zusätzlich Daten editieren
und löschen.
8 IMPLEMENTATION
23
8 Implementation
Beschrieben werden hier die Modifikationen, Änderungen und Erweiterungen am
bestehenden System. Ein Überblick über Veränderungen an der vorhandenen Tabellenstruktur wird geliefert, sowie Information über Einbau neuer Funktionalität
für Import von Messdaten und Löschung dieser. Den größten Bereich in diesem
Kapitel deckt das Unterkapitel „Abfragesystem“ ab.
8.1 Online-Abfragesystem Implementation
Das Abfragesystem teilt sich in mehrere Bereiche auf. Die wichtigsten zu erwähnenden Bereiche sind die „simple data property search“ und die „advanced data
property search“. Der Einstiegspunkt zum Abfragesystem beginnt beim Hauptmenü(Abb. 13). Von diesem aus kommt man über das einfache Suchformular zur
erweiterten Suche.
8.1.1 Hauptmenü
Das Hauptmenü bietet den Einstiegspunkt für die Suche. Sie bietet Suchmöglichkeiten in unterschiedlichen Tabellen:
• Substanzsuche
• Journalsuche
• Literatursuche
• Die „Messdaten“ Suche unterteilt sich in zwei Suchvarianten:
Die einfache Suche oder „simple data property search“
Die erweiterte Suche, Expertensuche oder „advanced data property search“
8 IMPLEMENTATION
Abbildung 13: Hauptmenüseite
24
8 IMPLEMENTATION
25
8.1.2 Suche nach Substanzen
Bei der Suche nach Substanzen können folgende Felder (Abb. 14) als Suchbegriff
benutzt werden:
• Substanz Nummer
• CAS(Chemical Abstracts Service)[15]
• Name der Substanz in Englisch
• Name der Substanz in Deutsch
• Synonyme der Substanz.
• chemische Formel der Substanz
Die einzelnen Suchfelder können „AND“ oder „OR“ verknüpft werden.
Die Ergebnisse werden in einer Tabelle angezeigt(Abb. 15). Aus dieser Liste kann
man die gewünschte Substanz auswählen und den Inhalt in einer für die Substanz
angepasste Maske anzeigen lassen(Abb. 16). Ist man als Benutzer mit Editierrechten eingeloggt, kann man bei dieser Ergebnisanzeige, Daten ändern. Diese
Änderungen können dann in der Datenbank abgespeichert werden.
8 IMPLEMENTATION
Abbildung 14: Suche nach Substanzeinträgen.
26
8 IMPLEMENTATION
Abbildung 15: Liste der gefundenen Substanzeinträge.
27
8 IMPLEMENTATION
Abbildung 16: Anzeige eines gefundenen Substanzeintrages.
28
8 IMPLEMENTATION
29
8.1.3 Suche nach Journaleinträge
Bei der Suche nach Journalen können folgende Felder (Abb. 17) als Suchbegriff
benutzt werden:
• Journal Nummer
• CASSI (Chemical Abstracts Service Source Index)[12]
• Titel des Journals
• Herausgeber des Journals
• ISSN (International Standard Serial Number) [13]
Die einzelnen Suchfelder können „AND“ oder „OR“ verknüpft werden.
Die Ergebnisse werden in einer Tabelle angezeigt(Abb. 18). Aus dieser Liste kann
man das gewünschte Journal auswählen und den Inhalt in einer für das Journal angepasste Maske anzeigen lassen(Abb. 19). Ist man als Benutzer mit Editierrechten
eingeloggt, kann man bei dieser Ergebnisanzeige, Daten ändern. Diese Änderungen können dann in der Datenbank abgespeichert werden.
8 IMPLEMENTATION
Abbildung 17: Suche nach Journalen.
30
8 IMPLEMENTATION
Abbildung 18: Liste der gefundenen Journaleinträge.
31
8 IMPLEMENTATION
Abbildung 19: Anzeige eines gefundenen Journaleintrages.
32
8 IMPLEMENTATION
33
8.1.4 Suche nach Literatureinträge
Die Literatursuche wurde etwas anders konzipiert, als die Suche nach Substanzen
oder Journalen. Sie enthält neben der Abfrage in der Tabelle Literatur eine zusätzliche Abfrage in der Tabelle Journal, welche durch ein „Join“ verbunden sind. Die
einzelnen Suchfelder können „AND“ oder „OR“ verknüpft werden.
Bei der Suche nach Literatur können folgende Felder (Abb. 20) als Suchbegriff
benutzt werden:
• Literatur Nummer
• Titel des Artikels
• Autor oder Autoren
• Erscheinungsjahr des Artikels
• Flags
Zusätzlich kann man die Sucheergebnisse einschränken, indem man auch nach
Journal (Abb. 20) sucht. Hier sind folgende Suchfelder vorhanden:
• Journal Nummer
• Titel des Journals
• ISBN/ISSN
Die Ergebnisse werden in einer Tabelle angezeigt(Abb. 21). Aus dieser Liste kann
man die gewünschte Literatur auswählen und den Inhalt in einer für die Literatur
angepasste Maske anzeigen lassen(Abb. 22). Ist man als Benutzer mit Editierrechten eingeloggt, kann man bei dieser Ergebnisanzeige, Daten ändern. Diese
Änderungen können dann in der Datenbank abgespeichert werden.
8 IMPLEMENTATION
Abbildung 20: Suche nach Literatur.
34
8 IMPLEMENTATION
Abbildung 21: Liste der gefundenen Literatureinträge.
35
8 IMPLEMENTATION
Abbildung 22: Anzeige eines gefundenen Literatureintrages.
36
8 IMPLEMENTATION
37
8.1.5 Einfache Messdaten Suche(„simple data property search“)
Bei der einfachen Suche nach Messdaten kann man nach folgenden Feldern suchen
(Abb. 23):
• Nummer der erste Substanz.
• Nummer der zweiten Substanz.
• Literatur Nummer.
• Journal Nummer
• Art der Daten. Bei der Literatur wird selektiert, ob überhaupt nutzbare Daten
vorkommen. Folgende Möglichkeit stehen zur Auswahl:
blank; Literatur hat keine verwertbaren Messdaten.
pure data; Literatur hat Messdaten für Reinstoffe.
binary data; Literatur hat Messdaten für Binärgemische.
ternary data; Literatur hat Messdaten für Gemische
aus drei oder mehr Substanzen.
• Typ der Messdaten. Folgende stehen momentan zur Auswahl:
PVT Data
Virial coefficients - Leidenform
Virial coefficients - Berlinform
Cross Virial coefficients - Leidenform
Cross Virial coefficients - Berlinform
• Bereich den die Messung abdeckt. Hier stehen sechs Möglichkeiten zur Auswahl:
sub
super
dew
crit
extended
unknown
8 IMPLEMENTATION
38
• Für Messdatensätze können Flags gesetzt werden. Diese sind ebenfalls ein
Kriterium für die Suche.
• Literatureinträge können bestimmte Flags gesetzt haben. Diese sind ebenfalls ein Kriterium für die Suche.
Die vorhandenen Buttons mit der Beschriftung „search...“ ermöglichen die Suche
in der dem Feld entsprechenden Tabelle. Benötigt man eine Journal Nummer, so
wird man nach drücken des Buttons „search journal“ die dazugehörige Suchmaske
(Abb. 17) geöffnet.
Die Ergebnisse werden in einer Tabelle angezeigt(Abb. 24). Aus dieser Liste kann
man das gewünschte Ergebnis auswählen und anzeigen lassen. Ist man als Benutzer
mit Löschrechten eingeloggt, hat man die Möglichkeit, die Messdaten zu löschen.
8 IMPLEMENTATION
Abbildung 23: Einfaches Suchformular.
39
8 IMPLEMENTATION
Abbildung 24: Ergebnis der einfachen Suche.
40
8 IMPLEMENTATION
41
8.1.6 Erweiterte Messdaten Suche, Expertensuche („advanced data property search“)
Die Expertensuche ist eine Erweiterung zur einfachen Suche. Die erweiterte Suche enthält zusätzliche Felder, welche als Suchkriterium gesetzt werden können(Abb. 25). So werden hier nicht nur vollständige Datensätze ausgegeben, sondern die gesamten Messdaten auch zusammengefasst, um eine weitere Verarbeitung - grafisch oder analytisch - zu ermöglichen. Beispielsweise kann der gesuchte
Temperatur- oder Druckbereich eingeschränkt werden. Dies kann die Anzahl der
gefundenen Elemente wesentlich reduzieren. Weiters existiert die Möglichkeit,
die Ergebnisse in bestimmter Reihenfolge anzeigen zu lassen(Abb. 26). Durch den
Button „set sortorder“ kann man die Reihenfolge festlegen. Zur Auswahl stehen
bestimmte Felder, die sortiert werden können. Man kann festlegen, ob ein Feld aufsteigend oder absteigend sortiert werden soll. Das Resultat kann man in Abb. 27
betrachten. Auf dieser Seite werden mehrere Anforderungen realisiert.
8 IMPLEMENTATION
Abbildung 25: Erweitertes Suchformular.
42
8 IMPLEMENTATION
Abbildung 26: Sortierung der Ergebnisse festlegen.
43
8 IMPLEMENTATION
Abbildung 27: Ergebnis der erweiterten Suche.
44
8 IMPLEMENTATION
45
8.2 Datenimport
Dieser Punkt erweitert die Eingabe von Daten in der Weise, dass Datenproperties
über eine existierende Exceldatei importiert werden. Der Datensatz in Excelformat
basierend, wird in ein „comma seperated format“ (csv) umgewandelt. Dieses Format hat den Vorteil, leicht lesbar zu sein. Diese Daten werden in die Datenbank portiert. Dazu muss das existierende Inputhandling erweitert werden. In input_unit3
[1] wird das tabellarische Eingabesystem um eine Datenupload Funktionalität erweitert(Abb. 28).
Diese Funktionalität liefert mehrere Vorteile.
• Der Arbeitsvorgang wird beschleunigt. Messdaten brauchen nicht mehr via
Formular eingegeben werden. Dieser zeitintensive Vorgang entfällt.
• Die Daten, welche eingegeben werden, enthalten weniger Fehler, da Eingabe
via Formulare fehleranfälliger ist.
• Zusätzlich findet eine Überprüfung der importierten Daten auf Korrektheit
statt. Fehlerhafte Einträge in der „csv“-Datei werden gemeldet.
• Die Arbeit, Messdaten von Datenblättern direkt in die Datenbank einzugeben
fällt weg, diese Arbeit kann ausgelagert werden.
Das Einlesen von „csv“-Daten findet mit der „php“-Hifsmethode „fgetcsv“ statt
[38]. Diese kann „csv“ Dateien mit unterschiedlichen Seperatoren lesen. In diesem Fall wurde vorgeschlagen, Messdateneinträge durch Tabulatoren zu trennen.
Diesen Trenner kann man als Argument bei der Methode „readcsv“ mitangeben.
8.2.1 Format der CSV-Daten
Die Daten haben folgendes Format zu erfüllen.
• Dateneinträge werden durch einen Tabulator getrennt.
• Numerische Datensätze können gelesen werden, wenn sie folgende Bedingungen erfüllen:
Eine Zahl [0-9].
Eine Zahl [0-9], umgeben von Anführungszeichen.
• Nicht gesetzte Werte werden gekennzeichnet durch:
„“
leeres Feld.
8 IMPLEMENTATION
46
Eingefügt wird das ganze im bestehenden Code bei der switch Abfrage: "check
input unit3". Es kommt ein Fileabfrage hinzu, die mit $next verknüpft auf switch
das lesen triggert.
8.2.2 Ausschnitt aus HTML-Code für „upload“ Funktionalität
Eingebunden im Html Code (Abb. 28) sieht die „upload“-Funktionalität folgendermassen aus.
<form enctype=“multipart/form-data“ method=“post“>
<input type=“hidden“ name=“MAX_FILE_SIZE“ value=“99000“ />
Upload CSV file:
<input name=“userfile“ type=“file“ />
<input name=“next“ type=“submit“ value=SSend File"/>
</form>
Das Attribut „name“ setzt den angegeben Wert für den bestimmten Typ. Somit
kann dieser Wert global in der php-session gelesen werden. Will man in diesem Codeausschnitt den Namen von der Datei auslesen, erfolgt der Zugriff durch:
„$_FILES[’userfile’][’name’];“
Die Grösse der zu lesenden Dateien ist konfigurierbar, wurde in diesem Codeausschnitt aber auf 99000 Bytes festgelegt.
8 IMPLEMENTATION
Abbildung 28: Importieren von Messdaten als csv-Datei.
47
8 IMPLEMENTATION
48
8.3 Löschen von Messdaten.
Messdaten können nur von einem Benutzer mit dementsprechenden Rechten gelöscht werden. Einen normallen Benutzer steht diese Möglichkeit nicht zur Verfügung. Der Löschbutton wird in diesem Falle nicht angezeigt. Siehe Abb. 29). Als
Administrator bekommt man eine andere Darstellung mit der zusätzlichen Option
zur Löschung des Datensatzes(Abb. 30).
Hauptmenü Für den Löschvorgang lese Kapitel Daten löschen.
Abbildung 29: Anzeige für gesuchten Eintrag in Tabelle „Data_Property“ aus Sicht
eines normalen Benutzers.
Abbildung 30: Anzeige für gesuchten Eintrag in Tabelle „Data_Property“ aus Sicht
eines Administrators.
8.4 Modifikation von Tabellen
An der Tabelle „substance“ wurden Erweiterungen getätigt, es wurden zusätzlich
sechs neue Felder angelegt:
• group mit dem Typ varchar(4).
• dipole mit dem Typ decimal(18,5).
• omega mit dem Typ decimal(18,5).
8 IMPLEMENTATION
49
• polarity mit dem Typ tinyint(8).
• vdw_a mit dem Typ decimal(18,5).
• vdw_b mit dem Typ decimal(18,5).
Bei dem Feld „group„ muss geachtet werden, dass dieser Name bei der Suche
unter Anführungszeichen gestellt wird, da sonst MySQL die Query falsch interpretiert.
Umgesetzt wurde die Modifikation der Tabellen mit dem MySQL Befehl „alter
table“, Beschreibung siehe Anhang A.
8 IMPLEMENTATION
50
8.5 Überblick über GET and POST Requests
Dieses Kapitel wurde hinzugefügt, da es wichtig für die Suche war, Daten zum Server zu schicken und wieder zu empfangen. Das HTTP Protokoll[40] unterscheidet
zwei verschiedene Möglichkeiten Daten zu senden. Einerseits gibt es den „GET“
Request und andererseits den „POST“ Request. Der GET Request bedeuted, dass
die Formulardaten in die URL kodiert sind, während bei „POST“ die Forumlardaten im Body des HTTP Requests enthalten sind. Zusätzlich sagt die HTML
Spezifikation aus, dass die „GET“ Methode benutzt werden soll, wenn der „GET“
Request idempotent[41] ist(das heißt, keine Nebeneffekte hat). Viele Datenbankanfragen haben keinen sichtbaren Nebeneffekt und bieten ideale Anwendungen
für den „GET“ Request. Modifiziert eine Datenbankanfrage die enthaltenen Daten,
so sollte als Requesttyp „POST“ verwendet werden.
9 ERGEBNISSE UND AUSBLICK
51
9 Ergebnisse und Ausblick
Ziel dieser Arbeit war es, ein Abfragesystem zu entwickeln, welches die Suche
nach unterschiedlichen Messdaten ermöglicht.
Im speziellen wurde nun am Institut für Grundlagen der Verfahrenstechnik und
Anlagentechnik der TU Graz ein Abfragesystem entwickelt, welches eine effiziente Suche nach Gasdichtemessdaten und Virialkoeffizienten bietet.
Weiters deckt das Abfragesystem die Suche in anderen Tabellen ab, welche zusätzliche Informationen zu den Messdaten speichert. Gemeint sind die Tabellen
„journal“, „literature“ und „substance“. Hier existieren nun zusätzliche Suchmasken. Jede Suchmaske ist einer Tabelle angepasst, um effizient nach gewünschten
Daten suchen zu können. Die Ergebnisse können dann einzeln in einer weiteren
Maske betrachtet werden. Benutzer mit Editierrechten können die Datensätze bearbeiten und vorhandene Fehler korrigieren. Nach Beendigung des Arbeitsvorganges
können modifizierte Datenfelder wieder in der Datenbank abgespeichert werden.
Ein weiterer Vorteil dieses Systems liegt darin, das nach der Expertensuche die
Messdaten einfach weiterverarbeitet werden können. Die Daten können grafisch
dargestellt, oder auch im Filesystem abgelegt werden.
Damit aus dem vorhandenen Produkt ein zuverlässiges, sicheres System wird, muss
noch viel Energie investiert werden. Obwohl schon viel an Vorarbeit geleistet wurde, fehlt in Bereichen „Sicherheit“, „Hochverfügbarkeit des Computersystemes“,
"Datensicherungsstrategie„, „Benutzerverwaltung“ eine Strategie, dies umzusetzen.
A ANHANG
52
A Anhang
A.1 Apache
Benutzt wird Apache mit der Version 2.0.54 (Debian GNU/Linux).
Die Konfigurationsdatei php4.ini muss um den Eintrag „extension=mysql.so“ erweitert werden.
Weiters wird die Datei „/etc/apache/conf.d/config_file“ modifiziert.
<IfModule mod_php4.c>
php_flag display_errors on
php_flag log_errors on
php_flag register_globals on
php_value max_execution_time 90
php_value memory_limit 20M
php_value session.save_path "/tmp"
php_value upload_max_filesize 1M
php_value session.gc_maxlifetime 3600
</IfModule>
A.2 CVS - Concurrent Versions System
A.2.1 Konfiguration für Debian-Distribution
„/etc/inetd.conf“ um folgende Zeile erweitern:
„cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/sbin/cvs-pserver“
Als Benutzer „root“ initialisiert man das Verzeichnis, in dem man das Repository
ablegt via Kommando:
cvs -d /usr/local/cvsroot init
Um Zugriff für andere Benutzer auf das Repository zu ermöglichen, müssen zwei
Dateien erzeugt und im „CVSROOT“-Verzeichnis abgelegt werden. Diese sind
READERS und WRITERS. In diesen werden Benutzer oder Gruppen eingetragen, die Lese- und Schreibrechte für das Repository haben.
Benutzt man „cvs“ in der Konsole benötigt man zusätzlich die Umgebungsvariable
„CVSROOT“. Gesetzt wird sie:
A ANHANG
53
„export CVSROOT=:pserver:asimon@localhost:/usr/local/cvsroot“
Lokaler Zugriff auf Repository:
„export CVSROOT=:local:/usr/local/cvsroot“
Remote Zugriff auf Repository:
„CVSROOT=:ext:username@host:/usr/local/cvsroot“
A.2.2 Häufigsten Befehle bei der Arbeit mit dem Concurrent Versions System
• cvs import -m „Abfragesystem“;
erzeugt ein Modul im Repository mit dem Name „Abfragesystem“.
• cvs login;
greift man das erste Mal auf das Repository zu, muss man sich identifizieren mit Name und Passwort. Bei Erfolg wird im „HOME“ Verzeichnis
eine .cvslogin Datei gespeichert. Diese notiert den erfolgreichen Zugriff, das
identifizieren erspart man sich in Zukunft.
• cvs co pvt;
holt den Inhalt von Modul „pvt“ aus dem Repository und legt diesem in
dem momentan befindlichen Verzeichnis ab.
• cvs edit index.php
ändert die Attribute von „index.php“. Die Datei hat danach das zuätzliche
Attribut beschreibbar gesetzt. Vor dieser Aktion hat man die Datei nur lesen
können.
• cvs diff index.php
vergleicht die lokale Datei mit der Datei im Repository und zeigt die
Zeilen an, die unterschiedlichen Inhalt haben.
• cvs commit
Unterschiede werden im Repository abgespeichert, Versionsnummer
dieser Datei wird erhöht. Zusätzlich kann man eine Loginformation mitangeben. In dieser gibt man meist den Grund an, warum die Datei editiert,
wurde. Wurde Funktionalität verändert. Dies kann mit einem Editor der Wahl
eintragen.
A ANHANG
54
• cvs update
holt vom lokalen Filesystem unterschiedliche Daten mit neueren Ursprungs aus dem Repository und überschreibt die lokalen Dateien. Sind
lokale Dateien mit dem Befehl „cvs edit“ bearbeitet, werden diese nicht
überschrieben. Geänderte Zeilen werden ersetzt, bei Konflikten wird man
über Position des Konfliktes informiert.
• cvs -n update
simuliert ein update. Es zeigt die Unterschiede an, ohne wirklich die
Daten lokal zu überschreiben.
A.3 Benutzte Sql Anweisungen
A.3.1 Übersicht wichtiger Hyperlinks für die Benutzung von MySql
Benutzte Links für die Umsetzung der gestellten Anforderungen. Diese decken nur
den MySQL Bereich ab.
http://dev.mysql.com/doc/mysql/en/delete.html
http://dev.mysql.com/doc/mysql/en/truncate.html
http://dev.mysql.com/doc/mysql/en/load-data.html
http://dev.mysql.com/doc/mysql/en/mysqlimport.html
http://dev.mysql.com/doc/mysql/en/adding-users.html
http://dev.mysql.com/doc/mysql/en/grant.html
http://dev.mysql.com/doc/mysql/en/select.html
http://dev.mysql.com/doc/mysql/en/update.html
http://dev.mysql.com/doc/mysql/en/mysqldump.html
http://dev.mysql.com/doc/mysql/en/alter-table.html
http://dev.mysql.com/doc/mysql/en/replace.html
http://dev.mysql.com/doc/mysql/en/join.html
A.3.2 Nutzung der „update“ Anweisung
Schnelle Hilfe kann man auf http://dev.mysql.com/doc/mysql/en/update.html finden. Benutzt wurde „update“ einerseits, um alte Datensätze zu auszubessern, andererseits um den Benutzer mit Editierrechten Datensätze ändern zu lassen.
• Modifizieren alter Tabelleneinträge mit update.
A ANHANG
55
• Benutzer mit Editierrechten können via Formular Dateneinträge editieren
und abspeichern.
A.3.3 Nutzung der „alter table“ Funktionalität
Informationen kann auf der Seite http://dev.mysql.com/doc/mysql/en/alter-table.
html finden. Verwendet wurde „alter table“ Syntax um die Tabelle „Substance“
um Felder hinzuzufügen.
Auszug eines verwendeten Codestückes:
ALTER TABLE „substance“
ADD „polarity“ TINYINT,
ADD „group“ VARCHAR ( 4 ) ,
ADD „vdw_a“ DECIMAL ( 18, 5 ) ,
ADD „vdw_b“ DECIMAL ( 18, 5 ) ,
ADD „omega“ DECIMAL ( 18, 5 ) ,
ADD „dipole“ DECIMAL ( 18, 5 ) ;
Anzumerken ist ein Feld mit dem Namen „group“, welches unter MySQL ein
Schlüsselwort ist. Dieses muß bei einem MySQL-Statement immer unter Anführungzeichen gestellt werden, andernfalls wäre MySQL irritiert und meldet einen
Fehler im MySQL-Statement.
A.3.4 „like“ Funktionalität
Informationen zu „like“ kann man unter den String Funktionen http://dev.mysql.
com/doc/mysql/en/string-comparison-functions.html finden.
Ein Codestück, welches im Feld „d_range“ nach dem Vorkommen von „sub“ sucht
und zurückgibt, unabhängig von der Position im Feld.
SELECT count (*), d_range FROM data_property where
d_range like "%sub%"
group by d_range;
A ANHANG
56
A.3.5 „order by“ Funktionalität
Bei der erweiterten Suche wurde verlangt, Ergebnisse nach bestimmten Feldern
zu sortieren. Ermöglicht wird das durch die „order by“ Funktionalität, wobei man
zusätzlich noch die Richtung der Sortierung angeben kann (aufsteigend oder absteigend).
Codestücke kann man im order by Abschnitt von Anhang B finden.
A.3.6 „join“ Funktionalität
„JOIN“ verbindet Tabellen miteinander wobei die Verbindung im „ON“ Teil beschrieben wird. „JOIN - ON“ und „, - WHERE“ sind bei der Verarbeitung ähnlich.
Unterschiede gibt es aber in der Geschwindigkeit der Bearbeitung der Abfrage,
da im zweiten Fall ein kartesisches Produkt der Tabellen gebildet wird, welche
in einer temporären Zwischentabelle abgespeichert werden. Erst dann werden die
Zeilen gelöscht, die nicht die WHERE-Bedingung erfüllen. Dies kann zu deutlichen Verschlechterung der Performance führen.
Oft gemachter Fehler bei „JOIN“ Statements ist die Angabe von Bedingungen im
„ON“ Teil, welche sich nur auf eine Tabelle beziehen. Diese Bedingungen gehören
in die „WHERE“ Abfrage.
Codestücke kann man im join Abschnitt von Anhang B finden.
A.3.7 „delete“ Funktionalität
Information zu MySQL „delete“ Funktionalität kann man auf http://dev.mysql.
com/doc/mysql/en/delete.html finden.
A.4 Nutzung des „mysqldump“ Backuptools
Hilfe zu dem MySQL - Backuptool kann man unter http://dev.mysql.com/doc/
mysql/en/mysqldump.html. Das Tool „mysqldump“ hat die Aufgabe, Daten von
Datenbanken auszulesen und im „xml“-Format abzuspeichern. Es ist sehr flexibel
in Bezug auf Datensicherung. Neben Sicherung ganzer Datenbanken kann es auch
einzelne Tabellen exportieren.
Angewendet wurde das Backuptool zum Sichern der „pvt“-Datenbank. Hierzu
wurde die Optionen „–opt“ genommen. Diese liefert eine schnelle Datensicherung
und die „dump“ Datei kann wieder sehr schnell in den MySQL Server geladen
werden.
A ANHANG
57
Für die „pvt“-Datenbank wurde folgende Befehl angewandt:
mysqldump –opt pvt > backup-pvt.sql -p
Um Daten in die Datenbank einspielen zu können, wurde folgende Anweisung
ausgeführt:
mysql -u root pvt < backup-pvt.sql
B MYSQL CODE
58
B MySQL Code
B.1 MySQL „update“ Code Auszüge
Im folgenden werden ein paar Zeilen Code zur „update“ Funktionalität gezeigt,
welche zum Einsatz gekommen sind.
Folgender Code beschreibt das Ersetzen eines Beistrichs durch einen Punkt in einem „Character“ Feld. Zu erwähnen ist hier die „replace“[39] Anweisung, welche
in einem Feld passende Werte ersetzt.
update orig_virial_dp set ov_t = (replace (ov_t, ’,’ , ’.’));
Folgender Code ist ein Beispiel für das Ersetzen eines Beistrichs durch einen Punkt
in mehreren Feldern.
update orig_virial_dp set
ov_t = (replace (ov_t, ’,’ , ’.’)),
ov_t_var = (replace (ov_t_var, ’,’ , ’.’));
Setzen eines leeren Feldes mit dem Wert 1.
update orig_pvt_dp set op_x = „1“ where op_x = „“;
update si_pvt_dp set sp_x = „1“ where sp_x = „“;
update orig_virial_dp set ov_x = „1“ where ov_x = „“;
update si_virial_dp set sv_x = „1“ where sv_x = „“;
Bei Tabelle „orig_virial_dp“ werden alle Felder mit dem Typ „varchar(50)“, die
vorhandenen Beistriche durch einen Punkt ersetzt.
update orig_virial_dp set
ov_t = (replace (ov_t, ’,’ , ’.’)),
ov_t_var = (replace (ov_t_var, ’,’ , ’.’)),
ov_x = (replace (ov_x, ’,’ , ’.’)),
ov_x_var = (replace (ov_x_var, ’,’ , ’.’)),
ov_2 = (replace (ov_2, ’,’ , ’.’)),
ov_2_var = (replace (ov_2_var, ’,’ , ’.’)),
ov_3 = (replace (ov_3, ’,’ , ’.’)),
ov_3_var = (replace (ov_3_var, ’,’ , ’.’)),
ov_4 = (replace (ov_4, ’,’ , ’.’)),
ov_4_var = (replace (ov_4_var, ’,’ , ’.’));
B MYSQL CODE
59
Bei Tabelle „si_virial_dp“ werden alle Felder mit dem Typ „varchar(50)“, die vorhandenen Beistriche durch einen Punkt ersetzt.
update si_virial_dp set
sv_t = (replace (sv_t, ’,’ , ’.’)),
sv_t_var = (replace (sv_t_var, ’,’ , ’.’)),
sv_x = (replace (sv_x, ’,’ , ’.’)),
sv_x_var = (replace (sv_x_var, ’,’ , ’.’)),
sv_2 = (replace (sv_2, ’,’ , ’.’)),
sv_2_var = (replace (sv_2_var, ’,’ , ’.’)),
sv_3 = (replace (sv_3, ’,’ , ’.’)),
sv_3_var = (replace (sv_3_var, ’,’ , ’.’)),
sv_4 = (replace (sv_4, ’,’ , ’.’)),
sv_4_var = (replace (sv_4_var, ’,’ , ’.’));
Weitere Änderungen betreffen dem Feld „l_flags“.
update literature set l_flags = „0000000000“ where l_flags = „0“;
update literature set l_flags = „1000000000“ where l_flags = „1“;
Das Feld „d_range“ von der Tabelle „data_property“ wurde standardisiert. Die
unterschiedlichen Benamsungen mit gleicher Bedeutung wurden angepasst.
update data_property set
d_range = „sub and super critical data“ WHERE
d_range like „%sub%“ and
d_range like „%super%“;
update data_property set
d_range = „dew line data“ WHERE
d_range = „near dew line data“;
update data_property set
d_range = „extended critical data“ WHERE
d_range = „near critical point data“;
update data_property set
d_range = „sub critical data“ WHERE
d_range = „High temperature / pressure“ OR
d_range = „sub and near the critical point data“;
B MYSQL CODE
60
B.2 MySQL ‘"join“ Code Auszüge
Im folgenden werden ein paar Zeilen Code zur „join“ Funktionalität gezeigt, welche zum Einsatz gekommen sind. Informationen zur Funktionalität von „join“ kann
man hier http://dev.mysql.com/doc/mysql/en/join.html finden.
Es gibt unterschiedliche „join“s. Relevant sind für die Abfrage nur die „inner join“s.
Diese nehmen nur identische Werte, nicht existierende(NULL) werden ignoriert.
Der einfachste JOIN ist der sogenannte „EQUI-JOIN“. Ein Beispiel :
SELECT A.EineSpalte, B.EineAndereSpalte
FROM Tabelle1 AS A, Tabelle2 AS B
WHERE A.EinWert = B.EinAndererWert;
Man kann ihn aber auch ganz anders schreiben, und die Ergebnismenge wird die
gleiche sein, nämlich so :
SELECT A.EineSpalte, B.EineAndereSpalte
FROM Tabelle1 AS A JOIN
Tabelle2 AS B ON
A.EinWert = B.EinAndererWert;
Wenn die Ergebnismenge die gleiche ist, wo liegt dann der Unterschied zwischen
diesen beiden Formen? Gibt es überhaupt einen Unterschied?
Der Unterschied liegt in der Laufzeit. Im ersten Beispiel wird zuerst das kartesische Produkt aus beiden Tabellen gebildet (jede Zeile aus Tabelle1 wird mit jeder
Zeile aus Tabelle2 verknüpft), und wenn beide Tabellen nur jeweils 100 Zeilen
enthalten, sind das schon 10.000 Zeilen in der temporären Zwischentabelle. Erst
dann werden die Zeilen gelöscht, die nicht die WHERE-Bedingung erfüllen.
Im zweiten Fall wird zuerst die Bedingung im ON-Teil geprüft und nur solche
Zeilen in die Zwischentabelle übernommen, bei denen die Bedingung erfüllt ist.
In dem Beispiel mit den je 100 Zeilen pro Tabelle sind das wahrscheinlich nicht
mehr als 100 Zeilen. Das ist ein Faktor von 10!
Bei „JOIN“ darf man nicht auf die „join_condition“ (ON) vergessen, den ohne
diese wird das „JOIN“ als „,“ interpretiert und ein kartesisches Produkt wird gebildet.
Mögliche Varianten für das Abfragesystems einmal mit „JOIN“ und einmal ohne.
Implementiert wurde die Variante mit „JOIN“.
B MYSQL CODE
Variante ohne „JOIN“:
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags,
l.l_nr, l.l_fk_journal, l.l_kind, l.l_flags, j.j_nr
FROM data_property d, literature l, journal j
WHERE d.d_fk_substance=41
and d.d_fk_literature = l.l_nr and l.l_fk_journal = j.j_nr
and j.j_nr = 3 and l.l_nr = 1366
and (d.d_type=„PVT data“ or
d.d_type=„Virial coefficients - Leidenform“)
and (d.d_range=„unknown“ or d.d_range=„sub“ or
d.d_range=ßuper“ or d.d_range=„dew“)
and conv(l.l_kind,2,10) & conv(1100,2,10)
ORDER BY d_nr ASC;
Variante mit „JOIN“:
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags,
l.l_nr, l.l_fk_journal, l.l_kind, l.l_flags, j.j_nr
FROM data_property d JOIN literature l
ON d.d_fk_literature = l.l_nr
JOIN journal j
ON l.l_fk_journal = j.j_nr
WHERE d.d_fk_substance=41
AND j.j_nr = 3 AND l.l_nr = 1366
AND (d.d_type=„PVT data“ OR
d.d_type=„Virial coefficients - Leidenform“)
AND (d.d_range=„unknown“ OR d.d_range=„sub“ OR
d.d_range=ßuper“ OR d.d_range=„dew“)
AND conv(l.l_kind,2,10) & conv(1100,2,10)
ORDER BY d_nr ASC;
Mögliche Varianten eines „JOIN“s:
• Variante mit „lit_nr“ als Suchkriterium und einem „JOIN“.
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags,
l.l_nr, l.l_kind, l.l_flags
FROM data_property d JOIN literature l
61
B MYSQL CODE
62
ON d.d_fk_literature = l.l_nr
WHERE l.l_nr = 1366
• Variante mit „lit_nr“ als Suchkriterium.
• Variante mit „journal_nr“ als Suchkriterium und zwei „JOIN“s.
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags,
l.l_nr, l.l_fk_journal, l.l_kind, l.l_flags, j.j_nr
FROM data_property d JOIN literature l
ON d.d_fk_literature = l.l_nr
JOIN journal j
ON l.l_fk_journal = j.j_nr
WHERE j.j_nr = 3
• Variante mit mehreren Werten von unterschiedlichen Tabellen als Suchkriterium.
SELECT count(*),d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags,
l.l_nr, l.l_fk_journal, l.l_kind, l.l_flags, j.j_nr
FROM data_property d JOIN literature l
ON d.d_fk_literature = l.l_nr
JOIN journal j
ON l.l_fk_journal = j.j_nr
JOIN si_pvt_dp pvtTable
ON d.d_nr = pvtTable.sp_fk_den
WHERE d.d_fk_substance=41
and j.j_nr = 3 and l.l_nr = 1366
and (d.d_type=„PVT data“ OR
d.d_type=„Virial coefficients - Leidenform“)
and (d.d_range=„unknown“ OR d.d_range=„sub“ OR
d.d_range=ßuper“ OR d.d_range=„dew“)
and conv(l.l_kind,2,10) & conv(1100,2,10)
and l.l_flags="1000000000"
Group BY d_nr ASC;
• Variante mit mehreren Werten von unterschiedlichen Tabellen als Suchkriterium.
B MYSQL CODE
SELECT count(*),d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags,
l.l_nr, l.l_fk_journal, l.l_kind, l.l_flags, j.j_nr
FROM data_property d JOIN literature l
ON d.d_fk_literature = l.l_nr
JOIN journal j
ON l.l_fk_journal = j.j_nr
JOIN si_pvt_dp pvtTable
ON d.d_nr = pvtTable.sp_fk_den
WHERE d.d_fk_substance=41
and j.j_nr = 3 and l.l_nr = 1366
and (d.d_type=„PVT data“ OR
d.d_type=„Virial coefficients - Leidenform“)
and (d.d_range=„unknown“ OR d.d_range=„sub“ OR
d.d_range=ßuper“ OR d.d_range=„dew“)
and conv(l.l_kind,2,10) & conv(1100,2,10)
and l.l_flags="1000000000"
and pvtTable.sp_weight >= 0 and pvtTable.sp_weight <= 6
Group BY d_nr ASC;
Weitere Varianten:
Variante mit „kind“ als Suchkriterium für Tabelle Literatur.
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags,
l.l_nr, l.l_kind, l.l_flags
FROM data_property d JOIN literature l
ON d.d_fk_literature = l.l_nr
WHERE conv(l.l_kind, 2,10) & conv(0010,2,10)
ORDER BY d_nr ASC;
Variante mit „flags“ als Suchkriterium für Tabelle Literatur.
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags,
l.l_nr, l.l_kind, l.l_flags
FROM data_property d JOIN literature l
ON d.d_fk_literature = l.l_nr
WHERE l.l_flags="1000000000"
ORDER BY d_nr ASC;
63
B MYSQL CODE
64
Variante mit „d_fk_substance“ als Suchkriterium für Tabelle „Data_Property“.
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags
FROM data_property d
WHERE d.d_fk_substance = 41
Variante mit „d_type“ als Suchkriterium für Tabelle „Data_Property“.
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags
FROM data_property d
WHERE d.d_type="Virial coefficients - Leidenform"
Variante mit „d_range“ als Suchkriterium für Tabelle „Data_Property“.
SELECT d.d_nr,d.d_type, d.d_range, d.d_fk_substance,
d.d_fk_substance2, d.d_fk_literature, d.d_flags
FROM data_property d
WHERE d.d_range="dew line data"
B.3 MySQL „order by“ Code Auszüge
Ein umfangreiches Statement mit „ORDER BY“, welches zuerst eine absteigende
Sortierung und dann eine aufsteigend Sortierung verlangt. Zusätzlich enthält es
„JOIN“ Ausdrücke zum Verbinden mehrerer Tabellen, mehrere „like“ Abfragen
und eine binären „Und“-Vergleich.
SELECT d_nr, d_type, d_data_points,
d_fk_literature, d_fk_substance, d_fk_substance2 ,
sp_sort, sp_t, sp_t_var, sp_x, sp_x_var,
sp_p, sp_p_var, sp_z, sp_z_var, sp_rho,
sp_rho_var, sp_type, sp_weight FROM
data_property density JOIN
literature litTable ON
density.d_fk_literature = litTable.l_nr JOIN
journal journalTable ON
litTable.l_fk_journal = journalTable.j_nr JOIN
si_pvt_dp siTable ON
density.d_nr = siTable.sp_fk_den WHERE
journalTable.j_nr = 3 AND
litTable.l_nr = 1366 AND
conv(litTable.l_kind, 2, 10) & 15 AND
B MYSQL CODE
65
density.d_fk_substance = 41 AND
( density.d_range like ’sub%’ OR
density.d_range like ’%super%’ OR
density.d_range like ’unknown%’ OR
density.d_range like ’dew%’ OR
density.d_range like ’crit%’ OR
density.d_range like ’extended%’) AND
( density.d_type = ’PVT data’) AND
siTable.sp_t <= 300 ORDER BY sp_t DESC , sp_p ASC
Ein weiteres Statement, aber in Kombination von „GROUP BY“ und „ORDER
BY“.
SELECT count(siTable.sp_sort) "matched points",
d_nr, d_type, d_data_points, d_fk_literature,
d_fk_substance, d_fk_substance2 FROM
data_property density JOIN
literature litTable ON
density.d_fk_literature = litTable.l_nr JOIN
journal journalTable ON
litTable.l_fk_journal = journalTable.j_nr JOIN
si_pvt_dp siTable ON density.d_nr = siTable.sp_fk_den WHERE
journalTable.j_nr = 3 AND
litTable.l_nr = 1366 AND
conv(litTable.l_kind, 2, 10) & 15 AND
conv(litTable.l_flags, 2, 10) & 512 AND
density.d_fk_substance = 41 AND
( density.d_range like ’sub%’ OR
density.d_range like ’%super%’ OR
density.d_range like ’unknown%’ OR
density.d_range like ’dew%’ OR
density.d_range like ’crit%’ OR
density.d_range like ’extended%’) AND
( density.d_type = ’PVT data’) AND
siTable.sp_weight >= 1
AND siTable.sp_weight <= 6 AND
siTable.sp_t >= 13 AND
siTable.sp_p >= 13 GROUP BY
density.d_nr ASC ORDER BY
"matched points"DESC
LITERATUR
66
Literatur
[1] B.Edegger: Automatische Umrechnung von Messdaten in ihre SI-Einheiten,
Evaluierung und Speicherung in einer Online-Datenbank
Institut für Grundlagen der Verfahrenstechnik und Anlagentechnik, TU Graz,
2005
[2] A.M.Slanina: Berechnung der Abweichung von PvT-Messdaten zu Referenzmessdaten;
Diplomarbeit, Institut für Grundlagen der Verfahrenstechnik und Anlagentechnik, TU Graz, 2002
[3] R.Grinninger: Qualitätsüberprüfung und Datenbereichserfassung von PvTMessdaten sowie Importüberprüfung dieser Daten in einer Gasdichtendatenbank;
Diplomarbeit, Institut für Grundlagen der Verfahrenstechnik und Anlagentechnik, TU Graz, 2001
[4] http://httpd.apache.org
Homepage von Apache.
[5] http://www.mysql.com
Homepage von MySQL.
[6] http://news.netcraft.com
Statistik über weltweit eingesetzten Server.
[7] http://www.php.net
Homepage von PHP(Hypertext Preprocessor).
[8] http://www.mysql.de/products/tools/query-browser
MySQL Query Browser.
[9] http://www.eclipse.org
Eclipse Consortium Home Page.
[10] sourceforge.net/projects/phpeclipse
PHP - Support for the Eclipse IDE Framework.
[11] http://www.nongnu.org/cvs
CVS Homepage
[12] http://www.infochembio.ethz.ch/cassi.html
Homepage of Chemical Abstracts Service Source Index.
LITERATUR
[13] http://www.issn.org
Homepage of International Standard Serial Number.
[14] http://isbn-international.org
Homepage of Internationale Standard-Buch-Nummer.
[15] http://www.cas.org
Homepage of Chemical Abstracts Service.
[16] http://www.bravehack.de/html/node27.html
Information zu Apache.
[17] http://www.perl.org
Homepage von Perl.
[18] http://java.sun.com
Homepage von Sun Microsystems.
[19] http://www.freebsd.org
Homepage von Open-Source-Betriebssystem FreeBSD.
[20] http://www.apple.com/server/macosx
Homepage zu Mac Os X.
[21] http://www.microsoft.com/
Homepage von Microsoft Windows.
[22] http://www.microsoft.com/iis
Homepage von Internet Information Server.
[23] http://www.jboss.com
Homepage von Jboss.
[24] http://www.hyperwave.com/e
Homepage von Hyperwave.
[25] http://wp.netscape.com/enterprise
Homepage von Netscape.
[26] OmniHTTPd
Homepage von OmniHTTPd.
[27] http://www.caudium.net
Homepage von Caudium.
67
LITERATUR
68
[28] http://at.php.net/manual/de/install.general.php
Liste von unterstützten Webserver.
[29] http://www.xitami.com
Homepage von Xitami.
[30] http://www.php-center.de/de-html-manual/intro-whatcando.html
Das Handbuch zu PHP.
[31] http://www.dbase.com
Homepage zu dBase.
[32] http://www.ibm.com/software/data/db2
Startseite zu IBM DB2.
[33] http://www.postgresql.org
Startseite zu PostgreSQL.
[34] http://www.oracle.com
Homepage von Oracle.
[35] http://www.w3.org/XML
Information zu Extensible Markup Language (XML).
[36] http://www.mysql.com/company
MySQL Company.
[37] http://www.phpmyadmin.net
Das phpMyAdmin Projekt.
[38] http://at.php.net/manual/de/function.fgetcsv.php
Beschreibung der Methode „fgetcsv“.
[39] http://dev.mysql.com/doc/mysql/en/replace.html
Beschreibung der MySQl Anweisung „replace“
[40] http://www.w3.org/Protocols/rfc2616/rfc2616.html
Beschreibung des HTTP Protokolls.
[41] http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2
Information zu dem Begriff idempotent in Bezug auf das HTTP Protokolls.
ABBILDUNGSVERZEICHNIS
69
Abbildungsverzeichnis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DDBST Datenbank System. . . . . . . . . . . . . . . . . . . . . .
DETHERM Datenbank System. . . . . . . . . . . . . . . . . . . .
Eclipse mit Codeausschnitt. . . . . . . . . . . . . . . . . . . . . . .
MySQL Query Browser mit beispielhafter Abfrage. . . . . . . . . .
Entity Relationship Diagramm der Datenbank . . . . . . . . . . . .
Use Case Diagramm Substanzsuche . . . . . . . . . . . . . . . . .
Use Case Diagramm Literatursuche . . . . . . . . . . . . . . . . .
Use Case Diagramm Journalsuche . . . . . . . . . . . . . . . . . .
Use Case Diagramm Messdatensuche . . . . . . . . . . . . . . . .
Use Case Diagramm Datenkorrektur . . . . . . . . . . . . . . . . .
Use Case Diagramm Visualisierung . . . . . . . . . . . . . . . . .
Use Case Diagramm Messdatenlöschung . . . . . . . . . . . . . . .
Hauptmenüseite . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suche nach Substanzeinträgen. . . . . . . . . . . . . . . . . . . . .
Liste der gefundenen Substanzeinträge. . . . . . . . . . . . . . . . .
Anzeige eines gefundenen Substanzeintrages. . . . . . . . . . . . .
Suche nach Journalen. . . . . . . . . . . . . . . . . . . . . . . . . .
Liste der gefundenen Journaleinträge. . . . . . . . . . . . . . . . .
Anzeige eines gefundenen Journaleintrages. . . . . . . . . . . . . .
Suche nach Literatur. . . . . . . . . . . . . . . . . . . . . . . . . .
Liste der gefundenen Literatureinträge. . . . . . . . . . . . . . . . .
Anzeige eines gefundenen Literatureintrages. . . . . . . . . . . . .
Einfaches Suchformular. . . . . . . . . . . . . . . . . . . . . . . .
Ergebnis der einfachen Suche. . . . . . . . . . . . . . . . . . . . .
Erweitertes Suchformular. . . . . . . . . . . . . . . . . . . . . . . .
Sortierung der Ergebnisse festlegen. . . . . . . . . . . . . . . . . .
Ergebnis der erweiterten Suche. . . . . . . . . . . . . . . . . . . . .
Importieren von Messdaten als csv-Datei. . . . . . . . . . . . . . .
Anzeige für gesuchten Eintrag in Tabelle „Data_Property“ aus Sicht
eines normalen Benutzers. . . . . . . . . . . . . . . . . . . . . . .
30 Anzeige für gesuchten Eintrag in Tabelle „Data_Property“ aus Sicht
eines Administrators. . . . . . . . . . . . . . . . . . . . . . . . . .
5
6
12
14
17
19
19
19
19
20
20
21
24
26
27
28
30
31
32
34
35
36
39
40
42
43
44
47
48
48
Herunterladen