我有一个 MySQL 数据库,希望在 Core Data 中有一个类似的结构。我对在 Xcode 中使用 Core Data 很陌生。如果我在做正确的事,我有几个基本问题。
我的 Mysql 数据库看起来与此类似:
table.caveconditions
visibilityID
percolationID
xxxx
table.visibility
visibilityID
visibilityValue
……等等。然后我会使用 JOINS 连接表
现在,我已经像这样完成了核心数据建模,但我不太确定这是否是正确的方法。
如果你们中有人能告诉我这是否是正确的方法,那就太好了。最后我想使用 JSON 字符串将 mysql 表转储到核心数据中。
非常感谢 克里斯
我已经创建了新架构。这样对吗?
最佳答案
除了所有“xxxID”属性外,它看起来不错,例如洞穴编号
。您还需要遵循命名约定。
您在两个或多个实体中具有相同的属性名称和(大概)相同的值。这在 SQL 中对于连接是必需的,但在 Core Data 中,这是由对象和关系处理的。
Core Data 中的每个对象都是自动普遍唯一的。这意味着当您创建从一个对象到另一个对象的关系时,该关系具体标识特定的唯一对象。
这意味着您只需要 caveID
指定的实际实体中的 caveID
属性,在这种情况下(大概)是 Caves
实体。您不需要 CavesConditions
实体或与“Caves”实体有关系的任何其他实体中的属性。
(如果 xxxID
只是 SQL 的产物,那么在 Core Data 中您实际上不需要它们,除非您的应用与之交互的某些外部数据库需要它们。)
一个好的经验法则是任何特定值都应该只出现在关系的一侧,理想情况下,在整个数据模型中只出现一次。
命名约定与 SQL 略有不同。核心数据实体不是表。实体更类似于类。每个实体都应该描述托管对象的单个实例。这些实例中有多少最终出现在对象图中是无关紧要的。因此,实体名称是单数的。
在这种情况下,Caves
应该是Cave
,Countries
应该是Country
等等。
关系以它们所针对的实体命名。这不是很明显,但可视化数据模型编辑器上的每个相互关系(默认)实际上是两个关系,因为每一方都有一个关系描述。每一方都有目标实体的名称。按照惯例,一对一关系有一个单数名称,一对多关系有一个复数名称。
所以:
Caves.relConditions<-->>CaveConditons.getCave
...会变成
Cave.conditons<-->>CaveConditon.cave
命名约定很重要,因为 Objective-C 使用约定名称来生成和搜索访问器方法。
关于ios - 如何将现有的 MySQL 模式转换为核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747158/