【问题标题】:CoreData - Relationship One to Many - Data ModelCoreData - 一对多关系 - 数据模型
【发布时间】:2014-05-06 06:34:16
【问题描述】:

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

我的问题是

  1. 这是类似于 SQL 表的结构。但我觉得这是 核心数据结构错误。我想加入keyIDroomID 与 KeyRoomMap 有一些关系。如果我这样做,我该怎么做 添加 keyID 和 roomID ,应该会自动添加进去 KeyRoomMap ?
  2. 每个房间都有更多的钥匙。所以 key1 , key2 是关联的 与房间1,key3与房间2和key4,key5,key6与房间3 .我怎样才能在这里建立这样的关系?

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

实际上,我的困惑也始于 key1 和 key2 是否与 Room1 相关联。我可以在那里以一对多的关系加入他们。但是 keyroomMap 实体被定义为表示 key1 和 key2 与 Room1 相关联。如果我不制作这张表,那么仅根据这么多键的关系我该怎么说??

【问题讨论】:

    标签: ios core-data relational-database entity-relationship iphonecoredatarecipes


    【解决方案1】:

    确实,看起来您正在像 SQL 表一样规划它。

    从你的解释看来:

    • 一个房间可以有很多钥匙

    • 一把钥匙可以打开一个房间

    因此,我会说您的 Room 实体上的关系是“键”,这是一对多的关系。请记住,在核心数据中,您还需要设置反向关系,以便 Key 实体上的对应关系是空间并且是一对一的关系。

    我已将数据模型图包含在下面的图片中。

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

    编辑: 否则建议TestPlan 是一个可以基于其他实体派生或计算的属性吗? IE。获取属性https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW7

    【讨论】:

    • 嘿丹尼尔谢谢你的回答,但我真的在想我需要像这个标识符这样的属性吗?因为我在我的核心数据中使用 roomID 和 locationID 作为主键,所以现在如果我将它们与关系连接起来,就不需要任何 ID。对吗?
    • 是的,这是正确的。我曾假设标识符将是特定于您的房间的东西,而不是数据库 ID(即在酒店房间标识符 409 中)。如果不是这种情况,您可以通过他们的关系访问它们。 self.room.keys 将为您提供该房间的一组密钥。或者如果你有一个 Key self.key.room 会给你对应的 Room。
    • 此外,如果您使用 Xcode 模型生成器,它将为您在模型类上创建方法来添加和删除对象。 Xcode > 编辑器 > 创建 NSManagedObject 子类。这将使用 addKeyObject:(Key *)value; 等方法为您生成 Room.h 和 Room.m;和 addKeys:(NSSet *)values;
    • 我的困境再次是如果数据重复怎么办?我们不需要在每张桌子上都有独特的东西吗??
    • 我添加了更多数据,还请您有空时看看?
    猜你喜欢
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多