多表关联

1.1-简介

  • 什么是多表关联

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

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

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

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

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

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

    • 给教室关联学生

  • 给学生关联教室

  • Type:

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

  • ClassRoom *room = [kManagedObjectContext getManagedObjectModel:@"ClassRoom"];
    
    room.roomNumber = @"";
    
    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(表示删除学生不会对教室有影响)

16-CoreData之多表关联(存储自定义数据模型)的更多相关文章

  1. iOS开发CoreData的多表关联

    1.多表关联 多表关联,对SQL 数据库的操作,在一张表的数据中可以引用另外一张表里的数据.通过 Entity 实体中的 Relationships 来实现,比起传统的 SQL 数据库来,更加简单. ...

  2. SpringDataJPA - 复杂查询总结 (多表关联 以及 自定义分页 )

    实体类 @Entity @Table(name = "t_hotel") @Data public class THotel { @Id private int id; priva ...

  3. CoreData 多表 关联

    本文转载至 http://www.jianshu.com/p/e9f3b5e0cd19 1.概念简介 coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表 ...

  4. JPA使用nativequery多表关联查询返回自定义实体类

    本文为JPA的学习采坑,如有问题欢迎指正. JPA官方推荐的多表关联查询使用不便,接触的有些项目可能会使用JPA 做简单查询,Mybaits做复杂查询.所以想要寻找一种好用的解决方案. JPA多表关联 ...

  5. Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!

    之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...

  6. java 16 -11 ArrayList存储自定义对象并增强for遍历

    需求:ArrayList存储自定义对象并遍历.要求加入泛型,并用增强for遍历. A:迭代器 B:普通for     C:增强for LinkedList,Vector,Colleciton,List ...

  7. C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  8. salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...

  9. 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

随机推荐

  1. SDWebImage学习

    SDWebImage学习 SDWebImage版本是:'4.2.2' SDWebImage是iOS开发中常用的图片加载的库,能下载并缓存图片.这次就着重介绍SDWebImage的特色功能:下载与缓存. ...

  2. SVN经常使用命令总结(持续更新)

    如今流行的协同管理工具预计就属SVN和Git了.这两者都使用过,只是如今正在使用的是SVN.故将常常使用的命令总结下来. 无论是Windows端的svnclient还是eclipse的subversi ...

  3. Unable to run Kiwi tests on iOS8 device

    本文转载至 http://stackoverflow.com/questions/25871601/unable-to-run-kiwi-tests-on-ios8-device 5down vote ...

  4. curl is a tool to transfer data from or to a server curl POST

    https://curl.haxx.se/docs/manpage.html curl is a tool to transfer data from or to a server, using on ...

  5. Machine Learning in Action(3) 朴素贝叶斯算法

    贝叶斯决策一直很有争议,今年是贝叶斯250周年,历经沉浮,今天它的应用又开始逐渐活跃,有兴趣的可以看看斯坦福Brad Efron大师对其的反思,两篇文章:“Bayes'Theorem in the 2 ...

  6. Automating hybrid apps

    Automating hybrid apps One of the core principles of Appium is that you shouldn’t have to change you ...

  7. 【React系列】Props 验证

    Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效.当向 props 传入无效 ...

  8. 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中

    下面是自己编写的 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中 (以防忘记) 原创哟 import java.io.BufferedReader;import java.io.Buffe ...

  9. C++软件工程师,你该会什么?

    请尊重原创: 转载注明来源   原创在这里哦 C语言广泛用于基础软件.桌面系统.网络通信.音频视频.游戏娱乐等诸多领域.是世界上使用最广泛的编程语言之一.随着物联网技术的发展,C/C++技术在3G网络 ...

  10. Linux-用户和权限

    1 Linux所有内容都是文件 归一的思想 面向对象的思想 文件只需要做增删改查的操作 2 延迟读取 一般的文本读取工具都是先将内容全部都读入内存中 cat的机制不同 是读一行显示一行 这与它的功能有 ...