ios - qué - tipos de herencia en programacion
Herencia de datos centrales frente a ninguna herencia (2)
Como usted y yo hemos averiguado ambas cosas de manera independiente, tenga mucho cuidado con las entidades que heredan entre sí. También encontré que Core Data tiende a hacer una tabla gigante que contiene todos los campos para la entidad base y todas las entidades que derivan de ella, por lo que cualquier entidad dada contiene los campos para cada entidad potencial desde su antecesor más lejano hacia abajo. Muy, muy lento y caro.
Recomiendo encarecidamente que las clases de entidad se hereden unas de otras y reflejen las propiedades de la clase base en todas las entidades, sin herencia real en el modelo de objetos gestionados.
Tengo algunos problemas con los datos básicos, así que espero que alguien pueda ayudarme :)
Primer problema, tengo un modelo de datos que se ve así:
Entity P (A) <----> Entity R
/ | /
/ // /
/ / | / /
C D E F G
Todas mis entidades heredan de la misma entidad "P" porque necesitan un atributo común y una relación común ("A" y "R")
El problema que estoy obteniendo es que el uso de datos básicos genera solo una tabla sqlite para todas las entidades cuando se usa la herencia. En mi caso, significa que mi base de datos tendrá solo 1 tabla para todos los datos. Investigué un poco y vi que crea problemas de rendimiento (además, todos los atributos de mis entidades son transitorios y durante willSave sus valores se agregan + cifran en un NSData almacenado en "A", por lo que no podré usar el predicado para filtrar y mejorar el rendimiento de SELECT). Así que decidí eliminar "P" y agregar "A" a "C", "D" ..., "G". El problema es con "R", porque antes solo tenía una relación inversa, y ahora necesito crear una cada vez que creo un nuevo tipo de entidad. Entonces me gustaría eliminar todas las relaciones inversas, ¿es posible? A veces necesito crear un objeto gestionado con un contexto nulo, y los inserto en el contexto más adelante, esta es probablemente la razón por la cual la relación inversa no se establece automáticamente por los datos centrales si configuro el no inverso antes de la inserción en el MOC ¿verdad? De todos modos, nunca necesito lo contrario, entonces ¿puedo evitar definirlos incluso si recibo una advertencia?
Segundo problema, en situaciones específicas necesito crear una nueva "R" y asignarla a "C", "D", ..., "G" durante el guardado de MOC. Entonces me gustaría usar willSave pero, no sé si la entidad creada será guardada. Si el MOC hace un simple bucle sobre "insertedObjects" / "updatedObjects" / "deletedObjects", y para cada objeto que llama willSave, hace el save, y luego llama a didSave, significa que voy a modificar el array en que se está iterando, y luego debería bloquearse no?
Los datos principales no son una envoltura alrededor de sus tablas sql. Se trata del gráfico de objetos y su persistencia. La tienda SQLite es solo una forma de persistir. Mira esto. Evite que los datos principales combinen entidades en una sola tabla