Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Strukturierte Daten in einer Datenbankspalte speichern?

Sehr persönlich gesprochen, Umfragen sind ein Fall, in dem ich denke, dass nichts normalisiert und JSON so ziemlich wie es ist gespeichert wird ist die bessere Option.

Ohne sie werden Sie am Ende alle möglichen bizarren Anwendungsfälle haben, die Sie irgendwann verwalten wollen. Zusätzlich zu ordentlichen Multiple-Choice-Fragen aller Art müssen Sie auch die "Andere"-Antworten darin verwalten, Bedingungsfragen, Bedingungsgruppen von Fragen, die Liste geht weiter und weiter. Darüber hinaus sind Umfragen – wie andere Datenformen – Änderungen unterworfen, und die Dinge ändern sich von phantastisch zu nuklear, wenn sie dies tun.

Der Vorteil von JSON besteht darin, dass Sie, da Umfragen konzeptionell unabhängig voneinander sind, wenig bis gar keine referenzielle Integrität von einer zur nächsten benötigen, sodass Sie den gesamten Baum von Fragen und Optionen genauso gut als einen JSON-Blob speichern können. und kümmern Sie sich um die Formatierung in Ihrer App.

Dasselbe gilt übrigens für jede eingereichte Antwort:Nehmen Sie den ursprünglichen Blob, markieren Sie die relevante Antwort darin als ausgewählt usw. und speichern Sie das resultierende JSON wie es ist , anstatt Verweise auf die ursprünglichen Fragen neben dem zu speichern, was beantwortet wurde. Auf diese Weise können Sie leicht nachverfolgen, was Benutzer eigentlich tun beantwortet, im Gegensatz zu dem, was in der aktuellen Version der Umfrage steht, und unabhängig davon, wie stark sich die Umfrage seit der ursprünglichen Beantwortung verändert hat.

Wenn Sie die Antworten später auswerten müssen, beachten Sie, dass Postgres es ermöglicht, JSON mit GIST-Indizes für das gesamte Feld und BTREE-Indizes für Ausdrücke zu indizieren.