matse Geschrieben 23. September 2010 Geschrieben 23. September 2010 Hallo an Alle! Ich habe in der Ausbildung die Aufgabe bekommen, eine Datenbank zu erstellen. Das habe ich gerade noch hingekriegt. Jetzt soll eine E-Mail verschickt werden, wenn ein bestimmter Eintrag in der DB geändert wird. Wie ich im Internet gelesen habe, sollte es mit Hilfe eines "Triggers" gehen. Nun wie schreibt man so einen Trigger? Ich habe nur sehr wenige Kentnisse in PHP und MySQL, und ganz wenig Erfahrung mit JAVA. Könnte mir jemand ein Lehrbuch empfehlen, welches mich schnell ans Ziel bringt? Kann man diesen Trigger mit JAVA schreiben? Wie bindet man ihn dann in die Datenbank ein? Wäre für eure Hilfe sehr dankbar! Zitieren
flashpixx Geschrieben 23. September 2010 Geschrieben 23. September 2010 Im Grunde wäre das der Einstieg MySQL :: MySQL 5.1 Referenzhandbuch :: 20.1 CREATE TRIGGER Das Problem wird aber sein, dass Du laut Deiner Aufgabenstellung aus der Datenbank heraus eine EMail, sprich eine SMTP Verbindung zu einem Server aufbauen musst. mySQL bietet einfach nicht die passende Funktionalität um so etwas umzusetzen. Als Möglichkeit so etwas zu bewerkstelligen, wäre der Wechsel auf ein anderes DBMS, z.B. Postgres, da kannst Du in der aktuellen Version mit Python und C++ einen solchen Trigger schreiben. Oder als zweite Möglichkeit Du veränderst in der Anwendung die Routine, die die Daten an die Datenbank sendet und erzeugst dort Deine Mail Ein Lehrbuch dass Dir Dich zu diesem Ziel führt, gibt es nicht. Du musst eben die Grundkenntnisse der jeweiligen Sprache und des DBMS erarbeiten. Zitieren
Schaelle Geschrieben 24. September 2010 Geschrieben 24. September 2010 Eine nicht ganz akkurate Lösungsalternative wäre beispielsweise ein relativ häufig ausgeführter Cronjob/Geplanter Task auf dem Server. Dieser ruft ein Skript auf (z.B. in PHP, Shell, Perl, ...), dass prüft ob es neue Einträge mit einem bestimmten Wert gibt und verschickt dann eine E-Mail. Problem hier ist, dass die Mail dann nicht unbedingt zeitnah versendet wird. Sondern abhängig von der Häufigkeit des Cronjobs. Eine weitere Alternative wäre, den Versand der E-Mail schon in dem Programm zu machen, welches den Wert in die DB einträgt - falls möglich. Zitieren
matse Geschrieben 24. September 2010 Autor Geschrieben 24. September 2010 Im Grunde wäre das der Einstieg MySQL :: MySQL 5.1 Referenzhandbuch :: 20.1 CREATE TRIGGER Das Problem wird aber sein, dass Du laut Deiner Aufgabenstellung aus der Datenbank heraus eine EMail, sprich eine SMTP Verbindung zu einem Server aufbauen musst. mySQL bietet einfach nicht die passende Funktionalität um so etwas umzusetzen. Als Möglichkeit so etwas zu bewerkstelligen, wäre der Wechsel auf ein anderes DBMS, z.B. Postgres, da kannst Du in der aktuellen Version mit Python und C++ einen solchen Trigger schreiben. Oder als zweite Möglichkeit Du veränderst in der Anwendung die Routine, die die Daten an die Datenbank sendet und erzeugst dort Deine Mail Das Problem ist, dass es nach einer manuellen Änderung der Datenbank eine E-Mail versendet werden soll. Und ich weiß nicht mal wo ich anfangen soll. Ist es nicht möglich so einen Trigger in Java zu schreiben? Und muss ich wirklich die DBS ändern? Wenn es nicht geht, kannst Du mir empfehlen welche Programmiersprache bzw. DBS ich lernen soll, damit ich die Aufgabe lösen kann? Wäre Postgres und C++ eine gute Alternative? Oder vielleicht MySQL mit Perl? Zitieren
matse Geschrieben 24. September 2010 Autor Geschrieben 24. September 2010 Eine nicht ganz akkurate Lösungsalternative wäre beispielsweise ein relativ häufig ausgeführter Cronjob/Geplanter Task auf dem Server. Dieser ruft ein Skript auf (z.B. in PHP, Shell, Perl, ...), dass prüft ob es neue Einträge mit einem bestimmten Wert gibt und verschickt dann eine E-Mail. Problem hier ist, dass die Mail dann nicht unbedingt zeitnah versendet wird. Sondern abhängig von der Häufigkeit des Cronjobs. Was ist ein Cronjob? Was meinst Du unter "nicht zeitnah"? Wenn die Zeitspanne zwischen der Änderung und dem Versenden der E-Mail 20-30 Minuten ist, so ist es in Ordnung. 2-3 Tage wären schon ein Problem. Ist die Verzögerung auch das einzige Nachteil eines Cronjobs? Zitieren
flashpixx Geschrieben 24. September 2010 Geschrieben 24. September 2010 Ist es nicht möglich so einen Trigger in Java zu schreiben? Und muss ich wirklich die DBS ändern? Nicht in Java. mySQL unterstützt eben keine Trigger in Java. Wenn es nicht geht, kannst Du mir empfehlen welche Programmiersprache bzw. DBS ich lernen soll, damit ich die Aufgabe lösen kann? Wäre Postgres und C++ eine gute Alternative? Oder vielleicht MySQL mit Perl? Wenn es ein Trigger sein soll, musst Du eben die Sprache lernen, die vom jeweiligen DBMS unterstützt wird. Wie schon geschrieben, mySQL ist in diesem Punkt noch etwas eingeschränkt. Nimm ein MS SQL, Postgres, usw. dann hast Du mehr Möglichkeiten. Aber Du solltest erst einmal mit den Grundlagen anfangen! Verstehe was ein Trigger ist und wie er arbeitet, denn das ist unabhängig von dem DBMS. Außerdem solltest Du hier nicht irgendwelche Sprache wie Perl in den Raum werfen, ohne dass Du weißt, was man damit anfangen kann. Was ist ein Cronjob? cron ? Wikipedia auch hier gilt, fang' bitte einmal damit an, Dich mit der Thematik zu beschäftigten. Du brauchst nicht zwingend einen Trigger, wenn Du es Dir reicht mit einer gewissen Zeitverzögerung zu arbeiten. Zitieren
matse Geschrieben 27. September 2010 Autor Geschrieben 27. September 2010 Nicht in Java. mySQL unterstützt eben keine Trigger in Java. Wenn es ein Trigger sein soll, musst Du eben die Sprache lernen, die vom jeweiligen DBMS unterstützt wird. Wie schon geschrieben, mySQL ist in diesem Punkt noch etwas eingeschränkt. Nimm ein MS SQL, Postgres, usw. dann hast Du mehr Möglichkeiten. D.h. mit MySQL kann ich auch keine Trigger mit PHP, C/C++ oder sonst irgendwas schreiben? Aber Du solltest erst einmal mit den Grundlagen anfangen! Ja, weiß ich. Leider weiß es mein Ausbilder nicht cron ? Wikipedia auch hier gilt, fang' bitte einmal damit an, Dich mit der Thematik zu beschäftigten. Du brauchst nicht zwingend einen Trigger, wenn Du es Dir reicht mit einer gewissen Zeitverzögerung zu arbeiten. Habe ich es richtig verstanden, dass das Crontab/Cronjob nur auf UNIX-basierten Betribssystemen funktioniert. Also nicht auf Windows. Tut mir Leid fürs Nerven, aber es ist sehr wichtig für mich, damit ich zumindest weiß, wo ich anfangen soll, bzw. damit ich weiß, Grundlagen von was ich zuerst lernen soll... Zitieren
flashpixx Geschrieben 27. September 2010 Geschrieben 27. September 2010 D.h. mit MySQL kann ich auch keine Trigger mit PHP, C/C++ oder sonst irgendwas schreiben? Kurz und knapp: Genau. Du musst die Sprache nehmen, die das DBMS anbietet. Habe ich es richtig verstanden, dass das Crontab/Cronjob nur auf UNIX-basierten Betribssystemen funktioniert. Also nicht auf Windows. Auch hier: Ja. Windows Server sollten aber eine ähnliche Möglichkeit besitzen zeitgesteuert irgendwelche Programme zu starten. Tut mir Leid fürs Nerven, aber es ist sehr wichtig für mich, damit ich zumindest weiß, wo ich anfangen soll, bzw. damit ich weiß, Grundlagen von was ich zuerst lernen soll... Hier einmal das Manual von Postgres 9 PostgreSQL: Documentation: Manuals: PostgreSQL 9.0: Triggers bezüglich der Trigger. Ich persönlich setze primär auf Postgres, da ich eben viel mehr Möglichkeiten habe, wie mit mySQL, aber dennoch ein open-source Produkt habe. Bevor Du Dich allerdings mit solchen Sachen wie Trigger beschäftigst, musst Du wirklich erst einmal das Basiswissen erwerben, d.h. grundlegende ERM/ERD Erstellung, Normalisierung, SQL, Transaktionssicherung, Integrität usw. Gerade die letzten beiden Punkte sind für Trigger essentiell. Zitieren
carstenj Geschrieben 27. September 2010 Geschrieben 27. September 2010 (bearbeitet) Hi, ERM/ERD Erstellung, Normalisierung, ..., Transaktionssicherung, Integrität für die Aufgabe ist dieses Wissen überhaupt nicht erforderlich. Es schadet natürlich auch nicht, aber meiner Meinung nach kann man diese Aufgabe lösen, ohne zu wissen was ERM oder ERD bedeutet. Man muss natürlich schon wissen, wie Trigger funktionieren, und ob die DB überhaupt in der Lage ist, entsprechende Anforderungen zu erfüllen. Ich denke dass egal ob MySQL oder Postgresql, du auf jeden Fall zu Mitteln des Betriebssystems zurückgreifen musst. Das, was du vorhast, fällt unter den Begriff "Auditing". Vielleicht hilft dir das weiter: MySQL :: MySQL 5.0 Reference Manual :: 4.6.7 mysqlbinlog ? Utility for Processing Binary Log Files Oder das: http://dev.mysql.com/doc/refman/5.1/en/query-log.html Wie auch immer, hier wirst du dann eben ein Skript schreiben müssen, welches die entsprechenden Einträge aus dem Log filtert, und per Mail verschickt. Habe ich es richtig verstanden, dass das Crontab/Cronjob nur auf UNIX-basierten Betribssystemen funktioniert. Also nicht auf Windows. Bei mir (XP) gibt es "geplante Taks", die im Grunde die gleichen Aufgaben wie ein Cronjob erfüllen. Bearbeitet 27. September 2010 von carstenj Zitieren
flashpixx Geschrieben 27. September 2010 Geschrieben 27. September 2010 für die Aufgabe ist dieses Wissen überhaupt nicht erforderlich. Es schadet natürlich auch nicht, aber meiner Meinung nach kann man diese Aufgabe lösen, ohne zu wissen was ERM oder ERD bedeutet. Das hat für michden Charakter, ich weiß wie ein Gaspedal funktioniert, also kann ich auch Auto fahren. Ich denke, dass man die Grundlagen zum Datenbankdesign sicher (!) beherrschen sollte, um so ein Projekt durchzuführen. Alles andere halte ich für fahrlässig. Z.B. im Hinblick darauf, dass bei fehlerhafter Triggerprogrammierung Rekusionen die Datenbank blockieren können, korrekte Transaktionsabsicherung ist gerade bei Triggern Pflicht und auch effiziente Datenstrukturen innerhalb des Triggers, denn gerade bei Trigger die on-row gefeuert werden, summieren sich die Laufzeiten unter Umständen Ich denke dass egal ob MySQL oder Postgresql, du auf jeden Fall zu Mitteln des Betriebssystems zurückgreifen musst. Bei Postgres mit Python als Triggersprache müsste das direkt sich über die smtplib bewerkstelligen lassen. Zitieren
matse Geschrieben 28. September 2010 Autor Geschrieben 28. September 2010 Vielen Dank für eure Tipps! Ich sehe jetzt, dass ich noch eineiges lernen muss bevor ich mit der Arbeit anfangen kann. Es wird doch etwas länger dauern als geplant. Eine Frage hätte ich noch. Da ich nun auch die ganze benötigte Software auf den Windows Server 2003 installieren muss, was würdet ihr empfehlen - Apache zu installieren, oder das vorhandene IIS zu nutzen? Zitieren
carstenj Geschrieben 28. September 2010 Geschrieben 28. September 2010 Hi, sowas ist auch oft eine Frage der firmeninternen Vorgaben. Im Grunde sind beides Webserver, und ich würde mal einfach behaupten, dass beide grob das gleiche können. Der IIS fügt sich ins gesamte Windowsumfeld ein, Apache kommt eher aus der Unix Welt, von daher ist die Konfiguration da etwas gewöhnungsbedürftig für Windowsbenutzer. Ich würde dir daher empfehlen, den sowieso schon vorhandenen IIS zu nutzen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.