我的应用程序基于CoreData,但它们可能是所有关系数据库的通用理论:
我的模型中有一个Output-Input to-many关系。对于每个实体,在此关系下可能存在无限数量的链接。识别特定输入或输出的最佳方法是什么?
到目前为止,我实现这一目标的唯一方法是在关系中放置一个可以保存输出和输入名称的中间实体。然后,实体可以循环通过其输入/输出,以在需要时找到正确的关系。有没有更好的办法?
实际上,我正在努力提供一个可以与其他通用实体建立任意数量关系的通用实体。
如果我的描述不是最清楚,请道歉。
编辑以回应以下答案: 首先感谢您的回复。我当然有一个双向太多的关系。但是,如果一个小部件有两个与其输入关系链接的其他小部件,那么确定哪个输入正在提供的最佳方式是什么,比如,'年龄'或'年服务',当两者都有这个属性但我只对特定的各自的价值?
答案 0 :(得分:2)
我和约书亚一样困惑 - 它告诉我,你可能没有清楚地了解你想要达到的目标,或者它有点复杂(两者兼而有之。)。
我最好的猜测是你有类似的东西:
实体小工具 属性:
关系
(其中按照标准a - >>是多对多关系,而<< - >>是与多对多反向关系的多对多关系)。
因此每个小部件都将存储它作为输出的小部件集和它作为输入的小部件集。
因此,特定小部件维护一组inputWidgets和outputWidgets。这些关系中的每一个也是相反的,因此您可以 - 对于输入或输出中的任何小部件 - 看到您的小部件位于其输入或输出列表中。
这虽然很丑陋。
我认为你的问题是如何在标记关系时实现上述目标。你提到你希望每个关系都有一个字符串标识符(唯一?)。
您可以通过以下方式执行此操作:
为每个双面关系创建新的widgetNamedRelationship。请注意,我假设每个关系都是双面的。
然后,对于每个小部件,您都有一组命名输入和命名输出。这也允许小部件附加到自身,但只有单独的输入和输出总线。
那么对于你的实例类中你的例子“age”来说,Widget实例叫做aWidget你会有类似的东西:
NSPredicate * agePredicate = [NSPredicate predicateWithFormat:@“name ='age'”]; NSSet * ageInputs = [aWidget.inputs filteredSetUsingPredicate:agePredicate];
我明白了这个问题吗?
答案 1 :(得分:0)
如果您希望能够充分利用快速高效的店内查询的便利性,那么真的没有更好的方法。目前还不清楚你在附加评论中提出的问题,我想这就是为什么你还没有得到任何答案。
请记住,Core Data支持多对多关系而没有“连接表”。
如果Widget有很多输入或输出(我怀疑它可能是同一个实体),那么Widget和Input之间的多对多,双向关系(与Core Data相反的关系)是一切你需要的。然后,您需要做的就是查看您的Input实例是否在Widget实例的-inputs中,或者Widget实例是否在Input实例的-widgets中。
那是你在寻找什么?如果没有,请尝试澄清您的问题(通过编辑,而不是通过附加评论: - ))。