Datenmodelle Netzwerkmodell (CODASYL-Modell) Objektorientierte Modelle Relationales Modell Interaktive Webseiten mit PHP und MySQL Das relationale Modell 1970 von E.F. Codd eingeführt durch eine Veröffentlichung in Communications of the ACM (Band 13, Nr. 6, S. 377-387, Juni 1970): "A relational model for large shared data banks" ("Ein relationales Modell für Daten in großen Datenbanken"). Larry Ellison war einer der ersten, der die Arbeit von Codd von der Theorie in die Praxis umsetzte: ORACLE - Datenbank Interaktive Webseiten mit PHP und MySQL Tabellen, Spalten, Zeilen Attribute Relationen lassen sich sehr Relationenname übersichtlich als Tabellen R A1 ... An } Relationsschema darstellen, indem man ihre ... Tupel untereinander anordnet. ... Relation Jeder der dabei Tupel entstehenden Spalten kann ... dann ein Attribut zugeordnet werden. Mitarbeiter Die Zeilen der Tabelle, die Nr. Name Vorname Telefon jeweils ein Objekt 1 Holtkamp Heiko 1063567 darstellen, enthalten in jeder Spalte die Ausprägung 2 Ellermann Martin 1063567 dieses Objekts unter dem 3 Holtmann Marcel 1063566 der Spalte zugeordneten 4 Hilbert Mirco 1063568 Attribut. Interaktive Webseiten mit PHP und MySQL Datenbanken entwickeln Die Entwicklung einer Datenbank vollzieht sich in mehreren Schritten (stark vereinfacht!) – Welche Informationen erwarten die Anwender vom Datenbanksystem? – Welche Tabellen werden benötigt? – Welche Datentypen werden für die Tabellenspalten benötigt? Dieser Prozess wird als Datenmodellierung bezeichnet. Grundsätze für die Datenmodellierung – Keine Redundanz – Eindeutigkeit – Keine Prozessdaten Miniwelt Beschreibung Datenbankentwurf Speicherung von Daten Abfrage Manipulation Ausschnitt aus der Datenbanksystem Interaktive Webseiten mit PHP und realen Welt MySQL Datenmodellierung / Tabellen erstellen Normalisierung Der Normalisierungsprozess besteht aus der Erzeugung verschiedener Normalformen. Normalisierung ist wichtig. Entity-Relationship-Modell (ER-Modell) Ein Gegenstand (engl. Entity) repräsentiert ein abstraktes oder physisches Objekt der realen Welt. Zur Beschreibung von Gegenständen sowie deren Identifizierung bedient man sich Attributen, die geeignet belegt werden. Eine Beziehung (engl. Relationship) beschreibt einen Zusammenhang zwischen mehreren Gegenständen und reichert diesen ggf. durch Informationen an. Interaktive Webseiten mit PHP und MySQL Der Normalisierungsprozess (praxisorientiert) 0. Normalform – Alle Datenelemente auflisten – Für jede Tabelle einen Primärschlüssel festsetzen (ein Schlüssel dient zur Identifikation eines Tupels) 1. Normalform: Wiederholungsgruppen auflösen – Eliminieren sich wiederholender Gruppen in einzelnen Relationen – Alle Wertebereiche der Attribute einer Relation müssen atomar sein Interaktive Webseiten mit PHP und MySQL Der Normalisierungsprozess: Beispiel „0. Normalform“ PersNr 1 2 3 Name Lorenz Hohl Wilschrein Vorname Sophia Tatjana Theo AbtNr 1 2 1 Abteilung Personal Einkauf Personal ProjektNr 2 3 1,2,3 4 5 Richter Wiesenland Hans Werner 3 2 Verkauf Einkauf 2 1 Vorname Sophia Tatjana Theo Theo Theo Hans Werner AbtNr Abteilung ProjektNr 1 Personal 2 2 Einkauf 3 1 Personal 1 1 Personal 2 1 Personal 3 3 Verkauf 2 Webseiten mit 2 Interaktive Einkauf 1 PHP und Beschreibung Verkaufspromotion Konkurrenzanalyse Kundenumfrage, Verkaufspromotion, Konkurrenzanalyse Verkaufspromotion Kundenumfrage 1. Normalform PersNr 1 2 3 3 3 4 5 Name Lorenz Hohl Wilschrein Wilschrein Wilschrein Richter Wiesenland MySQL Beschreibung Verkaufspromotion Konkurrenzanalyse Kundenumfrage Verkaufspromotion Konkurrenzanalyse Verkaufspromotion Kundenumfrage Der Normalisierungsprozess (praxisorientiert) 2. Normalform: Abhängigkeit vom Primärschlüssel – Eine Relation befindet sich in der zweiten Normalform, wenn • sie in der 1. Normalform ist und • jedes Nicht-Schlüssel-Attribut vom Primärschlüssel voll funktional abhängig ist. – Ein Attribut B ist vom Attribut A funktional genau dann abhängig, wenn gilt: aus A folgt direkt B (A → B) – Relationsstypen, die in der 1. NF sind, sind automatisch in der 2. NF, wenn ihr Primärschlüssel nicht zusammengesetzt ist (nur aus einem Attribut besteht) – Es muss also geprüft werden, ob man aus einem Teilschlüssel auf Nichtschlüsselattribute folgern kann – Bei der „Erzeugung“ der 2. NF entstehen i.d.R. mehrere Relationen Interaktive Webseiten mit PHP und MySQ Der Normalisierungsprozess: Beispiel 1. Normalform PersNr 1 2 3 3 3 4 5 Name Lorenz Hohl Wilschrein Wilschrein Wilschrein Richter Wiesenland Vorname Sophia Tatjana Theo Theo Theo Hans Werner AbtNr 1 2 1 1 1 3 2 Abteilung Personal Einkauf Personal Personal Personal Verkauf Einkauf ProjektNr 2 3 1 2 3 2 1 Beschreibung Verkaufspromotion Konkurrenzanalyse Kundenumfrage Verkaufspromotion Konkurrenzanalyse Verkaufspromotion Kundenumfrage 2. Normalform PersNr 1 2 3 4 5 Name Lorenz Hohl Wilschrein Richter Wiesenland Vorname Sophia Tatjana Theo Hans Werner AbtNr 1 2 1 3 2 Abteilung Personal Einkauf Personal Verkauf Einkauf ProjektNr 2 3 1 Beschreibung Verkaufspromotion Konkurrenzanalyse Kundenumfrage Interaktive Webseiten mit PHP und MySQL PersNr 1 2 3 3 3 4 5 ProjektNr 2 3 1 2 3 2 1 Der Normalisierungsprozess (praxisorientiert) 3. Normalform: Transitive Abhängigkeit – Eine Relation befindet sich in der 3. Normalform, wenn • Sie in der 2. NF ist und • Die Nichtschlüsselattribute voneinander nicht funktional abhängig sind, d.h. es existieren keine transitiven Abhängigkeiten. – Transitivität: X → Y und Y → Z, dann X → Z – Ein Attribut Z ist vom Attribut X über das Attribut Y genau dann transitiv abhängig, wenn gilt: X → Y und ¬(Y → X) und Y → Z – Es muss also geprüft werden, ob aus einem Nichtschlüsselattribut auf ein weiteres Nichtschlüsselattribut gefolgert werden kann – Bei der „Erzeugung“ der 3. NF entstehen weitere Relationen Interaktive Webseiten mit PHP und MySQL Der Normalisierungsprozess: Beispiel 2. Normalform PersNr 1 2 3 4 5 Name Lorenz Hohl Wilschrein Richter Wiesenland Vorname Sophia Tatjana Theo Hans Werner AbtNr 1 2 1 3 2 Abteilung Personal Einkauf Personal Verkauf Einkauf ProjektNr 2 3 1 Beschreibung Verkaufspromotion Konkurrenzanalyse Kundenumfrage PersNr 1 2 3 3 3 4 5 ProjektNr 2 3 1 2 3 2 1 3. Normalform PersNr 1 2 3 4 5 Name Lorenz Hohl Wilschrein Richter Wiesenland Vorname Sophia Tatjana Theo Hans Werner AbtNr 1 2 1 3 2 ProjektNr 2 3 1 Beschreibung Verkaufspromotion Konkurrenzanalyse Kundenumfrage PersNr 1 2 3 3 3 4 5 Interaktive Webseiten mit PHP und MySQL ProjektNr 2 3 1 2 3 2 1 AbtNr 1 2 3 Abteilung Personal Einkauf Verkauf Das Entity-Relationship-Modell – Kurz & knapp... Vorgehen – Jeder Entitytyp wird in eine Relation transformiert. – Ein 1:1-Beziehungstyp wird durch Aufnahme eines Schlüssels in eine der beiden Tabellen abgebildet. – Ein 1:n-Beziehungstyp wird durch Aufnahme des Schlüssels des Entitytyps, der in der Beziehung n-mal auftreten kann, in die dem anderen Entitytyp entsprechende Tabelle abgebildet. – Ein m:n-Beziehung wird durch die Definition einer zusätzlichen Tabelle, in der die Schlüssel aller beteiligten Entitytypen enthalten sind, abgebildet. – Bei attributierten Beziehungen werden die Attribute des Beziehungstyps in die Tabelle, in der die Beziehung Interaktive Webseiten mit PHP und abgebildet ist, aufgenommen. MySQL MySQL Das MySQL RDBMS (Relationales Datenbankmanagementsystem) wird von einem kommerziell orientierten Unternehmen, der MySQL AB, entwickelt. MySQL AB ist ein schwedisches Unternehmen, das von Michael >Monty< Widenius, Allan Larson und David Axmark gegründet wurde. Das Produkt MySQL wird in zwei getrennten Lizenzmodellen angeboten: – Lizenzmodell der GPL (OpenSource) – Kommerzielle Fassung – Die Lizenzpolitik von MySQL AB ist allerdings nicht so ganz klar verständlich und sollte auf jeden Fall aufmerksam studiert werden, wenn MySQL im kommerziellen Umfeld zum Einsatz kommt. Interaktive Webseiten mit PHP und MySQL SQL SQL steht für Structured Query Language (strukturierte Abfrage Sprache). Damit ist der Funktionsumfang allerdings nur unzureichend umrissen: – Sie enthält nicht nur Funktionen für Datenbankabfragen, – sondern deckt das volle Aufgabenspektrum vom Anlegen und Pflegen von Datenstrukturen üder das Einfügen, Ändern und Löschen von Daten bis hin zur Benutzerverwaltung ab. Wichtige Funktionsbereiche von SQL – – – – – Datendefinition (DDL – Data Definition Language) Datenmanipulation (DML – Data Manipulation Language) Datenabfrage (QL – Query Language) Zugriffskontrolle spezielle Befehle zur internen Datenbankadministration Eine richtige "Programmiersprache" ist SQL trotz ihrer Mächtigkeit aber nicht. – Sie enthält beispielsweise keine Schleifen- oder Verzweigungsbefehle SQL ist eher eine "Schnittstellensprache", in der ein Datenbankserver die Interaktive Webseiten mit PHP und Anforderungen einer Client-Anwendung entgegen nimmt. MySQL MySQL-Befehle → phpMyAdmin Bevor wir aber mit dem mysqlMonitor weiter machen, ein Hinweis auf ein sehr nützliches Tool: phpMyAdmin phpMyAdmin erleichtert die Administration und Manipulation von MySQLDatenbanken – Es ist zu bekommen unter der URL http://www.phpmyadmin.net – phpMyAdmin ist eine browserbasierte Oberfläche zur Bedienung von MySQL über das WWW Interaktive Webseiten mit PHP und MySQL PHP & MySQL: Erste Schritte MySQL wird von PHP explizit unterstützt. Für die Nutzung stehen Funktionen zur Verfügung, die direkt auf die Datenbank zugreifen. Neben MySQL bietet PHP auch die Unterstützung für weitere Datenbanken, u.a. – – – – – – mSQL Postgres Informix MS SQL Server Oracle „ODBC“ Interaktive Webseiten mit PHP und MySQL PHP & MySQL: Erste Schritte Mit dem MySQL DBMS(Datenbankmanagementsystem) verbinden: resource mysql_connect ([string Server[:Port] [, string Benutzername [, string Benutzerkennwort [, bool neue_Verbindung [, int client_flags]]]]]) Beispiel: <?php $link = mysql_connect ("localhost", "mysql_user", "mysql_password") or die ("keine Verbindung möglich"); print ("Verbindung erfolgreich"); mysql_close ($link); ?> Verbindung zum MySQL DBMS schließen: bool mysql_close ([resource Verbindungs-Kennung]) Interaktive Webseiten mit PHP und MySQL PHP & MySQL: Erste Schritte Persistente(dauernde) Verbindung zu MySQL: resource mysql_pconnect ( [string Server[:port] [, string Benutztername [, string Benutzerkennwort [, int client_flags]]]]) – vor dem Verbindungsaufbau wird zunächst versucht eine offene (persistente) Verbindung zum gleichen Host, mit dem gleichen Benutzernamen und Benutzerkennwort zu finden – die Verbindung zum SQL Server wird beim Beenden des PHP-Skripts nicht geschlossen Auswahl einer MySQL Datenbank: bool mysql_select_db ( string Datenbankname [, resource Verbindungs-Kennung]) Interaktive Webseiten mit PHP und MySQL PHP & MySQL: Erste Schritte Eine Anfrage an das MySQL DBMS senden: resource mysql_query (string Anfrage [, resource Verbindungs-Kennung [, int Ergebnis-Modus]]) Beispiel: <?php $result = mysql_query ("SELECT * FROM my_tbl") or die ("Invalid query"); ?> Daneben gibt es auch die Funktion: resource mysql_db_query (string Datenbank, string Anfrage [, resource Verbindungs-Kennung]) – Diese Funktion sollte aber nach Möglichkeit nicht mehr verwendet werden (seit PHP 4.0.6 als veraltet gekennzeichnet) Interaktive Webseiten mit PHP und MySQL Nützliche Bibliotheken PHPLib – PHP Base Library – http://phplib.sourceforge.net (früher: http://phplib.netuse.de) – PHPLib ist eine Sammlung von in PHP geschriebenen Klassen • • • • • Datenbankabstraktion (mSQL, MSSQL, MySQL, Oracle8, Postgres ...) Sessionhandling Authentifizierung Rechteverwaltung Templates – Aber: die PHPLib wird nicht mehr weiterentwickelt. • Entwicklung seit Version 7.2d im Stillstand • Dennoch eine der wichtigsten und immer noch am meisten genutzten PHPBibliotheken • Funktionalität der PHPLib wird schrittweise in das "PEAR-Projekt" integriert Interaktive Webseiten mit PHP und MySQL