Anwendungseinstellungen in der Datenbank

8

In der Vergangenheit habe ich alle allgemeinen Einstellungen und Konfigurationselemente wie den Titel der benutzerdefinierten Anwendung, die Privatadresse, die Version, das Debug usw. in einer Datei "settings.php" gespeichert, die ich in alle meine Skripte aufnehmen würde.

Ich würde davon ausgehen, dass es besser ist, eine Datenbanktabelle speziell für solche Anwendungseinstellungen einzurichten. Auf diese Weise müssen Sie keine PHP-Datei bearbeiten, um sie anzupassen oder Änderungen vorzunehmen. Dennoch bin ich etwas vorsichtig, wie ich das einrichten würde.

Ich habe über zwei Optionen nachgedacht:

  1. Ich habe eine Tabelle mit einer Zeile und vielen Spalten, wodurch jede Spalte zu einem eindeutigen Variablenwert wird.
  2. Ich habe zwei Spalten, wobei die erste der Variablenname und die zweite der Wert der Variablen ist.

Irgendwelche Vorschläge oder Dinge, die ich aus Sicht des Datenbankdesigns beachten sollte?

CenterOrbit
quelle

Antworten:

9

Unter Option 1 wird Ihnen eine einzelne Zeile garantiert (wenn Sie daran denken, die eine Zeile aus erster Hand einzufügen).

  • Wenn Sie eine neue Einstellung einführen möchten, müssen Sie ALTER TABLE ausführen, um die erforderliche Spalte hinzuzufügen.
  • Wenn Sie eine alte Einstellung entfernen möchten, müssen Sie ALTER TABLE ausführen, um die nicht benötigte Spalte zu entfernen.
  • Sie müssten davon ausgehen, dass die Spalte im Code vorhanden ist. Andernfalls müssen Sie möglicherweise information_schema.columns abfragen , um sicherzustellen, dass die Spalte, die die erforderliche Einstellung darstellt, in der Tabelle vorhanden ist oder nicht. Das Abfragen der Tabelle information_schema.columns ist bei Dutzenden (oder sogar Hunderten) von InnoDB-Tabellen in einer Umgebung mit hohem Schreibaufwand äußerst schlecht. Dadurch könnten information_schema.columns möglicherweise zeitweise gesperrt werden, bis sie frei lesbar sind.
  • Sie sollten sicherstellen, dass die Tabellenanzahl immer eins (1) ist.

Bei Option 2 sieht das etwas anders aus

  • Wenn Sie eine neue Einstellung einführen möchten, müssen Sie INSERT ausführen, um die erforderliche Einstellung als Zeile hinzuzufügen.
  • Wenn Sie eine alte Einstellung entfernen möchten, müssen Sie DELETE ausführen, um die erforderliche Einstellung als Zeile zu entfernen.
  • Sie müssen die Tabelle nach dem Variablennamen abfragen, um festzustellen, ob die Option vorhanden ist.
  • Keine virtuelle Beschränkung für das Hinzufügen oder Löschen einer Einstellung zu einer Tabelle

Was haben diese Optionen gemeinsam?

  • Wenn Sie alte Einstellungen in Ruhe lassen, können alte Versionen des App-Codes möglicherweise die alten Einstellungen verwenden. Dies führt jedoch nur zu Unordnung in der Tabelle.
  • Die Storage Engine sollte InnoDB sein, damit mehrere Personen daraus lesen können.

Persönlich würde ich Option 2 wählen, da das Erstellen neuer Einstellungen, optional das Entfernen alter Einstellungen und das Überprüfen auf vorhandene Einstellungen an einer Tabelle erfolgen würde. Die Methode zum Abrufen von Einstellungen wäre alle gleich. Unter Option 1 müssten Sie information_schema.columns abfragen und bestimmte Annahmen über die Einstellungstabelle treffen. Die Reihenfolge der Ereignisse zum Abrufen von Einstellungen kann sich von Codeversion zu Codeversion ändern.

RolandoMySQLDBA
quelle
ahh ja, ich habe nicht berücksichtigt, dass auch auf information_schema.columns zugegriffen werden muss. Sie machen ein sehr starkes Argument für Option 2. Vielen Dank!
CenterOrbit