我想知道为什么我必须在两个相关的数据集中定义hasMany 和 belongsTo?这似乎是多余的,因为所有必要的信息都已经在其中一个数组中,并且很难保持两者同步。
它也没有反映sql数据库中的表,其中一个表中只有一个外键,一对多关系。
答案 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。一旦理解了有向图,以及如何遍历它们,您就会明白为什么大多数人使用双面关系。 (虽然,正如我上面给你看到的,你没必要。)