Ember数据:为什么有很多并且属于

时间:2014-08-05 11:11:58

标签: ember.js ember-data

我想知道为什么我必须在两个相关的数据集中定义hasMany belongsTo?这似乎是多余的,因为所有必要的信息都已经在其中一个数组中,并且很难保持两者同步。

它也没有反映sql数据库中的表,其中一个表中只有一个外键,一对多关系。

1 个答案:

答案 0 :(得分:3)

因为关系可以采用两种方式。在您的SQL示例中,一个表中的外键仅对该表施加约束,而不是外键所属的表。从某种意义上说,这只是一种单向关系。第一个表的行必须链接到第二个表的行,但反之亦然。如果要模拟该行为,则应使用null反向,如下所示:

App.User = DS.Model.extend({
    posts: DS.hasMany('post', { inverse: null });
});

App.Post = DS.Model.extend({
    // No inverse relationship required
});
但是,双向关系是不同的。要扩展SQL比较,希望有两个外键,每个表一个。表A的行必须指向表B的行表B的行必须指向表A的行。

但SQL在这里确实是一个糟糕的比较。如果您担心这种不匹配,那么您的数据存储实施会泄漏到您的数据模型中。相反,您应该将Ember-Data模型视为图形。具体而言,directed graphs。一旦理解了有向图,以及如何遍历它们,您就会明白为什么大多数人使用双面关系。 (虽然,正如我上面给你看到的,你没必要。)