2011-06-29 57 views
6

Estoy escribiendo una aplicación que se comunica con una API web, que responde con JSON. Actualmente, estoy traduciendo los objetos JSON a objetos Java usando gson (que es impresionante, por cierto).¿Almacenar JSON en un campo sqlite?

Ahora, quiero almacenar algunos de estos objetos en una base de datos SQLite. Sin embargo, tienen muchas propiedades que nunca se usarían en las consultas (es decir, no estaré ORDER ing, WHERE ing, ni nada de eso con esas propiedades), por lo que creo que no es necesario crear columnas para todas ellas. Lo que estoy pensando en hacer es:

  • sólo tienen columnas para los datos esenciales que se utilizará cuando se consulta la base de datos
  • TEXT Que uno o BLOB columna (que se recomienda?) Que almacena el JSON real, entonces puedo volver a crear mi objeto Java y acceder a todos los datos.

Esto sería tanto hacer la vida más fácil y más eficiente mi código (que no tendría que escribir código muy diferente cuando se trata de datos de la API frente a los datos de la base de datos).

Sin embargo, aunque no veo inconvenientes, se siente un poco sospechoso.

¿Qué tipo de problema crees que me encontraría si utilizo esta técnica?

+3

Sería técnicamente una violación de las reglas de normalización - campos cuyos valores dependen de otros campos, pero las reglas de normalización son sugerencias, no leyes talladas en piedra que DEBE HACER. –

+0

En mi aplicación, almaceno datos JSON en un campo 'TEXT', pero son datos que no ameritan su propia tabla. – javisrk

+0

@Marc Me gusta cómo tradujo "a pescado" en "violación de las reglas de normalización" :) (sí, sé lo que son) – Felix

Respuesta

3

Lo principal que no me gustaría es contar con la estructura del JSON almacenado/recuperado para que sea válido, ya que está completamente fuera de las manos de la base de datos. No es que no pueda tomar precauciones ante posibles problemas, pero si el JSON se trunca de algún modo o se ve comprometido de alguna manera que hace que el analizador se dispare, entonces le falta el objeto completo en lugar de solo una propiedad no válida o truncada. Si ese es un riesgo aceptable, entonces probablemente sea una técnica razonable.

+0

¿Bajo qué circunstancias se truncaría el valor? Si no está en manos de la base de datos, ¿está hablando de una falla de hardware? Si es así, entonces supongo que puedo correr ese riesgo (probablemente empeorarían las cosas en caso de falla del hardware). – Felix

+0

Me refiero a un error humano en lugar de a una falla de hardware: si JSON no válido ingresa en la base de datos de alguna manera, sucede de manera silenciosa. Entre su biblioteca JSON y el comportamiento predeterminado de SQLite, * no debe * suceder, pero si lo hace, las consecuencias son mayores que si hubiera dejado que la base de datos administre la estructura de los datos. –

Cuestiones relacionadas