【问题标题】:Objective-C - JSON format for Core Data relationship like in MySQL - Best practicesObjective-C - MySQL 中核心数据关系的 JSON 格式 - 最佳实践
【发布时间】:2018-06-04 10:24:52
【问题描述】:

我有类似 JSON:

{
    cities: {
        1: "London",
        3: "New York",
        9: "Tokio",
        10: "Moscow"
    },
    keywords: {
        120: "walk",
        121: "run",
        122: "eat",
        123: "lake"
    },
    parks: [
            {
                id: "1",
                likes: "5",
                parkName: "Park 1 in NEW YORK",
                city: "3", // id of the City NEW YORK
                keywords: [
                            "120",
                            "121"
                          ]
            },
            {
                id: "1",
                likes: "678",
                parkName: "Park 2 in NEW YORK",
                city: "3", // id of the City NEW YORK
                keywords: [
                            "120",
                            "123"
                          ]
            },
            {
                id: "1",
                likes: "416",
                parkName: "Park in London",
                city: "1", // id of the City London
                keywords: [
                            "123",
                            "122"
                          ]
            }, 
            ... so many ...
          ]
    }
}

所以,在 Xcode 中,我想这样使用: sample Xcode Core Data relationship

我创建了 NSManagedObject 子类,并且我有这个方法:

- (void)addParksObject:(PKParks *)value;
- (void)removeParksObject:(PKParks *)value;
- (void)addParks:(NSSet<PKParks *> *)values;

但是,我希望使用城市和关键字的 id 将 Parks 表连接到 MySQL 中的另一个表。 所以, 我有很多公园、一些城市和关键词。

这样存储数据的方法正确吗?

  1. 我应该存储城市和关键字的ID吗?
  2. 我应该像在 MySQL 中那样手动连接表吗?
  3. 我应该将 JSON 格式更改为无 ID 吗?

例如 JSON:

 {
    parks: [
            {
                id: "1",
                likes: "5",
                parkName: "Park 1 in NEW YORK",
                city: "NEW YORK", 
                keywords: [
                            "walk",
                            "run"
                          ]
            },
            {
                id: "1",
                likes: "678",
                parkName: "Park 2 in NEW YORK",
                city: "NEW YORK", 
                keywords: [
                            "walk",
                            "lake"
                          ]
            },
            {
                id: "1",
                likes: "416",
                parkName: "Park in London",
                city: "London",
                keywords: [
                            "lake",
                            "eat"
                          ]
            }, 
            ... so many ...
          ]
    }
}

【问题讨论】:

  • CoreData 如果您还没有继续并更改持久存储是一个 sqlite 文件。您可能知道 Sqlite 默认没有主键和外键约束或引用完整性约束。 CoreData 的关系是解决这个问题的方法。当您将城市连接到公园表时,您在城市和公园之间创建了一对多的关系。因此,每当您将城市对象获取到 managedObject 上下文时,城市对象的 parks 属性将具有与其关联的所有公园的数组。那么有什么困惑呢?
  • 当您添加一个公园时,您可以使用诸如 cityObject.parks = set of parks with your current one 之类的东西添加它和一些 City 对象 :) 所以显然核心数据知道哪个公园与城市相关联它维护一个 id(类似于内部的主键和外键,如果您打开 sqlite 文件,您将看到一个名为 Z_PK,Z_FK 的列)并且您不必将任何 id 映射到任何东西来链接两个托管手动对象

标签: ios objective-c json xcode core-data


【解决方案1】:

但是,我希望使用城市和关键字的 id 将 Parks 表连接到 MySQL 中的另一个表。

这是认为 Core Data 就像 SQL 的经典错误。它使用 SQLite,但 SQL 风格的思维会给你带来麻烦。

Core Data 旨在保存模型对象的实例。这些对象可能具有也是模型对象的属性。那是核心数据关系。您不使用外键或对象 ID 来表示关系,而是使用模型对象属性。 Core Data 将其转换为 SQL。

您可能想了解一下how Core Data relationships work

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多