CONTEXT
Realm不支持关系属性(对象)的索引. https://realm.io/docs/objc/latest/#indexed-properties
如果你尝试,它会抛出一个错误.
我们有一种情况,我们需要查询模型的关系和另一个属性.
通常你会通过覆盖(foreign_id,property)覆盖索引来实现这一点,但这在Realm中似乎不可能(但是?)
例如
@interface Book : RLMObject
@property NSNumber<RLMInt> * page;
@end
@interface Page : RLMObject
@property Book * book;
@property NSNumber<RLMInt> * line;
@end
[Page objectsInRealm:realm where:@"book.uuid = %@ AND page.line = %@", uuid, @1];
题
设置索引以使上述查询最佳的最佳方法是什么?
关系是否已编入索引?
或者我是否在页面上创建另一个属性,名为book_uuid,并在其上创建索引?
干杯
最佳答案 Realm并不真正迎合关系数据库的外键机制,因此在设计数据模型时更容易摆脱这种心态.
在这种情况下,我认为您的Book模型存储所有页面的数组(与外键概念相反)更合适,您可以使用它来初始过滤页面到该书,以及然后查询特定的页面行:
@interface Page : RLMObject
@property NSInteger line;
@end
RLM_ARRAY_TYPE(Page)
@interface Book : RLMObject
@property RLMArray<Page *><Page> *pages;
@end
Book *book = [[Book allObjects] firstObject];
Page *page = [[book.pages objectsWhere:@"line = %@", @1] firstObject];
只要您将行标记为索引属性,理论上这应该非常快.但是既然你已经提到过你有成千上万的页面线,我很想知道这会是什么样的真实表现.