Konzept und Aufbau einer neuen Datenbank
Für die optimale Flexibilität und einen vereinfachten Unterhalt, sollten Sie zu Beginn einige Punkte beachten.
Da sich gewisse Elemente (Tabellen, Scripte, Design) immer wieder wiederholen, macht es Sinn, sich eine Vorlage zu erstellen, auf Welcher immer wieder aufgebaut werden kann.
Dieser Beitrag befindet sich derzeit (2023) in Überarbeitung.
Wenn Sie mit FileMaker arbeiten, dann sind die wichtigsten Elemente die Tabellen, die Layouts und die Scripte.
Die Tabellen sind die Datenspeicher in FileMaker. Sie bestehen aus Spalten und Zeilen. Die Spalten definieren die Eingabefelder eines Datensatzes, die Zeile den Datensatz selber.
Feld 1 | Feld 2 | Feld 3 | Feld 4 | Feld 5 | |
Datensatz 1 | Hans | Müller | Auweg | 9000 | St.Gallen |
Datensatz 2 | Peter | Studer | Birkenstrasse | 8000 | Zürich |
Datensatz 3 | Heidi | Graf | Im Ifang | 6000 | Bern |
In den Feldern (Spalten) werden die Inhalte der Datensätze strukturiert.
Für Texte, von kurz bis lang.
Dieses Format ist notwendig, um mit den Zahlen Berechnungen anstellen zu können. Buchstaben sind nicht erlaubt.
Das Datum wird bei der Anzeige individuell formatiert.
Die Zeit wird bei der Anzeige individuell formatiert.
Beinhaltet Datum und Zeit
Für Medien, z.B. Bilder.
Berechnet den Inhalt aus unterschiedlichen Feldern je Datensatz in Echtzeit.
Statistik, damit arbeite ich aber nicht, kann deshalb nichts Näheres dazu schreiben.
Was auch immer Sie in Ihrer Datenbank speichern wollen, sei es Adressen, Rezepte, Textvorlagen, etc., für diese Daten benötigen Sie eine Tabelle. Das wird Ihre Haupt-Daten-Tabelle werden. Vorher erstellen wir als Basis aber erst mal andere Tabellen.
Oft macht es Sinn, Einstellungen zu definieren und anpassen zu können. Dafür verwende ich eine separate Tabelle (unsere 1. Tabelle) und wähle ‘globale Speicherung’ für die einzelnen Felder aus, also 1 Wert für alle Datensätze. Die Tabelle bekommt ein Layout und mindestens 1 Datensatz. Es können grundsätzlich beliebig viele Datensätze sein, da aber mit der globalen Speicherung in jedem Datensatz der selbe Inhalt enthalten ist, macht mehr als 1 Datensatz keinen Sinn.
Das kann z.B. die Fusszeile sein, die Versionsnummer, wann die Datei zuletzt geöffnet und geschlossen wurde.
Je nach Inhalt des verwendeten Layots (Liste, Einzelansicht) kann es Sinn machen, die Fenstergrösse und die Position individuell zu bestimmen. Die Angaben in der Datenbank an Stelle im Script zu speichern macht zugegebenermassen nur während der Entwicklung wirklich Sinn. Danach gibt es kaum noch einen Grund, an den Einstellungen zu schrauben. 4 Werte können definiert werden: Höhe, Breite, Abstand von oben und Abstand von links.
Einstellungen welche Funktionen und Anzeige beeinflussen.
Das erste Feld das ich in einer Tabelle erstelle ist grundsätzlich IMMER die Datensatz-ID. Das ist ein Feld vom Typ Zahl. In den Einstellungen dazu definiere ich die automatische Eingabe einer fortlaufenden Zahl.
Diese eindeutige Identifikation benötigen wir, um später Datensätze aus unterschiedlichen Tabellen miteinander verknüpfen zu können.
Manchmal kommt es vor, dass ich in Scripten für den Ablauf kurzzeitig irgendwelche Parameter speichern will. Dafür dient eine weitere Tabelle. Auch hier wähle ich ‘globale Speicherung’ aus, also 1 Wert für alle Datensätze.
Die Felder benenne ich z.B. zahl.1, zahl.2, zahl.3, text.1, text.2, text.3. Später kann man die Felder auch Funktionsspezifisch benennen, was der Übersichtlichkeit durchaus dient.
Solange Sie die Einzige Person sind, welche die Datenbank benutzt, ist diese Tabelle überflüssig. Wenn mehrere Personen Zugriff darauf erhalten sollen, so können Sie damit die Rechte der Anwender via Script regeln. So können Sie den Zugriff auf bestimmte Layouts und Funktionen beschränken. So soll z.B. nur der Admin das Logfile einsehen können. Oder dem Anwender werden nur definierte Einträge angezeigt.
Im Logfile können Sie definierte Aktionen protokollieren. Z.B. wenn ein Neuer Datensatz angelegt wird. Oder welche Informationen angezeigt werden.
Ein Layout ist die Darstellung und Anordnung der Inhalte auf dem Bildschirm. FileMaker unterstützt dabei Listen, Formulare, Tabellen und Berichte, sowie für den Druck zusätzlich Etiketten und Umschläge.
Um eine Übersicht der gespeicherten Daten zu erhalten eignet sich die Darstellung in Listenform.
Um die Daten eines einzelnen Datensatzes zu bearbeiten eignet sich das Layout ‘Formular’.
Ein Script ist eine Abfolge von Funktionen wie z.B. ‘neuen Datensatz anlegen‘, ‘Layoutwechsel‘, ‘Datensätze suchen‘ u.v.m.
Scripte werden vorwiegend durch Anklicken eines Elements wie Tasten, Grafik oder Feld ausgelöst. In Feldern kann definiert werden, dass ein Script u.A. ausgeführt wird, wenn der Inhalt verändert wird, oder beim Verlassen des Feldes.
Für sämtliche Funktionen die Sie ausführen, sollten Sie ein Script erstellen. Sie können zwar mittels einer Taste einen Layoutwechsel auch als Einzelfunktion ohne Script definieren. Mit einem Script können Sie allerdings weitere Funktionen hinzufügen, wie z.B. die bereits erwähnte Möglichkeit, die Grösse des Fensters dem jeweiligen Layout anzupassen.
Auch wenn Sie vorerst der Meinung sind, eine Einzige Funktion würde ausreichen, so erstellen Sie trotzdem ein Script. Beispiel Layoutwechsel: Einen Solchen werden Sie bei grösseren Projekten in mehreren Scripten zum selben Layout anwenden. Zur Listenansicht wechseln Sie aus dem Eingabelayout und nach der Suche nach Datensätzen. In den jeweiligen Scripts führen Sie dann den Script ‘Liste anzeigen‘ aus.
Sollen nun beim Layoutwechsel zu einem späteren Zeitpunkt weitere Funktionen dazu kommmen, wie z.B. die Fenstergrösse anpassen, muss nur das eine Script erweitert werden, weil ja alle anderen Scripte darauf zugreifen.
Unter Ablage > Dateioptionen > Script-Trigger kann angegeben werden, welcher Script beim Öffnen des Fensters (Datei) ausgeführt werden soll. Das Selbe geht auch beim Schliessen.
Im Startscript können ggf. individuelle Parameter gesetzt werden oder eine Benutzeridentifikation abgefragt werden.
Ich verwende das Startscript um eine Erkennungsgrafik anzuzeigen. Diese hat die Grösse von 400 x 400px. Beim Öffnen der Datei wechsle ich direkt zum Layout mit der Grafik, passe das Fenster entsprechend an, pausiere das Script 2 Sekunden und wechsle anschliessend (mit erneutem Anpassen der Fenstergrösse) zum Standardlayout.
Beim Layoutwechsel führe ich erst die entsprechende Funktion aus und passe anschliessend die Fenstergrösse an. Je nach Layout springe ich ggf. in ein Feld, um dieses direkt bearbeiten zu können.
Wenn nötig wechsle ich erst zum entsprechenden Layout. Anschliessend führe ich auch hier zuerst die entsprechende Funktion für einen neuen Datensatz aus. Ggf. schreibe ich direkt Werte in definierte Felder.
In der Regel werden Texte wie z.B. Feldbeschriftungen direkt im Layout erfasst. Damit ist dann allerdings die Sprache festgelegt.
Eine andere Möglichkeit ist, die Texte in einer separaten Tabelle zu erfassen, und im Layout die entsprechenden Platzhalter einzufügen. Das ist bei der Gestaltung zwar teilweise etwas unübersichtlich, hat aber den Vorteil, dass die Texte beliebig geändert werden können. Werden dazu mehrere Datensätze erstellt, können entsprechend mehrere Sprachen zur Auswahl gestellt werden.
Arbeitet man im Layout (insbesondere nach einer Pause), verliert man schnell mal den Überblick, welche Elemente mit einem Script versehen sind, und mit Welchem.
Neben allen Tasten und Feldern, welche durch Anklicken ein Script ausführen, vermerke ich dies mittels Textwerkzeug im Layout. Um das von den übrigen Texten abzuheben, verwende ich eine Kontrastfarbe die nicht zum Erscheinungsbild passt.
Damit nun der Text im Blättern Modus nicht angezeigt wird (sondern nur im Layout Modus), muss im Inspektor (Layout Modus) das Verhalten definiert werden. Geben Sie dazu einfach eine Gleichung ein die WAHR ist, z.B. 1=1.
Inspektor > Verhalten > Objekt ausblenden wenn
1 = 1
Wenn Sie die Möglichkeit haben wollen die Texte auch im Blättern Modus anzuzeigen, dann erstellen Sie in der Tabelle Setup das Feld developer.info und passen die Angabe im Inspektor entsprechend an:
Setup::developer.info = "Ausblenden"
Steht nun im Feld developer.info der Wert ‘Ausblenden‘, wird der Text im Blättern Modus nicht angezeigt. Steht irgend ein anderer Wert drin, wird der Text angezeigt. Damit ich das mittels Radio-Buttons umsetzen kann, verwende ich den Wert ‘Einblenden‘.
Also legen wir los:
Um eine Tabelle einzurichten (und später auch zu bearbeiten) gehen Sie auf Ablage > Verwalten > Datenbank. Hier können Sie Tabellen, Felder und Beziehungen erstellen, bearbeiten und löschen.
Das Meiste hier ist selbsterklärend, wo nötig, gehe ich später noch auf Details ein.
Die Inhalte der Sprachtabelle werden Sie im Layout als Platzhalter einfügen. Dies geschieht mit folgender Syntax:
<<Tabellenname::Feldname>>
Nun wird es im Layout, was die Übersichtlichkeit im Layout Modus angeht von Vorteil sein, wenn die Namen möglichst kurz sind. Wenn Sie damit arbeiten, werden Sie verstehen warum. In erster Linie ist es wichtig, dass Sie an Hand des Feldnamens eindeutig dessen Inhalt und Sinn erkennen. Dass da am Anfang immer der Tabellenname steht ist eher hinderlich. Deshalb empfehle ich einen möglichst kurzen Tabellenname. Nur ein Buchstabe. Ein L für Language, oder ein S für Sprache. Oder einfach ein X, weil es so schön symmetrisch ist.
<<L::Anschrift>>
<<S::PLZ>>
<<X::Ort>>
Die Klammern und Doppelpunkte nehmen bereits genug unnötigen Platz ein.
Legen Sie nun die Felder an. Verwenden Sie dafür Namen, welche den Inhalt klar erkennbar machen. Für alle Felder verwenden wir den Typ Text.
In der Tabelle wird für jede Sprache eine separate Zeile (Datensatz) angelegt. Gekennzeichnet wird die Zeile mit der Spalte (Feld) Language. Die Kennung +++ DE, EN, IT, FR.
Für den Userlogin benötigen wir die Felder User und Passwort.
Als nächstes kommt die Tabelle für die Einstellungen. Ich nenne sie Setup.
Mein erstes Feld heisst status.werkzeuge vom Typ Text. Dieses benötige ich später für ein Script, welches mir Werkzeugleisten und Textlineal ein- und ausblendet. Im normalen Betrieb werden diese Elemente nicht benötigt, jedoch aber bei der Gestaltung der Layouts. Da ist es sehr komfortabel, dies über ein Script zu lösen.
Als Nächstes kommen die Felder für die Fenstergrössen und -position dran. Entsprechend der Eingabe im Scripteditor.
fenster.layoutname.höhe (Zahl)
fenster.layoutname.breite (Zahl)
fenster.layoutname.oben (Zahl)
fenster.layoutname.links (Zahl)
Für jedes Layout brauchen Sie 4 Felder. Für folgende Layouts:
Wir erstellen gleich noch weitere Felder, die wir im späteren Verlauf benötigen.
developer.info (Text)
status.werkzeuge (Text)
Für die Userverwaltung benötigen wir für den Login die Felder User und Passwort. Beide Felder vom Typ Text. Weiter erstellen wir noch das Feld Realname, ebenfalls vom Typ Text.
Damit der Anwender abhängig von seiner Bildschirmgrösse den Abstand der Fenster nach links beeinflussen kann, kommt das Feld ‘Einzug‘ dazu, vom Typ Zahl.
xxx
fd
vdv
vdv
ddd
Um Tabellen miteinander zu verbinden, benötigen wir Beziehungen, welche das Zusammenspiel regeln. Schauen wir uns das am Beispiel der Sprachen an.
Das Startscript blendet Menu- und Werkzeugleisten sowie das Textlineal aus. Es wechselt zum Startlayout, pausiert 2 Sekunden und wechselt weiter zum Menulayout.
Feldwert setzen [ Setup::status werkzeuge ; "Ausblenden" ]
Script ausführen [ "Statusleisten prüfen" ]
Script ausführen [ "Layout: Start" ]
Scriptpause setzen [ Dauer (Sekunden):2 ]
Script ausführen [ "Layout: Login" ]
Feldwert +++
Menuleiste ein-/ausblenden [ Ausblenden ]
Werkzeugleisten ein-/ausblenden [ Ausblenden ]
Textlineal ein-/ausblenden [ Ausblenden ]
Gehe zu Layout [ Start (Setup) ]
Scriptpause setzen [ Dauer (Sekunden):2 ]
Gehe zu Layout [ Menu (Setup) ]
Nicht vergessen, den Script-Trigger für die automatische Ausführung beim Öffnen der Datei setzen (wie vorgängig beschrieben)
Gehe zu Layout [ Start (Setup) ]
Fensterposition/-größe ändern [ Aktuelles Fenster;
Höhe: Setup::fenster.start.höhe
Breite: Setup::fenster.start.breite
Oben: Setup::fenster.start.oben
Links: Setup::fenster.start.links + User::einzug ]
Wenn [ Setup::status.werkzeuge = "Ausblenden" ]
Menuleiste ein-/ausblenden [ Ausblenden ]
Werkzeugleisten ein-/ausblenden [ Ausblenden ]
Textlineal ein-/ausblenden [ Ausblenden ]
Sonst
Menuleiste ein-/ausblenden [ Einblenden ]
Werkzeugleisten ein-/ausblenden [ Einblenden ]
Textlineal ein-/ausblenden [ Einblenden ]
Ende (wenn)
xxx
xxx
Alter Entwurf 2020
In meinen verschiedenen WordPress-Installationen tummelt sich so manch Plugin, aktiv in Verwendung oder deaktiviert. Schnell verliert man die Übersicht über Sinn und Zweck der einzelnen Plugins. Und nicht jede Beschreibung dazu ist aufschlussreich genug. Deshalb habe ich mich entschlossen, mir darüber entsprechende Notizen zu machen. Das könnte ich jetzt einfach in einem Textdokument erledigen, oder eben in einer Datenbank, weil mir das übersichtlicher erscheint.
Als erste Tabelle erstelle ich die Tabelle Settings für die Einstellungen. Die Tabelle wird einen einzigen Datensatz bekommen mit umso mehr Feldern. Bei allen Feldern wähle ich in den Optionen unter Speicher Globale Speicherung verwenden aus. Die ersten vier Felder die ich hier erstelle lauten fenster.home.höhe, fenster.home.breite, fenster.home.oben und fenster.home.links. In diese Felder werden die Werte eingegeben um die Grösse des Fensters zu definieren, wenn das Layout Home angezeigt wird. Zur Anwendung kommen diese Einstellungen im Script Layout: Home.
Die Zweite Tabelle heisst Plugins. Hier erstelle ich drei Felder, Name, Beschreibung und URL. In diese Felder werden der Name des Plugins eingetragen, die Beschreibung dazu und der Link zum Download des Plugins.
Das erste Layout benötige ich zur Navigation in der Datenbank. Ich benenne es mit Home. Da ich mir die Möglichkeit offen halte, zu einem späteren Zeitpunkt in weiteren Tabellen weitere Informationen zu speichern. Hier platziere ich Buttons um zu den unterschiedlichen Layouts zu wechseln. Erst mal je ein Button zu den Einstellungen und zur Auflistung der Plugins.
Das zweite Layout heisst Setup, hier werden auf einer Seite alle Felder eingefügt um die entsprechenden Werte einzutragen.
Das erste Script das ich erstelle heisst Start.
Das zweite Script benenne ich mit Layout: Home. Es wechselt zum Layout Home und ändert die Grösse des Fensters so wie die Werte in den ersten vier Feldern der Tabelle Settings eingetragen sind.
Unter Ablage > Dateioptionen > Script Trigger wähle ich bei Fenster öffnen aus und weise das Script Start zu. Öffne ich also meine Datenbank WordPress.fmp, wird automatisch dieses Script ausgeführt und das Layout Home in der definierten Grösse angezeigt.
Fortsetzung folgt…