这是我之前关于“Managing employee contracts in a many-to-many relationship?”和this question
的问题的后续问题我有一种可以解释的关系:
company --< contracts >-- employees
我正在通过JSON导入数据。为简单起见,它如下所示。
{
"companies" : [
{
"name" : "Company A",
"employees" : [
{
"name" : "Tom",
"contract" : {
"length" : "10",
"salary" : "10000"
}
}
]
}
]
}
问题是,我不确定这是否正确。
在我的模型关系中,contract
位于company
和employees
之间,而在上面的代码中,我把它作为一个对象,它作为一个孩子坐在员工之下。 / p>
因此,我的问题是,联结表应该放在JSON Feed中的哪个位置?
它应该作为员工的父母,还是可以在哪里?
我不确定我是否正确行事并欢迎任何有关构建/布局依赖于联结表的JSON Feed的最佳方法的帮助/想法。
我知道这看起来很愚蠢,但我正在努力确定处理交接表时的最佳标准。
感谢。
编辑。
目的/背景
我正在尝试使用TouchJSON将JSON读入Core数据。对于之前没有澄清背景的道歉。更新了标签。
我将JSON读入NSDictionary。如果我开始将对象分开,我不确定在解析/读取数据到内存时,如何让TouchJSON / iOS理解每个关系的上下文。
答案 0 :(得分: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的目的分配一些,甚至是暂时的,以实现你的目标。
答案 1 :(得分:1)
您的实体关系(ER)模型表达很多的主要原因:通过关联实体的许多关系是因为关系数据模型(关系数据库是ER模型实现的最可能的基因座)无法直接表达很多:许多关系 - 它需要一个交叉表,用于许多关系。请注意,还有其他原因可能需要这样的交叉表(例如,合同本身就是一个实体)。
但是,您的对象模型没有理由受到关系数据库强加的约束。