Ich möchte dynamische Felder in meinen Datenbanksätzen haben.
Zum Beispiel: Ich möchte eine Anwendung erstellen, damit Benutzer ihre eigenen Formulare erstellen können.
Ein Benutzer könnte die folgenden Formulare erstellen:
Persönliches Profil:
Arbeit:
Länder:
Wie Sie sehen, ist dies eine sehr dynamische Struktur:
Also frage ich mich, was ist die beste Datenbank dafür: relational (mysql / postgresql) oder nicht-relational wie mongodb / couchdb / cassandra oder sogar XML-Datenbanken wie xindice?
Und selbst wenn ich dafür nicht-relationale Datenbanken wähle, wäre es klug, sicherheitsrelevante Informationen wie Kunden- und Rechnungsinformationen darauf zu speichern?
Ich habe Leute sagen hören, dass, wenn Ihre Informationen Einzigartigkeit erfordern, dann verwenden Sie relationale Datenbank. "Wir wollen nicht riskieren, unsere Kunden doppelt zu belasten". Welche Probleme in nicht-relationalen Datenbanken bedeuten sie eigentlich? Können Sie keine eindeutigen Daten in nicht-relationalen Datenbanken speichern?
Eine andere Sache, über die ich nachgedacht habe: Wird das Speichern von Daten in nicht-relationalen Datenbanken bedeuten, dass ich doppelte Einträge habe?
Betrachten Sie dieses Beispiel:
Kategorien:
Büro
Büro
Wie Sie sehen, gibt es Situationen für identische Einträge. Wie gehen nicht-relationale Datenbanken damit um? Ich bin so an relationale Datenbanken gewöhnt.
Ich fasse meine Fragen zusammen:
Ich empfehle Ihnen dringend, CouchDB dafür auszuprobieren.
submission:user:5:form:a3df2a712
Mit CouchDB können Sie das Problem vermeiden, dynamisch eindeutige Tabellen für jedes Formular zu erstellen, das ein Benutzer erstellen könnte.
Wenn Ihre Daten dem relationalen Modell sehr gut entsprechen, Sie aber einige dynamisch formatierte Daten speichern müssen, die nicht riesig sind, werden Sie wahrscheinlich besser JSON, XML oder Ähnliches in einer Spalte speichern. Obwohl Sie dadurch einige Vorteile der erstklassigen SQL-Typisierung verlieren (Indizierung, Überprüfung von Fremdschlüsseleinschränkungen, Typprüfung usw.), eignet es sich gut zum Speichern dynamisch strukturierter Dokumente, wenn Ihre Abfragen sich nicht um ihre Interna kümmern.
Wenn Sie daran interessiert sind, hauptsächlich relationale Daten mit einem Hauch von JSON / XML / etc. zu speichern, empfehle ich PostgreSQL. PostgreSQL hat einen XML-Datentyp, aber ich empfehle es nicht, da ich XML hasse: P. Niemand hält Sie davon ab, JSON in einem TEXT-Feld zu speichern, aber PostgreSQL wird bald einen JSON-Datentyp mit unterstützenden Funktionen haben. Das hstore Contrib-Modul bietet eine effiziente Möglichkeit zum Speichern von Schlüssel / Wert-Paaren und bietet außerdem Textindex-Unterstützung.
Obwohl das Verschieben von JSON oder ähnlichem in eine SQL-Datenbank-Spalte gegen das relationale Modell gerichtet ist, ist es normalerweise besser, es trotzdem zu tun (wenn es Sinn macht!). Andernfalls müssen Sie das gesamte Schema Ihrer Anwendung der Datenbank erklären, was zu einer Menge SQL- und Datenbank-Mapping-Code führt, der wirklich nichts bewirkt.
Die zu wählende Datenbank hängt mehr davon ab, was und wie Sie etwas mehr abfragen möchten als das, was Sie speichern möchten. Alle DBs können Sie speichern, was Sie wollen.
RDBMS eignen sich besonders gut für die Abfrage basierend auf dem relationalen Modell, und zwar relativ willkürlich. Durch Ad-hoc-Filter und Joins können Sie alle Arten von Magie ausüben.
Die NOSQL-DBs neigen dazu, bei ihren Abfragen weniger flexibel zu sein, aber sie sind auch bei anderen Aufgaben gut (beispielsweise arbeiten sie besser mit "unstrukturierten" Daten).
In Anbetracht dessen, was Sie hier gepostet haben, verwende ich einfach eine SQL-Datenbank und definiere die Tabellen so, wie der Benutzer sie definiert haben möchte. Richten Sie die Indizes ein, richten Sie die Abfragen ein. Klingt für mich wie ein echter Klacks. SQL-DBs behandeln all diese "Definitionsfelder im Handumdrehen" praktisch, weil ... das ist, was sie tun. Also benutz das.
Tags und Links mysql database postgresql mongodb couchdb