Mysql
 sql >> Base de données >  >> RDS >> Mysql

Stocker des données structurées dans une colonne de base de données ?

Personnellement, les sondages sont un cas où je pense ne rien normaliser et stocker JSON à peu près tel quel est la meilleure option.

Sans cela, vous allez vous retrouver avec toutes sortes de cas d'utilisation bizarres que vous voudrez éventuellement gérer plus tard. En plus des questions à choix multiples bien rangées de toutes sortes, vous devrez également gérer cette réponse "Autre" en elles, les questions conditionnelles, les groupes conditionnels de questions, la liste s'allonge encore et encore. De plus, les enquêtes sont - comme d'autres formes de données - sujettes à changement, et les choses passent de loufoques au nucléaire lorsqu'elles le font.

Le mérite de JSON est que, puisque les enquêtes sont conceptuellement indépendantes les unes des autres, vous n'avez que peu ou pas besoin d'intégrité référentielle de l'une à l'autre, vous pouvez donc tout aussi bien stocker l'ensemble de l'arborescence des questions et des options dans un seul blob JSON, et vous soucier de le formater dans votre application.

La même chose pour chaque réponse soumise, d'ailleurs :prenez le blob d'origine, marquez la réponse pertinente comme sélectionnée, etc., et stockez le JSON résultant tel quel , plutôt que de stocker des références aux questions d'origine à côté de ce qui a été répondu. Cela vous permettra de suivre facilement ce que les utilisateurs réellement répondu, par opposition à ce que dit la version actuelle de l'enquête, et faire indépendamment de la mesure dans laquelle l'enquête a divergé depuis qu'elle a été initialement répondue.

Si vous avez besoin d'extraire les réponses plus tard, notez que Postgres permet d'indexer JSON en utilisant les index GIST sur l'ensemble du champ et les index BTREE sur les expressions.