Ich habe einmal Schlüssel-Wert-Paare in einer Datenbank verwendet, um eine Tabelle (zur Dateneingabe) zu erstellen, in der ein Kassierer seine Aktivitäten aus der Arbeit an einer Kassenschublade zusammenfasst. Jedes k / v-Paar stellte eine benannte Zelle dar, in die der Benutzer einen Geldbetrag eingegeben hatte. Der Hauptgrund für diesen Ansatz ist, dass sich die Tabelle stark geändert hat. Neue Produkte und Dienstleistungen wurden routinemäßig hinzugefügt (daher erschienen neue Zellen). Außerdem wurden bestimmte Zellen in bestimmten Situationen nicht benötigt und konnten fallen gelassen werden.
Die App, die ich geschrieben habe, war eine Neufassung einer Anwendung, die das Kassiererblatt in separate Abschnitte unterteilt hat, die jeweils in einer anderen Tabelle dargestellt sind. Das Problem hierbei war, dass beim Hinzufügen von Produkten und Dienstleistungen Schemaänderungen erforderlich waren. Wie bei allen Designentscheidungen gibt es Vor- und Nachteile, eine bestimmte Richtung im Vergleich zu einer anderen einzuschlagen. Mein Redesign hat sicherlich langsamer und schneller Speicherplatz verbraucht. Es war jedoch sehr agil und ermöglichte das Hinzufügen neuer Produkte und Dienstleistungen innerhalb von Minuten. Das einzige Problem war jedoch der Festplattenverbrauch. Es gab keine anderen Kopfschmerzen, an die ich mich erinnern kann.
Wie bereits erwähnt, ist der Grund, warum ich normalerweise einen Schlüssel-Wert-Paar-Ansatz in Betracht ziehe, der, wenn Benutzer - dies könnte der Geschäftsinhaber sein - ihre eigenen Typen mit benutzerspezifischen Attributen erstellen möchten. In solchen Situationen bin ich zu folgender Feststellung gekommen.
Wenn entweder keine Daten über diese Attribute abgerufen werden müssen oder die Suche nach dem Abrufen eines Datenblocks auf die Anwendung verschoben werden kann, empfehle ich, alle Attribute in einem einzigen Textfeld zu speichern (mithilfe von JSON, YAML, XML usw.). ). Wenn es dringend erforderlich ist, Daten anhand dieser Attribute abzurufen, wird dies unübersichtlich.
Sie können eine einzelne "Attribut" -Tabelle (ID, Element-ID, Schlüssel, Wert, Datentyp, Sortierwert) erstellen, in der die Sortierspalte den tatsächlichen Wert in eine nach Zeichenfolgen sortierbare Darstellung umwandelt. (zB Datum: "2010-12-25 12:00:00", Nummer: "0000000001") Oder Sie können separate Attributtabellen nach Datentyp erstellen (z. B. string_attributes, date_attributes, number_attributes). Unter zahlreichen Vor- und Nachteilen beider Ansätze: Der erste ist einfacher, der zweite ist schneller. Beides führt dazu, dass Sie hässliche, komplexe Abfragen schreiben.