领域和属性的索引

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];

只要您将行标记为索引属性,理论上这应该非常快.但是既然你已经提到过你有成千上万的页面线,我很想知道这会是什么样的真实表现.

点赞