Me gustaría saber cuándo no se debe usar Transformable, sino que se debe crear y utilizar la relación To-many.
Solo debe usar atributos transformables cuando sea absolutamente necesario. No son una conveniencia o un atajo, pero una necesidad de recursos intensivos en algunas circunstancias.
rara vez utiliza la base de datos para almacenar estructuras de datos como matrices o diccionarios porque Core de datos se utiliza principalmente para no para el almacenamiento/persistencia, sino más bien para el modelado/simulación. Es inútil para modelar datos para convertir una estructura de datos en un gran blog de datos sin lógica.
Los atributos transformables se suelen utilizar para almacenar una clase que gestiona activamente los datos que contiene, p. transformando un UIImage para que puedas tomar un UIImage directo de la tienda UI y recuperarlo todo en una sola pieza.
En respuesta a su pregunta principal:
Soy más curiosidad por lo grande que los datos pueden ser hasta que afecta rendimiento y que es mejor para normalizar ellos.
Depende principalmente de la combinación de tamaño y complejidad. Cada vez que transforma un grupo de objetos existentes en un blob de datos, debe leer todo el blog transformándolo. Por lo tanto, si almacena una matriz de 1mb por transformación, obtendrá una matriz de 1mb en la memoria cuando ejecute la transformación inversa.Cada transformación, por pequeña que sea, requiere más tiempo de procesamiento que el acceso a un atributo normal o incluso la búsqueda de otro objeto gestionado. Por lo tanto, tener una gran cantidad de pequeñas transformaciones a las que a menudo se accede también causará un gran golpe de rendimiento.
Es siempre mejor para descomponer grandes trozos de datos en entidades, atributos y relaciones. Al hacerlo, obtendrá toda la flexibilidad y optimizaciones de Core Data de forma gratuita. Me encuentro utilizando Core Data en lugar de matrices y diccionarios, porque una vez que realmente te das cuenta de los Core Data, es más fácil de usar.
Nunca usaría Core Data para almacenar una matriz transformada de cadenas o similar. Si las cadenas no tienen lógica y solo hay unas pocas docenas de ellas, también podría escribir la matriz en un archivo plist. Será más rápido y más fácil que jugar con un atributo transformable.
No uso el iPhone, pero trato con SQLite: mi decisión a menudo se reduce a * cómo * se usarán los datos. ¿Las relaciones (y las entidades individuales) son fundamentales para el uso o * los datos solo se producen/consumen como una sola unidad *? (En un entorno "no integrado" casi siempre defiendo exclusivamente el enfoque normalizado). –
@pst La relación no es importante, los datos solo se usan como una sola unidad. Tengo más curiosidad sobre cuán grandes pueden ser los datos hasta que afecten el rendimiento y es mejor normalizarlos. – pixelfreak