ios - 如何将现有的 MySQL 模式转换为核心数据

标签 ios core-data data-modeling

我有一个 MySQL 数据库,希望在 Core Data 中有一个类似的结构。我对在 Xcode 中使用 Core Data 很陌生。如果我在做正确的事,我有几个基本问​​题。

我的 Mysql 数据库看起来与此类似:

table.caveconditions
  visibilityID
  percolationID
  xxxx

table.visibility
  visibilityID
  visibilityValue

……等等。然后我会使用 JOINS 连接表

现在,我已经像这样完成了核心数据建模,但我不太确定这是否是正确的方法。

如果你们中有人能告诉我这是否是正确的方法,那就太好了。最后我想使用 JSON 字符串将 mysql 表转储到核心数据中。

非常感谢 克里斯

enter image description here

我已经创建了新架构。这样对吗?

enter image description here

最佳答案

除了所有“xxxID”属性外,它看起来不错,例如洞穴编号。您还需要遵循命名约定。

您在两个或多个实体中具有相同的属性名称和(大概)相同的值。这在 SQL 中对于连接是必需的,但在 Core Data 中,这是由对象和关系处理的。

Core Data 中的每个对象都是自动普遍唯一的。这意味着当您创建从一个对象到另一个对象的关系时,该关系具体标识特定的唯一对象。

这意味着您只需要 caveID 指定的实际实体中的 caveID 属性,在这种情况下(大概)是 Caves实体。您不需要 CavesConditions 实体或与“Caves”实体有关系的任何其他实体中的属性。

(如果 xxxID 只是 SQL 的产物,那么在 Core Data 中您实际上不需要它们,除非您的应用与之交互的某些外部数据库需要它们。)

一个好的经验法则是任何特定值都应该只出现在关系的一侧,理想情况下,在整个数据模型中只出现一次。

命名约定与 SQL 略有不同。核心数据实体不是表。实体更类似于类。每个实体都应该描述托管对象的单个实例。这些实例中有多少最终出现在对象图中是无关紧要的。因此,实体名称是单数的。

在这种情况下,Caves 应该是CaveCountries 应该是Country 等等。

关系以它们所针对的实体命名。这不是很明显,但可视化数据模型编辑器上的每个相互关系(默认)实际上是两个关系,因为每一方都有一个关系描述。每一方都有目标实体的名称。按照惯例,一对一关系有一个单数名称,一对多关系有一个复数名称。

所以:

Caves.relConditions<-->>CaveConditons.getCave 

...会变成

Cave.conditons<-->>CaveConditon.cave

命名约定很重要,因为 Objective-C 使用约定名称来生成和搜索访问器方法。

关于ios - 如何将现有的 MySQL 模式转换为核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747158/

相关文章:

ios - 从 Objective C 中的另一个类访问变量值

ios - Singleton 的 Swift Delegate 不工作

swift - 核心数据提取不适用于真实设备 - 核心数据 Swift 3

mysql - 同一张表上的多对一和一对一关系?

data-modeling - 如何识别执行了 X 次操作的用户? [敏锐-io]

ios - 如何从 NSString 中提取数字?

ios - 查看层次结构约束错误

ios - RestKit - 一次处理一个 REST 操作

ios - CoreData -(性能)频繁数据的注意事项

ruby-on-rails - 在 Rails 用户模型中设置 default_address