2011-06-01 94 views
4

这是一个后续问题我刚才的问题上“Managing employee contracts in a many-to-many relationship?”和this question如何在JSON中处理ManyToMany关系?

我能正是如此解释的关系:

company --<contracts>-- employees

我通过JSON导入数据。为简单起见,它显示如下。

{ 
    "companies" : [ 
    { 
     "name" : "Company A", 
     "employees" : [ 
     { 
      "name" : "Tom", 
      "contract" : { 
      "length" : "10", 
      "salary" : "10000" 
      } 
     } 
     ] 
    } 
    ] 
} 

问题是,我不确定这是否正确。

在我的模型关系contract坐在company,在我上面的代码之间employees,而我已经把它作为一个对象,它位于作为员工以下的儿童。

因此,我的问题是,结合表应该在JSON提要内位于何处?

它应该作为员工的父母,还是没有问题?

我不知道我是否正确地做了这件事,并且欢迎任何关于结构/布局依赖于联结表的JSON提要的最佳方法方面的任何帮助/想法。

我知道它可能看起来很愚蠢,但我试图确定处理联结表时的最佳标准。

谢谢。

编辑。

目标/内容

我试图在JSON读入使用TouchJSON核心数据。对于之前没有澄清背景的道歉。更新了标签。

我把JSON读入NSDictionary。如果我开始将对象分开,我不确定如何让TouchJSON/iOS在解析/读取数据到内存时了解每个关系的上下文。

+0

我认为这取决于你想要对数据做什么,你想如何处理它...... – 2011-06-01 20:02:48

+0

我希望从feed中获取数据并将其放入Core数据中。 – zardon 2011-06-02 05:14:45

回答

2

无外键完成此操作的唯一方法是复制关系中“多”实体的一侧。根据上面的示例,这意味着在整个数据结构中复制员工。

你真的只能解决这个问题,就像你的关系数据库解决这个问题一样 - 使用映射表和外键。

{ 
    "companies" : [ 
    { 
     "id" : 1, 
     "name" : "Company A" 
    } 
    ], 

    "employees" : [ 
    { 
     "id" : 1, 
     "name" : "Fred" 
    } 
    ], 

    "contracts" : [ 
    { 
     "id" : 123, 
     "company_id" : 1, 
     "employee_id": 1 
     "length" : 10, 
     "salary" : 10000 
    } 
    ] 
} 

(顺便说一句,数值在JSON是有效的,它们不需要被引用)

的问题,那么,如果你在序列化的时候必须给你提供这些键。如果不是,那么您可能需要分配一些,即使是暂时用于JSON的目的,以实现您的目标。

+0

因为JSON是在PHP应用程序中创建的,所以我确实有键。但问题是,当我在Core数据/ iOS中反序列化它时,我不确定如何确保TouchJSON/iOS在阅读时了解每个关系的上下文。 – zardon 2011-06-02 05:25:17

+0

关于这个解决方案的更多思考,是否意味着我需要将API直播,因为我宁愿不这样做,只是使用固定文件(在这种情况下是JSON)。我不知道如何让Core数据/ iOS理解所有关系等,除非我将整个JSON订阅源加载到内存中,然后通过各种NSDictionaries进行拖网来查找匹配项。这听起来相当耗费人力和时间。如果有另一种方式,我至少有兴趣看看它。 – zardon 2011-06-02 14:43:20

+0

@zardon我们在这里谈论的数据量是多少? – Matt 2011-06-02 18:38:41

1

您的实体关系(ER)模型表达的主要原因很多:通过关联实体的许多关系是因为关系数据模型(关系数据库是您ER模型的实现最有可能的位置)不能直接表达许多:许多关系—它需要一个多关系的相交表。请注意,还有其他原因可能需要这样一个相交表(例如,合约本身就是一个实体)。

但是,没有理由说您的对象模型必须承受关系数据库施加的约束。

+0

我对实体关系模型感到满意,我已经测试过它,它确实解决了我的需求/问题;然而JSON的东西让我感到困惑。它是否反映了关系数据库的结构,如果我开始分离它,iOS如何理解关系上下文? – zardon 2011-06-02 05:30:28

+0

我刚刚决定让应用程序简化并尽可能避免这种情况。 – zardon 2011-07-05 14:35:16

+0

我的2美分:JSON并不是要反映E-R模型或关系数据库,它只是一个可以模拟_hierarchical_ db的文本列表。 – netalex 2013-06-28 10:00:39