automatix Geschrieben 11. September 2009 Geschrieben 11. September 2009 Hallo zusammen! Ich modelliere einen Kalender, der es dem Benutzer u.a. ermöglichsen soll, wiederkehrende Termine zu verwalten, z.B.: - eine Vorlesung, die immer montags 10:15-11:45 und donnerstags 08:15-09:45 stattfindet - Stammtisch: immer am jeweils vorletzten Freitag eines Monats um 18:00 Und ich habe keine Vorstellung, wie ich das in meinem ERM (und später physischen Modell) abbilden soll... Kann mir jemand helfen? Danke Zitieren
flashpixx Geschrieben 11. September 2009 Geschrieben 11. September 2009 Und ich habe keine Vorstellung, wie ich das in meinem ERM (und später physischen Modell) abbilden soll... Kann mir jemand helfen? Naja Du musst halt entsprechende Entities und in diesen die Zyklen modellieren. Es gib für so etwas kein Step-by-Step Howto, sondern man muss eben das etwas üben. Ich rate Dir zu einschlägiger Literatur und Dir ggf etwas einfachere Beispiele zum üben zu suchen Zitieren
automatix Geschrieben 11. September 2009 Autor Geschrieben 11. September 2009 Naja Du musst halt entsprechende Entities und in diesen die Zyklen modellieren. Es gib für so etwas kein Step-by-Step Howto, sondern man muss eben das etwas üben. Ich rate Dir zu einschlägiger Literatur und Dir ggf etwas einfachere Beispiele zum üben zu suchen Hallo! Verstehe mich bitte nicht falsch, aber ich finde Deine Anwort nicht gerade aufschlussreich. Gut, nun weiß ich, dass es kein Step-by-Step Howto für diese Fragestellung gibt, dass ich gute Bücher brauche und zu üben habe und dass man "entsprechende Entities" modellieren muss, um ein ERM zu erstellen. Aber vielleicht hat jemand auch einen konstruktiven Vorschlag, wie man das Problem lösen kann? Danke im Voraus! Zitieren
dr.dimitri Geschrieben 11. September 2009 Geschrieben 11. September 2009 Hi, man darf hier nicht den Fehler machen flexible Datumsberechnungen als Ergebnis in die Datenbank abzulegen. Vielmehr müssen dort Informtionen gespeichert werden, mit der die darauf zugreifende AW etwas anfangen kann. Grundsätzlich setzt sich ein Serientermin ja aus drei teiolen zusammen: Das StartdatumDas IntervallEndedatum bzw. Anzahl der Intervalle Das Startdatum und die Länge des Serientermins dürften einfach sein. Interessanter wird es beim Intervall. Hier muss die Anwendung sich merken welches Intervall der Anwender über die Oberfläche eingegeben hat. So könnte LF2M z.B. bedeuten, der Letzter Freitag, alle zwei Monate. Eine reine Auswertung über SQL ohne Hilfe der AW ist damit natürlich nicht mehr möglich, aber bei der vielzahl von Kombinationsmöglichkeiten die es gibt, denke ich, dass das ein sinnvoller Kompromiss zwischen Normalisierung, Komplexität und Wartbarkeit ist. Den Termin (also mit Ort, Teilnehmer etc.) würde ich in einer eigenen Tabelle ablegen und die Serieninformtion in eine seperate Tabelle auslagern. Damit ist es dann auch möglich ausserhalb der Serie Ausnahmen einzustellen: Z.B. Jeden ersten Samstag im Monat aber zusätzlich auch am 25. August. Wenn du das als Übungsaufgabe machst, sollte dir bewußt sein, dass man mit Datumsanwendungen sehr schnell eine hohe Komplexität in die Anwendung bringen kann. Dim Zitieren
Schiller256 Geschrieben 11. September 2009 Geschrieben 11. September 2009 Was hast du bist jetzt schon erstellt? Wie flexibel muss die Wiederholungsfunktion sein? Auf die schnelle würde ich sagen das drei Tabellen hier ausreichen. Die erste Tabelle ist das Event selbst mit ein paar wichtigen Daten. An diese Tabelle würde ich 1:n eine Tabelle mit weiteren Daten hängen. z.B. die Kategorie(n) Als letztes würde ich auch an die Tabelle Event noch eine weitere Tabelle 1:n hängen mit dem Wiederholungsmuster sollte es vorhanden sein. Zitieren
automatix Geschrieben 11. September 2009 Autor Geschrieben 11. September 2009 Danke für Eure Antworten! Wenn du das als Übungsaufgabe machst, sollte dir bewußt sein, dass man mit Datumsanwendungen sehr schnell eine hohe Komplexität in die Anwendung bringen kann.Dim Es halndet sich nicht um eine Übungsaufgabe, sondern um eine PHP&MySQL-basierte Intra-/Internet-Anwendung mit Kalender-Funktionalität. Wie flexibel muss die Wiederholungsfunktion sein? So flexibel, wie möglich. Viel zu unpräzise für eine Anwendungsanforderung, ich weiß. Was haltet Ihr von folgender Struktur (s. Anhang): drei Tabellen (oder vier -- wenn man die Aktivitätsdaten auslagert) aktivitaet: eine (abstrakte) Aktivität -- mit Start- und Enddatum termin: ein (konkreter) Fall einer Aktivität -- mit Datum und Start- und Endzeiten turnus: Turnus; z.B. LF2M ("der letzte Freitag, alle zwei Monate") Allerdings heißt es ja, die Logik fast komplett auf die Anwendungsebene zu verlagern. Damit habe ich ein Problem -- v.a. weil dann die logische Verbindung zwischen dem Turnus und den Terminen nicht abgebildet wird. Und das hat u.a. zur Folge, dass Termine einzeln abgespeichert werden müssen und die Datenbank bei Aktivitäten ohne "bis"-Angabe unnötig mit vielen-vielen Zukunftsterminen zugemüllt wird. Was sagt Ihr? Zitieren
flashpixx Geschrieben 11. September 2009 Geschrieben 11. September 2009 Es halndet sich nicht um eine Übungsaufgabe, sondern um eine PHP&MySQL-basierte Intra-/Internet-Anwendung mit Kalender-Funktionalität. Überlege Dir bitte, da Du anscheinend noch nicht so viel Erfahrung hast, ob es wirklich eine gute Idee ist, dieses Projekt so umzusetzen. Gerade mit SQL Injections kannst Du Dir sehr große Probleme einhandeln, ebenso wie nicht richtig modellierte Tabellen / Beziehungen. Ich würde Dir zu entsprechenden fertigen Systemen raten Allerdings heißt es ja, die Logik fast komplett auf die Anwendungsebene zu verlagern. Damit habe ich ein Problem -- v.a. weil dann die logische Verbindung zwischen dem Turnus und den Terminen nicht abgebildet wird. Und das hat u.a. zur Folge, dass Termine einzeln abgespeichert werden müssen und die Datenbank bei Aktivitäten ohne "bis"-Angabe unnötig mit vielen-vielen Zukunftsterminen zugemüllt wird. Ich halte nichts davon die Logik in die Anwendung zu legen, denn bei entsprechendem Datenvolumen gehört eine solche Auswertung in das DBMS. Ich würde hier auch zu Stored Procedures raten, mit der sich solche Dinge innerhalb der Datenbank realisieren lassen, ob dann mySQL eine gute Wahl ist, würde ich gerade im Bereich der Stored Procedures eher nicht so sagen, sondern hier auf andere Systeme z.B. Postgresql mit Python oder MS SQL setzen. PHP bietet auch dazu entsprechende Schnittstellen an Zitieren
automatix Geschrieben 11. September 2009 Autor Geschrieben 11. September 2009 Überlege Dir bitte, da Du anscheinend noch nicht so viel Erfahrung hast, ob es wirklich eine gute Idee ist, dieses Projekt so umzusetzen. Gerade mit SQL Injections kannst Du Dir sehr große Probleme einhandeln, ebenso wie nicht richtig modellierte Tabellen / Beziehungen. Ich würde Dir zu entsprechenden fertigen Systemen raten SQL Injections sind ein allgemeines Problem bei datenbankbankbasierten Anwendungen, das ich wohl in jedem Fall haben werde -- ob mit Planer-Funktionalität oder ohne. Trotzdem ist die Idee, auf eine fertige Lösung zurückzugreifen, natürlich sinnvoll. Welche Kalender/Planer würdest Du empfehlen? Zitieren
flashpixx Geschrieben 12. September 2009 Geschrieben 12. September 2009 [...]natürlich sinnvoll. Welche Kalender/Planer würdest Du empfehlen? ich habe recht gute Erfahrungen mit der Groupware eGroupWare: Home gemacht. Synchronisation auch mit Outlook und OSX Mail / Evolution kein Problem. Zitieren
automatix Geschrieben 12. September 2009 Autor Geschrieben 12. September 2009 ich habe recht gute Erfahrungen mit der Groupware eGroupWare: Home gemacht. Synchronisation auch mit Outlook und OSX Mail / Evolution kein Problem. OK, danke für den Hinweis. Auf dem Diagramm von gestern ist eine Beziehung verkehrt rum gezeichnet. Jetzt habe ich das korrigiert und lade das Modell nochmal hoch. Würde gerne Eure Meinung zum Diagramm wissen. Danke. Zitieren
Schiller256 Geschrieben 12. September 2009 Geschrieben 12. September 2009 Einen Tipp habe ich noch schaue dir doch mal Datenbanken bzw Modell von bestehenden Anwendungen an. Da kannst du dir vielleicht ein paar Anregungen holen. Sunbird z.B. hat in meinen Augen schon die Funktionen zur Wiederholung die du benötigst und dieser nutzt zur Speicherung auch eine SQLite Datenbank die kannst du dir ja mal anschauen und sehen wie die es gemacht haben. Zitieren
automatix Geschrieben 12. September 2009 Autor Geschrieben 12. September 2009 Gute Idee! Aber ich komme nicht an das Datenmodell bzw. die Daten von Sunbird. Ich habe es nämlich mit SQLite Manager (Firefox Add-On) versucht, aber er findet keine *.sqlite-Dateien im Profile-Verzeichnis. Weißt Du, wo bei Sunbird die Daten abspeichert werden und wie man sich die Tabellen anzeigen lassen kann? Zitieren
Schiller256 Geschrieben 12. September 2009 Geschrieben 12. September 2009 Die Datenbank liegt in deinem Profilordner und heißt storage.sdb die sollte sich mit jedem Programm welches SQLite Datenbanken öffnen kann lesen lassen. Die Datei liegt in XP meist unter C:\Documents and Settions\<UserName>\Application Data\Mozilla\Sunbird\Profiles\<profilname>. Unter Vista liegt sie meist C:\Users\<UserName>\AppData\Roaming\Mozilla\Sunbird\Profiles\<profilname>. Solltest du die nicht finden einfach mal nach der Datei suchen. Zitieren
automatix Geschrieben 12. September 2009 Autor Geschrieben 12. September 2009 Danke! Hat geklappt! Komische Datenbank... Von den 13 Tabellen ist in keiner einzigen ein Fremdschlüssel definiert. Die Beziehungen lassen sich gar nicht nachvollziehen. Die Tabelle mit den Terminen heißt cal_events. Wenn ich bei einem Termin den Typ der Wirderholung ändere, verändert sich (manchmal!) der Wert in deren Spalte flags. So hat die Spalte bei "Wiederholt sich nicht" der Wert 4 und bei "Täglich"/"Wöchentlich"/"Jeden Werktag" etc. den Wert 20. Also dachte ich zunächst, das wäre ein Fremdschlüssel, der die Tabelle mit einer "Turnus"-Tabelle verbindet. Letztere konnte ich aber leider nicht finden. Zitieren
flashpixx Geschrieben 12. September 2009 Geschrieben 12. September 2009 Die Tabelle mit den Terminen heißt cal_events. Wenn ich bei einem Termin den Typ der Wirderholung ändere, verändert sich (manchmal!) der Wert in deren Spalte flags. So hat die Spalte bei "Wiederholt sich nicht" der Wert 4 und bei "Täglich"/"Wöchentlich"/"Jeden Werktag" etc. den Wert 20. Also dachte ich zunächst, das wäre ein Fremdschlüssel, der die Tabelle mit einer "Turnus"-Tabelle verbindet. Letztere konnte ich aber leider nicht finden. Das kann auch eine Codierung sein. Z.B. werden in der Unixwelt die Rechte als Octalwerte abgespeichert, nur weil da z.B. 755 steht, muss das nicht der dezimalen Zahl 755 entsprechend. Je nach Datentyp des Feldes kann auch eine bitweise Codierung vorgenommen worden sein. Gerade bei SQLite sollte man im Hinterkopf haben, dass die Datentypen dynamisch sind: SQLite ? Wikipedia Jede Spalte kann Daten beliebiger Typen enthalten, erst zur Laufzeit wird nötigenfalls konvertiert. Zitieren
Schiller256 Geschrieben 12. September 2009 Geschrieben 12. September 2009 Komische Datenbank... Von den 13 Tabellen ist in keiner einzigen ein Fremdschlüssel definiert. Die Beziehungen lassen sich gar nicht nachvollziehen. Das ist auch verständlich denn SQLite ist für den Embedded-Einsatz gedacht daher werden nicht alle Funktionen die du kennst unterstützt. z.B. fehlt die Funktionen für die Referentielle Integrität also die FOREIGN KEY Definition beim erzeugen der Tabelle. Für den Turnus/ Wiederholung ist die Tabelle cal_recurrence verantwortlich und diese hängt an der Tabelle cal_events . Auf den ersten Blick würde ich sagen das die Felder cal_id und id als Primärschlüssel genutzt werden. 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.