Beim Entwerfen eines relationalen Datenbankschemas für Webanwendungen stelle ich häufig fest, dass ich eine Tabelle erstelle, die nur eine Zeile und nur eine Zeile enthält. Es scheint, dass dies der falsche Weg ist, um es zu entwerfen, aber ich kann mir nichts Besseres einfallen lassen, oder das ist offensichtlich "der richtige Weg, es zu tun".
Ein aktuelles Beispiel ist eine Website, mit der die Benutzer den Inhalt der Homepage manuell steuern können. Nun, es gibt nur eine Homepage. Ich habe eine Tabelle erstellt, die alle erforderlichen Felder zum Erstellen der Homepage enthält, z. B. ein Textfeld für einen Bereich, der beschreibenden Text enthält. Ein Feld zum Speichern des Namens einer großen Bilddatei. Einige Fremdschlüssel, die auf Artikel verweisen, die auf der Homepage angezeigt werden usw. Es funktioniert, aber es fühlt sich falsch an, eine Tabelle mit nur einer Zeile zu haben.
In der Vergangenheit habe ich viele andere Designs ausprobiert, z. B. das Zulassen mehrerer Zeilen in der Homepage-Tabelle und das zufällige Auswählen einer Zeile. Ich habe versucht, ein boolesches Feld mit dem Namen "active" hinzuzufügen und eine der aktiven Homepages nach dem Zufallsprinzip auszuwählen. Ich habe versucht, nur eine Zeile zu erzwingen, die zu einem bestimmten Zeitpunkt in der Anwendungslogik aktiv ist. Ich habe versucht, nicht einmal eine Homepage-Tabelle zu erstellen und alle anderen Elemente, z. B. Artikel, mit booleschen Feldern mit Namen wie featured_on_homepage zu versehen.
In den meisten Fällen konnte ich die Homepage mit einer Reihe von Konstanten in einer Einstellungsdatei erstellen. Das Hauptproblem mit der Einstellungsdatei besteht darin, dass sie unter der Kontrolle des Entwicklers steht. Da so etwas wie der Inhalt der Homepage vom Benutzer bearbeitet werden muss, muss er in der Datenbank gespeichert werden.
Auf vielen Websites habe ich dieses Problem nicht, weil ich Dinge wie die Homepage mit einer Abfrage wie der Auswahl der fünf neuesten Artikel erstellen kann. Wenn ich jedoch Seiten habe, die manuell mit strengen Anforderungen erstellt wurden, wird es schwierig, sie in der Datenbank zu modellieren. Aber stellen Sie sich vor, Sie haben eine Fototabelle und eine Artikeltabelle. Voraussetzung ist, dass auf der Homepage genau fünf Fotos, genau drei Artikel und zwei vom Benutzer manuell gesteuerte beliebige Textblöcke angezeigt werden. Wie modellieren Sie das in der Datenbank richtig?
Ich habe dieses Modellierungsproblem auch in vielen anderen Fällen außer auf Homepages. Es ist nur das einfachste und allgemeinste Beispiel, das mir einfallen könnte.