Mailinglisten-Archive |
Hallo Stephan, Am Dienstag, 23. Oktober 2007 schrieb Stephan Krauß: > Als Anstifter der Diskussion will ich noch einige Gedanken > nachschieben. Wir wollen eine Suppendatenbank aufbauen die > Suppenrezepte verwaltet. Nun haben wir uns gedacht das wir die > Zutaten (Gewürze,Salz,Pfeffer ...) als XML speichern. > > Zum einen wollen wir damit eine astronomische Anzahl von Datensätzen > verhindern. Zum anderen wollen wir Klassen schreiben die an Hand der > Tags soweit intelligent sind das die Rezepte vernünftig dargestellt > werden. > > Die Fragestellung geht dahin ob die Einlagerung von XML - Dateien > in eine MySQL nicht prinzipiell verpönt ist. letztlich geht es eigentlich um den Grund, warum man etwas in der Datenbank speichert. Es gibt gute und schlechte Gründe. :-) Ich speichere z.B. kleine HTML-Schnipsel für Links etc. in der Datenbank und nicht auf der Festplatte, weil es ansonsten auf jeder einzelnen Seite und auf der gesamten Website insgesamt viel zu viel Festplattenzugriffe gäbe. Pro Seite werden 25 Links dargestellt, wobei die Daten dazu in vier normalisierten Tabellen plus einer Cache-Tabelle abgelegt sind und die Links auch beliebig kombiniert werden können. Das Cachen einer gesamten Seite kommt daher in dieser Konstellation nicht in Frage. Aber nun zu Deiner Aufgabenstellung: Da Ihr XML offensichtlich als Datenablage verwenden wollt, müßt Ihr Euch entscheiden, was Ihr wollt: Ablage in XML-Dateien, in einer XML-Datenbank oder in einer MySQL-Datenbank. Es macht sicherlich in Eurem Fall keinen Sinn, die XML-Struktur in der relationalen Datenbank wie MySQL abzulegen. Ich kann mir auch schwer vorstellen, daß es eine astronomische Zahl von Datensätzen geben wird. Ich meine, selbst wenn es eine Million Suppenrezepte gäbe, wäre das doch für MySQL kein Problem. Wenn Ihr die Daten anständig normalisiert, z.B. Zutaten nur einmal in einer Zutatentabelle vorhaltet und dann mit einer Relationentabelle mit den Rezepten verknüpft, läßt sich die Datenmenge zu einem sehr gut reduzieren und zum anderen auch hervorragend durchsuchen. Auch performant, wegen der geringeren Datenmenge aufgrund der Normalisierung. Ich würde also als Basis Eurer Suppendatenbank eine vollständig normalisierte MySQL-Datenbank nehmen. Jetzt ist es natürlich so, daß eine vollständig normalisierte Datenbank nicht unbedingt die performanteste Lösung sein muß. Dafür kannst Du aber dann aber zusätzlich Query-Caches, Caching-Tabellen, Views, Cache-Dateien etc. verwenden. Wenn der Hintergrund Eurere Überlegungen sein sollte, die Daten sinnvoll in Objekte zu überführen, dann guck Dir mal ORM an: http://de.wikipedia.org/wiki/Objektrelationale_Abbildung Es gibt ORM-Mapper, die dafür sorgen, daß relational in der Datenbank abgelegte Daten in der Anwendung in Objekten verfügbar sind. Solltest Du Drittanbieter mit XML-Daten versorgen wollen, z.B. per RSS, REST oder SOAP, dann kannst Du die benötigten XML-Daten problemlos aus der Datenbank generieren. Da sich Deine Daten mit Sicherheit kaum ändern werden, nachdem sie eingestellt worden sind, wirst Du hier auch keinen unverhältnismäßigen Generierungs- bzw. Caching-Aufwand haben. Dasselbe gilt natürlich für die Ausgabe auf der Website. Einmal mit Smarty oder PEAR::Cache das Rezept generieren und cachen und fertig. :-) Viele Grüße, Lutz
php::bar PHP Wiki - Listenarchive