0

enter image description hereCoreData - 一对多关系 - 数据模型

这是我的核心数据结构。我有三个实体RoomKeyKeyRoomMap。现在我在RoomKey中有两个属性。我希望他们两个的ID属性应该与第三个表KeyRoomMap相关联,并且在KeyRoomMap中还有更多的一个元素SuggestedTestPlan

我的问题是

  1. 这就好比结构 - 在这里SQL表。但是我觉得这是核心Data中的错误结构 。我想加入keyIDroomID 与KeyRoomMap有一些关系。我怎么能这样做,就像我 添加keyID和roomID,它应该被自动添加到 KeyRoomMap?
  2. 每个房间都有更多的钥匙。所以key1,key2与room1相关联 ,key3与room2和key4,key5,key6与room3 。如何在这里建立这样的关系?

-----------------------编辑和添加

其实我的困惑也开始与key1的,如果和键2与会议室1相关。我可以加入他们与那里的一对多关系。但keyroomMap实体被定义为说key1和key2与Room1相关联。如果我不制作这张表,那么只有在这么多的关键字的基础上,我应该怎么说?

回答

1

事实上,它看起来像你正在计划它像SQL表。

从你的解释听起来:

  • 一个房间可以有多个按键

  • 一键即可解锁一个房间

所以我会说你房间实体的关系ld是'钥匙',这是一对多的关系。请记住,在核心数据中,您还需要设置反向关系,因此关键实体之间的对应关系将是空间并且是一对一的关系。

我已经在下面的图像中包含了数据模型图。

Room - Key Model

我真的不知道你的目的是什么的KeyRoomMap?那么建议TestPlan属性是否存在于Key或Room上?看起来KeyRoomMap实体似乎有两个关系,因为KeyRoomMap存在,它必须有一个对应的Room和Key,这两个关系都是一对一的关系。我已经包含了一个可能的图表,但没有更多信息,我无法确定。

Room - Key - RoomKeyMap Model

编辑:否则是suggestedTestPlan可能基于其他实体衍生或计算的属性?即。获取属性https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW7

+0

嘿丹尼尔感谢您的回答,但我真的在想我是否需要像这个标识符的任何属性?因为我在我的核心数据中使用了roomID和locationID作为主键,现在如果我将它们与关系结合在一起,那么不会有任何需要的ID。对 ? –

+0

是的,这是正确的。我曾假设标识符是特定于你的房间而不是数据库标识符的东西(即在酒店房间标识符409中)。如果不是这种情况,你可以通过他们的关系访问他们。 self.room.keys将为您提供该房间的一组密钥。或者如果你有一个key self.key.room会给你相应的房间。 –

+0

另外,如果您使用Xcode模型生成器,它将在您的模型类上为您创建方法来添加和删除对象。 Xcode> Editor>创建NSManagedObject子类。这将使用addKeyObject:(Key *)值等方法为您生成Room.h和Room.m;和addKeys:(NSSet *)值; –