16-CoreData之多表关联(存储自定义数据模型)

多表关联

1.1-简介

  • 什么是多表关联

    • 在处理数据库的关系中,无非只有三种关系

    • 一对一:一个老师只能在一个教室上课,不可能同时在两个教室上课

    • 一对多:一个教室可以有多个学生,但一个学生只能在一个教室

    • 多对多:一门学科可以有多个学生,一个学生也可以学习多门学科

    • 本小节我们主要学习一对多的关联,通过学习一对多来举一反三其他两种关系

    1.2-如果在模型文件中对两个实体之间进行关联?

    • 给教室关联学生

这里写图片描述

  • 给学生关联教室

    这里写图片描述

  • Type:

    • toOne:只指向一个对象(可用于某一个属性是自定义数据模型)
    • toMany:可以包含多个对象(一般是集合类型,可用于某一个属性是数组,数组中是自定义模型)
  • 添加数据

    
    ClassRoom *room = [kManagedObjectContext getManagedObjectModel:@"ClassRoom"];
    
    room.roomNumber = @"1302";
    
    Student *student = [kManagedObjectContext getManagedObjectModel:@"Student"];
    student.name = @"李四";
    
    [room addStudentObject:student];
    //    student.classRoom = room;
    
    [kManagedObjectContext save];
    
  • 注意上面注释的那行代码,如果不写的话只是把学生加到了这间教室,但是并没有指定这个学生属于哪间教室,所以学生的classRoom属性在数据库中为null

    • 很显然这是不符合常规逻辑了,既然学生与教室已经进行了一对多的关联,那么把学生加到教室自然就应该知道这个学生属于哪间教室

    • 那么如何不写student.classRoom = room也能让学生的数据库表格中的classRoom有对应的值呢?

    • 我们需要在模型文件的关联中设置反转属性

这里写图片描述

1.3-删除关联

1.3.1-简介

  • 什么是删除关联

    • 当两个表进行关联之后,删除其中一个表的数据对另一个表产生的影响

1.3.2-如何设置删除关联

  • 点击实体对应的关系实体,右方有一个Delete Rule选项

这里写图片描述

  • 这里以上图中设置学生的关联实体教室为例

1.3.3-Nullify(为空)

  • 如果设置教室相对于学生的删除关联为Nullify,则表示:如果删除教室,学生并不会删除,只是学生的教室为null

1.3.4-Cascade(级联)

  • 如果设置教室相对于学生的删除关联为Cascade,则表示:如果删除学生,则学生对应的教室也会被删除

1.3.5-Deny(拒绝)

  • 如果设置教室相对于学生的删除关联为Deny,则表示:只要教室存在,就无法删除学生,要想删除学生,就要先删除教室

1.4-删除关联总结

  • 模拟真实需求:

    • 删除学生,对应的教室不会被删除
    • 只要删除教室,教室里的学生就删除
    • 我该如何设置
  • 设置教室实体中的删除关联为Cascade(级联),设置学生实体中删除关系为no Action(表示删除学生不会对教室有影响)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值