Cómo convertir el esquema MySQL existente a los datos básicos

Tengo una database MySQL y me gustaría tener una estructura similar en Core Data. Soy muy nuevo con el uso de Core Data con Xcode. Tengo algunas preguntas fundamentales si estoy haciendo lo correcto.

Mi DB Mysql es similar a esto:

table.caveconditions visibilityID perqueuetionID xxxx table.visibility visibilityID visibilityValue 

…y así. Luego conectaría las tablas con JOINS

Ahora, he hecho el modelado de Core Data así, pero no estoy seguro de si este es el enfoque correcto.

Sería genial si alguien de ustedes me dijera si esta es la forma correcta de hacerlo. Al final me gustaría usar cadenas JSON para volcar la tabla mysql en datos centrales.

Muchas gracias chris

introduzca la descripción de la imagen aquí

He creado el nuevo esquema. ¿Es esto correcto?

introduzca la descripción de la imagen aquí

Se ve bien excepto por todos los attributes "xxxID", por ejemplo, caveID . También debe seguir las convenciones de nomenclatura.

Tiene los mismos nombres de atributo con (presumiblemente) los mismos valores en dos o más entidades. Esto es necesario en SQL para las uniones, pero en Core Data, esto se maneja mediante objects y relaciones.

Cada object en Core Data es automáticamente universalmente único. Esto significa que cuando crea una relación de un object a otro, esa relación concreta se identifica en un object único específico.

Esto significa que solo necesita un atributo como caveID en la entidad real que caveID designa, que en este caso es (presumiblemente) la entidad de Caves . No necesita el atributo en la entidad CavesConditions o cualquier otra entidad que tenga una relación con la entidad "Caves".

(Si el xxxID era solo artefactos de SQL, en realidad no los necesita en Core Data a less que alguna database externa con la que su aplicación interactúe los requiera).

Una buena regla para usar es que cualquier valor particular debería aparecer solo en un lado de una relación y, idealmente, solo una vez en el model de datos completo.

Las convenciones de nomenclatura son un poco diferentes de SQL. Una entidad de datos básicos no es una tabla. Una entidad es más similar a una class. Cada entidad debe describir una única instancia de un object gestionado. Cuántas de esas instancias terminan en el gráfico de object es irrelevante. Por lo tanto, los nombres de entidades son singulares.

En este caso, las Caves deben ser Cave , los Countries deben ser Country y así sucesivamente.

Las relaciones tienen el nombre de la entidad a la que apuntan. No es obvio de inmediato, pero cada relación recíproca (la pnetworkingeterminada) en el editor de models de datos visuales es en realidad dos relaciones porque hay una descripción de relación para cada lado. Cada lado tiene el nombre de la entidad objective. Por convención, las relaciones de una tienen un nombre singular y una relación de muchas tiene un nombre plural.

Asi que:

 Caves.relConditions<-->>CaveConditons.getCave 

…se convertiría

 Cave.conditons<-->>CaveConditon.cave 

Las convenciones de nomenclatura son importantes porque Objective-C usa nombres de convenciones para generar y search methods de acceso.

CoreData NO es una database. Remodele sus datos de la forma más sencilla posible y de una forma que se adapte a la forma en que se usará en su aplicación y no piense en las combinaciones o la optimization basada en la estructura. No tiene control sobre el esquema de respaldo de un model de object CoreData. Este es el concepto más difícil que debes superar al comenzar a usar CoreData, pero una vez que lo hagas, estarás mejor.