开发者

How to Convert Existing MySQL Schema to Core Data

I have a MySQL database and would like to have a similar structure in Core Data. I am very new with using Core Data with Xcode. I have a few fundamental questions if I am doing the right thing.

My Mysql DB looks similar to this:

table.caveconditions
  visibilityID
  percolationID
  xxxx

table.visibility
  visibilityID
  visibilityValue

...and so on. I would then connect the tables using JOINS

Now, I have done the Core Data modeling like this but开发者_开发问答 I am not quite sure if this is the right approach.

Would be great if someone of you could tell me if this is the right way to do it. In the end I would like to use JSON strings to dump the mysql table into core data.

Thanks a lot Chris

How to Convert Existing MySQL Schema to Core Data

I have created the new schema. Is this right?

How to Convert Existing MySQL Schema to Core Data


It looks good except for all the "xxxID" attributes e.g. caveID. You also need to follow the naming conventions.

You have the same attribute names with (presumably) the same values in two or more entities. This is necessary in SQL for joins but in Core Data, this is handled by objects and relationships.

Each object in Core Data is automatically universally unique. This means when you create a relationship from one object to another, that relationship concrete identifies on specific unique object.

This means you only need an attribute like caveID in the actual entity that caveID designates which in this case is (presumably) the Caves entity. You don't need the attribute in the CavesConditions entity or any other entity that has a relationship to the "Caves" entity.

(If the xxxID were just artifacts of SQL, you don't actually need them at in Core Data unless some external database your app interacts with requires them.)

A good rule of thumb to use is that any particular value should show up on only one side of a relationship and, ideally, only once in the entire data model.

Naming conventions are a little different than SQL. A Core Data entity isn't a table. An entity is more akin to a class. Each entity is supposed to describe a single instance of a managed object. How many of those instances end up in the object graph is irrelevant. Therefore, entity names are singular.

In this case, Caves should be Cave, Countries should be Country and so on.

Relationships are named after the entity they target. It is not immediate obvious but each reciprocal relationship (the default) on the visual data model editor is actually two relationships because there is one relationship description for each side. Each side has the name of the entity targeted. By convention to-one relationships have a singular name and a to-many relationship has a plural name.

So:

Caves.relConditions<-->>CaveConditons.getCave 

...would become

Cave.conditons<-->>CaveConditon.cave

The naming conventions are important because Objective-C uses conventions names to generate and search for accessor methods.


CoreData is NOT a database. Remodel your data as simply as you can and in a way that suits how it will be used in your application and do not think about joins or structure based optimization. You do not have control over the backing schema of a CoreData object model. This is the hardest concept you must get over when starting to use CoreData, but once you do, you will be better off.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜