Datenbanken - Wie wird es richtig gemacht?
Alexander
- programmiertechnik
Hallo,
entschudligt bitte diesen etwas komischen Titel meines Postings, mir viel aber beim besten Willen nichts passenderes ein.... ;)
Nun gut, Ich bastele gerade an einer Access-FAQ-Datenbank rum, die aus den einzelnen Datensätzen statische HTML-Seiten generiert. Da, wo die Seiten liegen werden, gibt es keine Datenbank-Unterstützung, aber das nur am Rande.
Nun kann es "passieren", daß ich innerhalb eines Datensatz (besser in einer FAQ-Antwort) einen Verweis, auf eine andere (Internet-)Seite oder einfach nur Formatierungen haben möchte. Ich kann jetzt ja im Antwort-Feld einen Link eintragen, oder auch Formatierungen eingeben. Das Problem ist dann aber nur, dass ich die eigentlichen (Antwort-)Daten ja "verunreinige", wenn ich Links oder Formatierungen angebe. Eine weiter Verarbeitung dieser Daten (es sollen auch Access-Berichte, d.h. Ausdrucke mit diesen Daten erstellt werden) ist dann nicht mehr so gut möglich, da ich ja dann die Formatierungen nicht mehr möchte.
Es gibt also zwei Lösungsmöglichkeiten:
I. Ich trage die Formtierungen ins Antwortfeld ein und lösche sie, wenn ich die Berichte erstelle.
II. Ich durchsuche die formatfreien Daten nach Schlagworten und füge dann erst Formatierungen ein. Dies ist jedoch ziemlich aufwendig und nicht so genau zu steuern wie im ersten Fall.
Ich tendiere also zum ersten Fall, auch wenn dieser mir eigentlich nicht so behagt...
Wie macht Ihr es?
Ich hoffe, man konnte meinen Gedankengängen folgen und freue mich über jede Antwort.
Bis dann...
Alex :)
Hi Alex,
ich finde, Du hast den trade-off ziemlich schön auf den Punkt gebracht. Ich denke, den Königsweg gibt es an dieser Stelle einfach nicht.
Ich kann jetzt ja im Antwort-Feld einen Link
eintragen, oder auch Formatierungen eingeben.
Das Problem ist dann aber nur, dass ich die
eigentlichen (Antwort-)Daten ja "verunreinige",
wenn ich Links oder Formatierungen angebe.
"ja, aber". Ich würde an dieser Stelle in der Tat möglichst kein <a> und auch kein <i> einfügen wollen. Aber gegen ein <hyperlink> oder <emphasize> hätte ich nichts einzuwenden.
Deine Texte haben offensichtlich Struktur. Diese Struktur willst Du ausdrücken - also gehört sie durch Auszeichnung in den Inhalt hinein.
Der Inhalt wird später für verschiedene Zwecke in verschiedenen Darstellungsformen verwendet - also durch verschiedene Viewer interpretiert.
Je sicherer Du bist, daß dies alles HTML-fähige Viewer sind, desto eher darfst Du es wagen, HTML-Tags für die Strukturierung zu verwenden.
Bist Du Dir nicht sicher, dann gehe eine Abstraktionsebene weiter weg (XML, eigene DTD?) und generiere HTML aus Deinen eigenen Tags. Deshalb habe ich oben bewußt Phantasienamen verwendet.
II. Ich durchsuche die formatfreien Daten nach
Schlagworten und füge dann erst Formatierungen ein.
Dies ist jedoch ziemlich aufwendig und nicht so
genau zu steuern wie im ersten Fall.
Der Aufwand mag noch vertretbar sein (ich bastele gerade an einem Nachrichten-Viewer, der zu erraten versucht, ob er einen Dokument-Inhalt als HTML-Fließtext anzeigen darf oder doch besser mit <pre> der Formatierung der Original-Quelle folgen sollte ...), aber die Trennschärfe ist der Knackpunkt. Wenn Deine Aufgabenstellung hier Perfektion verlangt, mußt Du zu Methode I. greifen.
Ich tendiere also zum ersten Fall, auch wenn dieser
mir eigentlich nicht so behagt...
Warum nicht? Ich denke sogar, XML müßte sich dafür ziemlich gut eignen. (Ich habe keine Ahnung von XSLT und Konsorten, aber da gibt es hier Cracks genug ...)
Wie macht Ihr es?
Die korrekte Beschreibung der Semantik hätte für mich absoluten Vorrang vor ein paar Millisekunden Laufzeit eines Transformators.
Denn schlimmstenfalls kannst Du immer noch cachen, d. h. mehrere Versionen aus einem abstrakten "Master" statisch generieren und diejenige ausliefern, die gerade gebraucht wird. (Redundanz ist nicht immer böse.)
Viele Grüße
Michael
Hallo Michael,
auch auf die Gefahr hin, dass soooo ein tiefer Thread nicht mehr gelesen wird, möchte ich trotzdem meine Lösung vorstellen und ein wenig Dank ausschütten.
Also Michael, vielen Dank ;)
ich finde, Du hast den trade-off ziemlich schön auf den Punkt gebracht. Ich denke, den Königsweg gibt es an dieser Stelle einfach nicht.
*verbeug* Danke :)
"ja, aber". Ich würde an dieser Stelle in der Tat möglichst kein <a> und auch kein <i> einfügen wollen. Aber gegen ein <hyperlink> oder <emphasize> hätte ich nichts einzuwenden.
Einen harten (nun gut, hart war er eigentlich nicht...) Tag Arbeit später ist meine Self-Made-Access-To-HTML-And-Papier-Datenbank fertig.
Das hat leider so lange gedauert, da ich von VBA in Access so gut wie keinen Plan habe und mich deshalb erstmal einarbeiten mußte.
Ich bin den von Dir vorgeschlagenen Weg gegangen und habe die Struktur mit selbst definierten "Tags" ausgestattet (es gibt aber keine DTD, siehe unten).
Je sicherer Du bist, daß dies alles HTML-fähige Viewer sind, desto eher darfst Du es wagen, HTML-Tags für die Strukturierung zu verwenden.
Wie schon gesagt, es sind HTML-Seiten und "normale" Papierdokumente, die ausgedruckt werden. Eine weitere Verwendung der Daten als für diese beiden Zwecke ist bisher nicht geplant, aber zur Zeit noch ohne größere Probleme möglich...
Bist Du Dir nicht sicher, dann gehe eine Abstraktionsebene weiter weg (XML, eigene DTD?) und generiere HTML aus Deinen eigenen Tags. Deshalb habe ich oben bewußt Phantasienamen verwendet.
Leider habe ich einfach keine Ahnung von XML, DTD und alles, was da so zugehört. Ich habe das jetzt also so gut wie möglich umgesetzt, XML-konform ist meine Datenbank aber sicher kein Stück.
Der Aufwand mag noch vertretbar sein (ich bastele gerade an einem Nachrichten-Viewer, der zu erraten versucht, ob er einen Dokument-Inhalt als HTML-Fließtext anzeigen darf oder doch besser mit <pre> der Formatierung der Original-Quelle folgen sollte ...), aber die Trennschärfe ist der Knackpunkt. Wenn Deine Aufgabenstellung hier Perfektion verlangt, mußt Du zu Methode I. greifen.
Mit Perfektion hat dies nicht ganz so viel zu tun. So wird z.B. zweimal das Wort "Programm" (in unterschiedlichen Datensätzen) auf unterschiedliche Seiten verlinkt. Ich muß also zuerst das Wort während des Durchlaufes finden, den Datensatz erkennen und dann in einer anderen Tabelle nachsehen, wohin verlinkt werden soll. Dies ist doch recht umständlich. Jetzt wird der Datensatz nach meinen Tags durchsucht, und dieser dann, je nach Ausgabeform, gelöscht oder in HTML-komforme Tags umgewandelt.
Die korrekte Beschreibung der Semantik hätte für mich absoluten Vorrang vor ein paar Millisekunden Laufzeit eines Transformators.
Da sind wir schon zwei *g*
Denn schlimmstenfalls kannst Du immer noch cachen, d. h. mehrere Versionen aus einem abstrakten "Master" statisch generieren und diejenige ausliefern, die gerade gebraucht wird. (Redundanz ist nicht immer böse.)
Da hast Du recht. Zumal auch Speicherplatz-Probleme und Rechenpower selbst bei sehr umfangreichen Datenbanken (z.B. mit Grafiken) heute echt nicht mehr das Problem darstellen.
Also, nochmals Danke und viele Grüße...
Alex :)
Hi Alex,
auch auf die Gefahr hin, dass soooo ein tiefer
Thread nicht mehr gelesen wird,
doch, wird er. Wieso sollte er nicht? Ich habe noch nie verstanden, wieso irgendjemand _davor_ Angst hat.
Ich lese die Hauptdatei in letzter Zeit ungefähr einmal pro Tag (manchmal mehrfach, manchmal ein paar Tage nicht), und zwar _immer_ komplett.
Mein Browser markiert mir ja die benutzten Links, und dort, wo die Farbe wechselt, bleibt mein Auge sogar vorrangig hängen, weil ich die Fortsetzung der Diskussion ja auch lesen will, wenn ich den Anfang mitbekommen habe. Threads, gegen die ich mich beim ersten Mal entschieden habe, bekommen auch in späteren Durchgängen keine hohe Priorität. Und dabei ist egal, ob sie oben oder unten stehen - wichtig ist für mich eine Fragestellung, die mich anspricht, und ein Themenbereich, zu dem ich etwas beitragen kann. Falls ich weniger Zeit habe, nutze ich übrigens ein (selbst geschriebenes) Programm, das einen Teil dieser Filterfunktion erledigen kann.
(Merke: Abschreckende oder nichtssagende Überschriften sind _wirklich_ kontraproduktiv!)
Ausnahme vom obigen Verfahren: Ein Posting, das lange Zeit unbeantwortet geblieben ist, zieht mich ebenfalls an, weil ich oftmals die Problemstellung "übersetzen" kann (und dann ggf. sogar die Überschrift anpasse, damit andere Leser, deren Fachgebiet das eher sein könnte, auf das eigentliche Problem aufmerksam werden und dann eben doch mal hinein schauen.
Bei solchen Postings nimmt die Chance, daß ich sie lese, also mit der Zeit sogar zu!
möchte ich trotzdem meine Lösung vorstellen und ein wenig Dank ausschütten.
Gleichfalls.
Dein Verhalten als Fragesteller ist vorbildlich.
Ich wollte, wir hätten mehr von Deiner Sorte.
Viele Grüße
Michael