Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel 12 MySQL und PostgreSQL
  gp 12.1 Relationales Datenbanksystem
  gp 12.2 Relationaler Datenbankserver
  gp 12.3 SQL-Server im Überblick
  gp 12.4 MySQL
    gp 12.4.1 Anwendungsgebiete von MySQL
    gp 12.4.2 Schnittstellen von MySQL
    gp 12.4.3 Installation von MySQL
    gp 12.4.4 MySQL-Server starten und stoppen
    gp 12.4.5 Konfigurationsdatei my.cnf
    gp 12.4.6 Kommandozeilenwerkzeuge für und von mysql
    gp 12.4.7 Grafische Clients
    gp 12.4.8 MySQL-Crashkurs
    gp 12.4.9 Datentypen
    gp 12.4.10 Datenbank anlegen, verwenden und löschen
    gp 12.4.11 Tabelle anlegen
    gp 12.4.12 Schlüsselfelder (Tabellen anlegen)
    gp 12.4.13 Indizes
    gp 12.4.14 Tabellentypen (Tabellen anlegen)
    gp 12.4.15 Autowerte definieren
    gp 12.4.16 Tabellen umbenennen und ändern
    gp 12.4.17 Daten einfügen, ändern und löschen
    gp 12.4.18 Daten importieren
    gp 12.4.19 Datenausgabe
    gp 12.4.20 NULL ist 0 oder undefiniert?
    gp 12.4.21 Unscharfe Suche
  gp 12.5 MySQL C-API
    gp 12.5.1 Verbindung mit dem MySQL-Server aufbauen
    gp 12.5.2 Aufgetretene Fehler ermitteln – mysql_errno() und mysql_error()
    gp 12.5.3 Schließt die Verbindung zum Server – mysql_close()
    gp 12.5.4 Erstes Beispiel
    gp 12.5.5 Verschiedene Informationen ermitteln
    gp 12.5.6 Datenbanken, Tabellen und Felder ausgeben (MYSQL_RES)
    gp 12.5.7 Ergebnismenge zeilenweise bearbeiten (MYSQL_ROW)
    gp 12.5.8 Ergebnismenge spaltenweise einlesen (und ausgeben) (MYSQL_FIELD)
    gp 12.5.9 Ein Beispiel
    gp 12.5.10 Ergebnismenge – weitere Funktionen
    gp 12.5.11 Befehle an den Server – mysql_query() und mysql_real_query()
    gp 12.5.12 Weitere Funktionen
    gp 12.5.13 Veraltete Funktionen
    gp 12.5.14 Neue Funktionen ab Version 4.1.x
  gp 12.6 Beispiel eines Newssystems mit MySQL
    gp 12.6.1 Die Headerdatei my_cgi.h
    gp 12.6.2 (Pseudo-)Planung
    gp 12.6.3 Datenbank und Tabellen anlegen
    gp 12.6.4 MySQL-Clients mit GUI
    gp 12.6.5 Randnotiz
  gp 12.7 Neue SQL-Funktionen für die Shell – MySQL erweitern
  gp 12.8 MySQL-Funktionen mit der UDF-Schnittstelle entwerfen
    gp 12.8.1 UDF-Sequenzen
    gp 12.8.2 UDF_INIT-Struktur
    gp 12.8.3 UDF_ARGS-Struktur
    gp 12.8.4 Rückgabewert
    gp 12.8.5 Benutzerdefinierte Funktionen erstellen
    gp 12.8.6 Benutzerdefinierte Funktion kompilieren, installieren und ausführen
  gp 12.9 PostgreSQL – objektrelationales Datenbankverwaltungssystem
    gp 12.9.1 PostgreSQL im Vergleich zu MySQL
    gp 12.9.2 Unterschiede in der Syntax zwischen MySQL und PostgreSQL
    gp 12.9.3 PostgreSQL installieren
    gp 12.9.4 Konfigurationsdateien bei PostgreSQL – (postgresql.conf, pg_hba_conf)
    gp 12.9.5 CRASHKURS PostgreSQL
    gp 12.9.6 PostgreSQL C-API – libpg
    gp 12.9.7 Umgebungsvariablen und Passwortdatei
    gp 12.9.8 PostgreSQL und Threads
    gp 12.9.9 Ausblick

Kapitel 12 MySQL und PostgreSQL

MySQL und PostgreSQL bringen eine interessante Schnittstelle zur Programmierung eigener Clientanwendungen mit. In diesem Kapitel bekommen Sie einen umfangreichen Überblick.

Das Thema der Datenbankprogrammierung mit der API (Application Programmer Interface = eine Schnittstelle für Programmierer) von MySQL und PostgreSQL stellt einen gewissen Reiz dar. Dass man recht selten etwas dazu in der Literatur findet, liegt an der recht ungemütlichen Hürde, auch Hintergrundwissen zu Datenbanken – sprich SQL – mitzubringen. Und gerade bei einem Buch zur Programmierung kann logischerweise nicht auch noch eine umfassende Einführung zu MySQL oder PostgreSQL gemacht werden. Was allerdings dann eine gewisse Leserschaft ausschließt – da nicht jeder Kenntnisse zu Datenbanken besitzt. Ich versuche dennoch, auf dem schmalen Pfad zu wandern und Ihnen die Programmierung mit der MySQL C-API und der PostgreSQL-API etwas näher zu bringen, ohne dass Sie unbedingt Vorkenntnisse zu den Datenbanken benötigen. Natürlich dürfen Sie dabei nicht erwarten, dass ich Sie damit zu einem Datenbank-Guru mache, sondern ich erkläre Ihnen lediglich, was zum Verständnis für die Programmierung nötig ist. Sollten Sie sich also ernsthaft mit MySQL und/oder PostgreSQL beschäftigen wollen/müssen, so stellt dieses Buch keinen Ersatz für eine entsprechende Fachliteratur dar. Kenner der Datenbank können die ersten Seiten überspringen und gleich mit dem Abschnitt zur Programmierung der jeweiligen API anfangen. Ich muss noch anmerken, dass es mir sehr schwer gefallen ist, auf das eine oder andere zu verzichten, was noch erwähnenswert gewesen wäre.


Rheinwerk Computing

12.1 Relationales Datenbanksystem  toptop

Um sich mit einer relationalen Datenbank zu befassen, sollten Sie einige grundlegende Kenntnisse darüber besitzen, was es damit auf sich hat.

Zuerst die einfachere Ausführung. Eine relationale Datenbank ist erst einmal nichts anderes als eine Sammlung von Tabellen. In dieser Tabelle sind mehrere Zeilen vorhanden. Eine Zeile ist dabei ein Datensatz. Dieser Datensatz kann wiederum aus mehreren Spalten bestehen, die als Felder bezeichnet werden. Bis hierhin könnte man meinen, ich würde Ihnen das Prinzip einer Tabellenkalkulation erklären. Jedes dieser Felder einer Tabelle besitzt einen bestimmten Datentypen, was ein String, ein Datum oder eine Zahl sein kann. Je nach Datenbanksystem gibt es hierbei erheblich mehr Datentypen, als Sie dies z. B. von C her kennen. Aber – um es gleich von vornherein klarzustellen – so hat ein Integer-Datentyp nichts mit einem int von C zu tun etc.! Es gibt auch so genannte untypisierte Felder für große Binärdaten. Einigen Feldern kommt eine besondere Bedeutung zu: den so genannten Schlüsselfeldern.

So weit, so gut, wenn Sie jetzt allerdings mit einem SQL-Guru über Felder und Spalten reden wollen, dann müssen Sie wohl einige Fachbegriffe lernen. Auch hier sei mir die etwas nüchterne Erklärung verziehen.

gp  Relation – Als Relation wird all das bezeichnet, was ich Ihnen oben in der einfachen Ausführung beschrieben habe – die Tabelle. Eine Relation (Tabelle) kann also wie folgt aufgeteilt werden:
Spaltenbezeichnung Daten einer Spalte Anordnung der Spalte Datensatz (Zeile) Schlüsselwert, womit der Datensatz eindeutig identifiziert wird (ist allerdings nicht zwingend notwendig. MySQL z. B. braucht keinen PRIMARY_KEY.)
gp  Entität – Mit Entität wird der einzelne Datensatz (Zeile) der Tabelle beschrieben – also der Tabellenname.
gp  Attribut und Attributname – Als Attribut bezeichnet man schlichtweg die Spalte, von der es mindestens eine gibt (so, wie es mindestens eine Zeile gibt). Der Attributname ist die Überschrift der Spalte.
gp  Tupel – Tupel steht für die Zeile bei einer Datenbank. Es ist zwar nicht einfach eine Zeile – aber für das Verständnis sollte dies hier ausreichen. Der Tupel ist ein »Kunstbegriff« der Mathematik.
gp  Grad der Relation – Hiermit ist die Anzahl der Spalten gemeint.
gp  Kardinalität – Hiermit wird die Zeilenanzahl beschrieben.
gp  Domäne – Die Anzahl aller Felder in einer Spalte.

Die einzelnen Entitäten (Tabellennamen) können auch in Beziehungen zueinander stehen. Dabei sind im relationalen Datenbankmodell drei Formen von Beziehungstypen präsent:

gp  1:1-Beziehung – Dabei besteht eine eindeutige Beziehung zwischen zwei Tabellen. Jeder Datensatz einer Tabelle besitzt dabei einen verbundenen Datensatz einer anderen Tabelle. Diese Beziehung lässt sich allerdings auch mit einer einzigen Tabelle darstellen. Beispiel aus dem echten Leben: Der Autor isst einen Donut.
gp  1:n-Beziehung – Dabei sind mit einem Datensatz einer Tabelle mehrere Datensätze einer anderen Tabelle verbunden. Im echten Leben hieße dies: Der Autor isst beliebig viele und unterschiedliche Donuts.
gp  n:m-Beziehung – Hierbei kann ein Datensatz, der einer Tabelle zugeordnet ist, mehreren Datensätzen einer anderen Tabelle zugeordnet sein und umgekehrt. Im Leben hieße dies: Der Autor isst beliebig viele und unterschiedliche Donut-Typen, und (umgekehrt) ein Donut kann auch von mehreren Autoren gegessen werden. Also einfach: Multiple Autoren essen multiple Donuts.

Stricken wir weiter. Die Definition der einzelnen Tabellen und die Beziehung, in der diese zueinander stehen, werden als Datenbankschema bezeichnet. Bei geringen Kenntnissen und einer übertriebenen Befolgung solcher Regeln kann dies allerdings auch zum Nachteil werden. Was bringt es denn, wenn Sie Ihre Datenbank in zehn verschiedene Tabellen aufteilen, weil sie um einen Prozent schneller läuft, und Sie dasselbe mit zwei Tabellen hätten realisieren können? Spätestens wenn Sie Ihre Tabelle warten bzw. erweitern wollen, sehen Sie die Probleme vor sich stehen. Sie stehen vor einem Haufen von Tabellen, wo vielleicht jede Tabelle eine bestimmte Beziehung zu einer anderen hat. Wird dabei eine solche Beziehung vergessen, erhalten Sie, wenn Sie Glück haben, eine Fehlermeldung, und wenn Sie Pech haben, befinden sich zwar die Daten in der Datenbank, werden aber nie berücksichtigt.

Um (bei den Beziehungen) einigen Problemen aus dem Weg zu gehen, gibt es die Normalisierungstheorie. Hier existieren sechs Formen, wovon in der Praxis gewöhnlich nur die ersten drei verwendet werden:

gp  Erste Normalform (1NF) – Jedes Datenfeld (Spalte) beinhaltet nur einen einzigen untrennbaren Wert.
gp  Zweite Normalform (2NF) – Die Relation befindet sich in der ersten Normalform, und jedes Nicht-Schlüsselattribut ist voll funktional von jedem Schlüssel abhängig.
gp  Dritte Normalform (3NF) – Die Relation befindet sich in der zweiten Normalform, und jedes Nicht-Schlüsselattribut ist voll funktional und unabhängig.

Ich möchte es hiermit beim Thema »Datenbankdesign« belassen, weil eine genauere Beschreibung nur zu ein paar mehr Seiten führen würde, was wiederum weniger Seiten zur Programmierung (dem eigentlichen Sinn des Kapitels) bedeuten würde. Es ist hierbei jetzt nicht so wichtig, dass Sie das Prinzip der zweiten oder dritten Normalform verstanden haben – da Sie diese im Buch ohnehin nicht verwenden. (Sie können ausatmen und entspannt weiterlesen!) Sie sollten ohnehin nicht den Sinn einer Datenbank aus den Augen verlieren, denn häufig ist die einfachste Methode die beste. Sofern Sie also kein Datenbank-Guru sind, empfehle ich Ihnen, sich erst mit der ersten Normalform zu befassen, da diese einfacher und schneller zu erstellen und zu pflegen ist.

 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern